يُشار إلى الليلة التي تسبق مؤتمر AWS re:Invent باسم جنون منتصف الليل، حيث تُصدر AWS العديد من الإعلانات في وقت واحد. أعلنت AWS هذا العام عن المسؤول المفوض لمؤسسات AWS. أناقش في هذا المنشور ماهية هذه الميزة، واستكشف بعض أمثلة حالات الاستخدام التي تسمح بها، وما نعتقد أنه يمكن أن يكون مصدر قلق في المستقبل نتيجة لذلك.
ماذا يفعل؟
يسمح المسؤول المفوض لمؤسسات AWS بتفويض مجموعة محدودة من إمكانيات المؤسسة إلى حساب واحد أو أكثر داخل المؤسسة. لا يمكنك تفويضها إلى حساب في مؤسسة أخرى، و(لحسن الحظ) لا يمكنك جعلها متاحة للعامة. وتنقسم هذه القدرات بشكل عام إلى نوعين:
-
إمكانية الرؤية في وضع العلامات على الحساب، والتسمية، وبنية الوحدة التنظيمية (OU).
-
إدارة ميزات السياسة: سياسات النسخ الاحتياطي، وسياسات التحكم في الخدمة (SCPs)، وسياسات العلامات، وسياسات إلغاء الاشتراك في خدمات الذكاء الاصطناعي
لا يسمح لك هذا بتفويض إنشاء الحسابات أو حذفها، أو إعداد Org CloudTrail، أو تمكين أو تعطيل ميزات المسؤول المفوضة الأخرى، أو عدد من ميزات المؤسسة الأخرى (راجع القائمة الكاملة للإجراءات المدعومة).
هذه الوظيفة الجديدة ليست مسؤولًا مفوضًا بنفس المعنى الذي تدعمه الخدمات الأخرى، حيث يتم تعيين حساب واحد كمسؤول يتمتع بإمكانيات كاملة على الخدمة. وبدلاً من ذلك، يعمل المسؤول المفوض لمؤسسات AWS كسياسة موارد مطبقة على المؤسسة، ويشار إليه بسياسة التفويض المستند إلى الموارد. يعد هذا أمرًا مهمًا لأنه يعني أنه يمكنك تطبيق كشوف متعددة يمنح كل منها إمكانية مختلفة لحساب مختلف أو مجموعة حسابات. على سبيل المثال، يمكنك منح حساب واحد القدرة على تعديل SCP المرفق بوحدة تنظيمية واحدة، وحساب آخر القدرة على تعديل SCP لوحدة تنظيمية مختلفة، وحساب آخر القدرة على إدارة سياسة النسخ الاحتياطي للوحدة التنظيمية الأولى. ويعني هذا أيضًا أنه يمكنك (ولكن لا ينبغي عليك) منح جميع الحسابات في مؤسستك جميع ميزات المنظمة المتاحة لتعديل SCPs الخاصة بهم والسياسات الأخرى.
حالات الاستخدام
إمكانية الرؤية في أسماء وعلامات الحسابات الأخرى في المؤسسة
غالبًا ما تواجه فرق الأمان صعوبة في تحديد ما إذا كان معرف الحساب المشار إليه يشير إلى حساب داخل مؤسستهم، وإذا كان الأمر كذلك، فما هو الغرض من استخدام هذا الحساب. يمكن أن تظهر معرفات الحساب غير المعروفة هذه في العديد من الأماكن: علاقة ثقة في سياسة حاوية S3، أو ARN مُشار إليه في سياسة IAM، أو في نتيجة تم إنشاؤها بواسطة GuardDuty. تعالج الفرق المختلفة هذه المشكلة بطرق مختلفة:
-
الحفاظ على جداول البيانات التي تصف الحسابات عبر المؤسسة—هذا الأسلوب يدوي للغاية، لذلك لا تتم مزامنة جداول البيانات في كثير من الأحيان.
-
إنشاء دور IAM في حساب AWS Organization Management الذي يجب افتراضه للوصول إلى
organizations:ListAccountsواجهة برمجة التطبيقات. -
إنشاء خدمة تستخدم تقنية دور IAM أو يتم تشغيلها مباشرة في حساب إدارة المؤسسة.
يحل المسؤول المفوض لمؤسسات AWS مشكلة الرؤية هذه بشكل أكثر أناقة من أي من هذه الأساليب. يتيح لك منح الحساب القدرة على رؤية الحسابات الأخرى في المؤسسة والعلامات المطبقة عليها مباشرة عن طريق إنشاء سياسة تفويض المؤسسة كما يلي:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListAccounts",
"Effect": "Allow",
"Principal": {
"AWS": "123456789012"
},
"Action": [
"organizations:ListAccounts",
"organizations:ListTagsForResource"
],
"Resource": "*"
}
]
}
لاحظ أنه عندما يتصل حساب العضو aws organizations list-accounts ولا يحتاج إلى إصدار جديد من واجهة سطر الأوامر (CLI) ولا يمرر معرف المؤسسة، لأنه مرة أخرى، لا يمكنك تفويض هذه المكالمات إلى حساب خارج مؤسستك.
باستخدام هذه الإمكانية، إذا قمت بوضع علامة على جميع الحسابات في مؤسستك باستخدام مالك، مثل قناة Slack، فيمكنك الآن الاستجابة لتنبيه GuardDuty من خلال البحث عن “المالك” باستخدام aws organizations list-tags-for-resource --resource-id 222222222222 ونقل التنبيه تلقائيًا إلى قناة Slack الخاصة بهم.
إمكانية الوصول إلى SCPs المطبقة على حسابك
الشكوى الشائعة من المطورين عند نشر SCPs هي أنهم لا يعرفون ما هي SCPs التي تؤثر عليهم. ترغب بعض فرق الأمان في الحفاظ على سرية SCPs الخاصة بها لأنها تخشى إمكانية تجاوز سياساتها، أو أن هذه المعرفة قد تكون مفيدة للمهاجم الذي قام باختراق الحساب. ومع ذلك، لا تزال العديد من المؤسسات ترغب في هذه الرؤية، لذا يوضح ما يلي كيفية تفويض هذه القدرة إلى جميع الحسابات في المؤسسة:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ViewEffectiveSCPs",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"organizations:DescribePolicy",
"organizations:ListParents",
"organizations:ListPoliciesForTarget"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:PrincipalOrgID": "o-xxxxxxxxx"
},
"StringLikeIfExists": {
"organizations:PolicyType": "SERVICE_CONTROL_POLICY"
}
}
}
]
}
في هذا المثال، أضفت شرطًا يقيد المبادئ الأساسية التي يمكنها استدعاء هذا فقط لأولئك الموجودين داخل المؤسسة. هذا غير ضروري في الوقت الحالي حيث أنه يمكن منح هذه الامتيازات فقط لحسابات الأعضاء، ولكنه يجعلني غير مرتاح للحصول على Principal ل * بدون شرط، وهذا دليل مستقبلي على إمكانية التوسع في إمكانيات هذه الميزة.
يمكن كتابة برنامج نصي بسيط لطباعة SCPs المطبقة على الحساب باستخدام هذه الامتيازات:
#!/usr/bin/env python
import boto3
import json
session = boto3.Session()
sts = session.client("sts")
org = session.client("organizations")
# Get account id
target = sts.get_caller_identity()['Account']
printed_policies = []
# Iterate up the org structure from the account, to any OUs, to the root
while(True):
policies = org.list_policies_for_target(TargetId=target, Filter='SERVICE_CONTROL_POLICY').get('Policies', [])
for policy in policies:
policy_id = policy['Id']
if policy_id not in printed_policies:
printed_policies.append(policy_id)
contents = org.describe_policy(PolicyId=policy_id)
print(json.dumps(contents['Policy'], indent=4))
if target.startswith('r-'):
# We've reached the root, so exit
break
parents = org.list_parents(ChildId=target).get('Parents', [])
if len(parents) != 1:
# There should be only one parent.
raise Exception("Unexpected number of parents")
target = parents[0]['Id']
التحكم في SCP لوحدة تنظيمية
في الشركات الكبيرة التي لديها وحدات أعمال متعددة، قد تتواجد العديد من حسابات AWS في مؤسسة AWS واحدة، ولكن قد ترغب وحدات الأعمال المختلفة في التحكم في SCPs المطبقة على حسابات AWS الخاصة بها. أصبح من الممكن الآن تحقيق ذلك دون الحاجة إلى الوصول إلى حساب إدارة المؤسسة عبر دور IAM. البيان التالي، والذي يمكن إرفاقه بسياسة التفويض أعلاه، يمنح الحساب القدرة على تعديل SCP محدد:
{
"Sid": "ModifySingleSCP",
"Effect": "Allow",
"Principal": {
"AWS": "123456789012"
},
"Action": [
"organizations:UpdatePolicy"
],
"Resource": "arn:aws:organizations::111111111111:policy/o-exampleorgid/service_control_policy/p-examplepolicyid111",
}
انتبه إلى أنه إذا تم تطبيق SCP هذا على الوحدة التنظيمية التي يوجد بها هذا الحساب المفوض، فيمكن للحساب المفوض قفل نفسه. حساب إدارة المؤسسة، الذي كان الحساب الوحيد الذي يمكنه تعديل SCPs، لا يمكن أن يقفل نفسه أبدًا لأن SCPs لا تنطبق عليه.
يمنح نموذج البيان هذا الوصول إلى سياسة واحدة فقط. يعد منح الوصول إلى كافة السياسات المرتبطة بالوحدة التنظيمية بطريقة عامة أكثر صعوبة مما قد يبدو. الشروط المتوفرة هي محدودة، organizations:UpdatePolicy الامتياز بشكل غريب لا يدعم شروط العلامة، وعلى عكس aws:PrincipalTag المفتاح، لا يوجد مفتاح مرتبط بالمدير لتحديد علامات الحساب الموجود فيه. لهذه الأسباب، لا يمكن استخدام استراتيجيات التحكم في الوصول المستندة إلى السمات (ABAC) النموذجية لـ AWS. قد تكون استراتيجية تسمية الموارد حيث يتم استخدام بادئات التسمية للسياسات والوحدات التنظيمية كافية لبعض الاحتياجات. ومع ذلك، مع استمرار AWS في تطوير المسؤول المفوض لمؤسسات AWS، قد يتم التخلص من بعض هذه القيود.
نتطلع
من المرجح أن تشجع الإمكانيات التي يسمح بها المسؤول المفوض لمؤسسات AWS – تفويض التحكم في SCPs وأنواع السياسات الأخرى إلى أجزاء مختلفة من مؤسسة AWS – المزيد من فرق الأمان على استخدام SCPs، وزيادة المرونة، والسماح ببعض حالات الاستخدام التي كانت تتطلب سابقًا تولي دور IAM لحساب إدارة المؤسسة. ومع ذلك، فإن هذا الاستخدام المتزايد يمكن أن يؤدي إلى المزيد من الانحرافات وزيادة احتمالية وجود فجوات في الحماية.
قد تطبق الفرق المختلفة شروط استثناء مختلفة على السياسات مما يجعل من الصعب المقارنة وضمان تكافؤ الحماية عبر المؤسسة. كما أن تطبيق استراتيجية قائمة الرفض التي تستخدمها الشركات الصغيرة والمتوسطة أكثر صعوبة في التطبيق بشكل فعال من استراتيجية القائمة المسموح بها الصعبة بالفعل والمستخدمة بشكل شائع في سياسات IAM. يمكن أن تحدث ثغرات في الحماية في إستراتيجيات قائمة الحرمان عندما تضيف AWS امتيازات جديدة، أو يمكن أن تنشأ ببساطة بسبب صعوبة التحديد الفعال لجميع الامتيازات التي قد تسبب مشاكل والتي ينبغي رفضها.
كما هو الحال مع العديد من الميزات الجديدة، هناك مخاطر وفوائد. أعتقد أن هذه الوظيفة ستكون مفيدة للغاية للشركات الكبرى لتوزيع الوصول إلى أنواع سياسات المؤسسة المختلفة، ولتجنب الوصول إلى دور IAM في حساب إدارة المؤسسة.
أنا دائمًا مهتم بمعرفة الاستراتيجيات التي تستخدمها الشركات لإدارة مؤسساتها، لذا لا تتردد في التواصل معنا تغريد إذا كانت لديك حالات استخدام مثيرة للاهتمام مع هذه الميزة الجديدة!
