
الامتياز الأقل في AWS للنشر الموزع عالي السرعة
يستخدم Repokid Access Advisor المقدم من Aardvark لإزالة الصلاحيات التي تمنح الوصول إلى الخدمات غير المستخدمة من السياسات المضمنة لدور IAM في حساب AWS.
mkvirtualenv repokid
git clone [email protected]:Netflix/repokid.git
cd repokid
pip install -e .
repokid config config.json
ستحتاج إلى جدول DynamoDB يُسمى repokid_roles (حدد الحساب ونقطة النهاية في dynamo_db في ملف الإعدادات).
يجب أن يحتوي الجدول على الخصائص التالية:
RoleId (سلسلة) كمفتاح قسم أساسي، بدون مفتاح فرز أساسيAccount بمفتاح قسم أساسي Account وخصائص مسقطة RoleId وAccountRoleName بمفتاح قسم أساسي RoleName وخصائص مسقطة RoleId وRoleNameللتطوير، يمكنك تشغيل Dynamo محلياً.
للتشغيل محلياً:
docker-compose up
ستكون نقطة نهاية DynamoDB هي http://localhost:8000. يمكن العثور على لوحة إدارة DynamoDB على http://localhost:8001.
إذا قمت بتشغيل الإصدار التطويري، فسيتم إنشاء الجدول والفهرس تلقائياً نيابةً عنك.
يحتاج Repokid إلى دور IAM في كل حساب سيتم الاستعلام عنه. بالإضافة إلى ذلك، يحتاج Repokid إلى التشغيل بدور أو مستخدم يمكنه استدعاء sts:AssumeRole إلى أدوار الحسابات المختلفة.
RepokidInstanceProfile:
sts:AssumeRole إلى جميع أدوار RepokidRole.repokid_roles وجميع الفهارس (المحددة في القسم الفرعي assume_role من dynamo_db في الإعدادات) والقدرة على تشغيل dynamodb:ListTablesRepokidRole:
RepokidInstanceProfile.connection_iam في ملف الإعدادات.{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:DeleteInstanceProfile",
"iam:DeleteRole",
"iam:DeleteRolePolicy",
"iam:GetAccountAuthorizationDetails",
"iam:GetInstanceProfile",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:ListInstanceProfiles",
"iam:ListInstanceProfilesForRole",
"iam:ListRolePolicies",
"iam:PutRolePolicy",
"iam:UpdateRoleDescription"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
لذا إذا كنت تراقب n حساباً، فستحتاج دائماً إلى n+1 دور. (n من RepokidRoles و 1 من RepokidInstanceProfile).
تشغيل repokid config config.json ينشئ ملفاً ستحتاج إلى تحريره. ابحث عن هذه الحقول وقم بتحديثها:
dynamodb: إذا كنت تستخدم Dynamo محلياً، فاضبط نقطة النهاية على http://localhost:8010. إذا كنت تستخدم Dynamo المستضاف على AWS، فاضبط region و assume_role و account_number.aardvark_api_location: موقع واجهة Aardvark REST API الخاصة بك. شيء مثل https://aardvark.yourcompany.net/api/1/advisorsconnection_iam: عيّن assume_role إلى RepokidRole، أو أي اسم أطلقت عليه.يستخدم Repokid عوامل تصفية لتحديد الأدوار المرشحة للإزالة. يمكن تكوين عوامل التصفية لتناسب بيئتك كما هو موضح أدناه.
يمكن استبعاد الأدوار عن طريق إضافتها إلى عامل تصفية القائمة المحظورة. أحد الأسباب الشائعة لاستبعاد دور هو أن عبء العمل المقابل يقوم بإجراءات عرضية قد لا تكون قد لوحظت ولكن من المعروف أنها مطلوبة. هناك طريقتان لاستبعاد دور:
filter_config.BlocklistFilter.allfilter_config.BlocklistFilter.<ACCOUNT_NUMBER>يمكن أيضاً صيانة القوائم المحظورة في ملف S3 blocklist. يجب أن تكون بالشكل التالي:
{
"arns": ["arn1", "arn2"],
"names": {"role_name_1": ["all", "account_number_1"], "role_name_2": ["account_number_2", "account_number_3"]}
}
إذا كنت تفضل إزالة أدوار معينة فقط، يمكنك استخدام عامل التصفية الحصري. ربما تريد النظر فقط في الأدوار المستخدمة في الإنتاج أو من قبل فرق معينة.
لتحديد الأدوار للإزالة، يمكنك إدراج أسمائها في ملفات الإعدادات. كما أن أنماط glob بنمط Shell مدعومة أيضاً.
يمكن تحديد اختيار الدور لكل حساب على حدة أو بشكل عام.
لتفعيل هذا الفلتر، ضع "repokid.filters.exclusive:ExclusiveFilter" في القسم active_filters من ملف الإعدادات.
لتكوينه، يمكنك البدء بملف الإعدادات الذي تم إنشاؤه تلقائياً، والذي يحتوي على إعدادات مثال في القسم "filter_config":
"ExclusiveFilter": {
"all": [
"<GLOB_PATTERN>"
],
"<ACCOUNT_NUMBER>": [
"<GLOB_PATTERN>"
]
}
بشكل افتراضي، يستبعد عامل تصفية العمر الأدوار التي يكون عمرها أقل من 90 يوماً. لتغيير هذا، قم بتحرير إعداد الإعدادات:
filter_config.AgeFilter.minimum_age.
يمكن إنشاء عوامل تصفية جديدة لدعم المنطق الداخلي. في Netflix، لدينا العديد منها خاصة
باستخداماتنا. لجعلها نشطة، تأكد من أنها في مسار Python وأضفها في الإعدادات إلى القائمة في
القسم active_filters.
يمكن توسيع Repokid عبر خطافات يتم استدعاؤها قبل وأثناء وبعد عمليات متنوعة كما هو مدرج أدناه.
| اسم الخطاف | السياق |
|---|---|
AFTER_REPO | role, errors |
AFTER_REPO_ROLES | roles, errors |
BEFORE_REPO_ROLES | account_number, roles |
AFTER_SCHEDULE_REPO | roles |
DURING_REPOABLE_CALCULATION | role_id, arn, account_number, role_name, potentially_repoable_permissions, minimum_age |
DURING_REPOABLE_CALCULATION_BATCH | role_batch, potentially_repoable_permissions, minimum_age |
يجب أن تلتزم الخطافات بالواجهة التالية:
from repokid.hooks import implements_hook
from repokid.types import RepokidHookInput, RepokidHookOutput
@implements_hook("TARGET_HOOK_NAME", 1)
def custom_hook(input_dict: RepokidHookInput) -> RepokidHookOutput:
"""يتم استدعاء دوال الخطاف مع قاموس يحتوي على المفاتيح المدرجة أعلاه بناءً على الخطاف الهدف.
سيتم تمرير أي تغييرات تُجرى على الإدخال وتُعاد في الإخراج إلى دوال الخطاف اللاحقة.
"""
...
يمكن العثور على أمثلة لتنفيذات الخطافات في repokid.hooks.loggers.
يمكن كتابة عوامل تصفية مخصصة لاستبعاد الأدوار من الإزالة. يجب أن تلتزم عوامل التصفية بالواجهة التالية:
from repokid.filters import Filter
from repokid.types import RepokidFilterConfig
from repokid.role import RoleList
class CustomFilterName(Filter):
def __init__(self, config: RepokidFilterConfig = None) -> None:
"""يتم تهيئة عوامل التصفية باستخدام قاموس يحتوي على محتوى `filter_config.FilterName`
من ملف الإعدادات. سيتم تهيئة هذا المثال باستخدام `filter_config.CustomFilterName`.
يمكن الوصول إلى الإعدادات عبر `self.config`
إذا كنت لا تحتاج إلى أي منطق تهيئة مخصص، يمكنك حذف هذه الدالة من
فئة التصفية الخاصة بك.
"""
super().__init__(config=config)
# ضع منطق التهيئة المخصص هنا
...