الجزء 26 من سلسلة تعلّم AWS من الصفر

الهوية المتقدمة: Organizations وIdentity Center

إدارة عدة حسابات بـ Organizations وSCP، والشروط في سياسات IAM، والأدوار مقابل سياسات الموارد، وحدود الصلاحيات وكيف تقرر AWS، والدخول الموحد بـ Identity Center، مع تجربة عملية تحاكي فيها السياسات.

في هذا المقال
  1. AWS Organizations
  2. الشروط في سياسات IAM
  3. دور أو سياسة مورد؟
  4. حدود الصلاحيات (Permissions Boundaries)
  5. IAM Identity Center: دخول واحد
  6. AWS Control Tower
  7. عملي: اختبر السياسات بدون ما تلمس شي
  8. الخلاصة
  9. اختبر نفسك

في الجزء الثاني كان عندنا حساب واحد وكم مستخدم. الحين تخيل شركة فيها خمسين حساب وخمسمية موظف: إنشاء مستخدم في كل حساب لكل شخص بيكون كابوس، وغلطة وحدة ممكن توصل لكل شي.

هذا الجزء يغطي أدوات هذا الحجم، ويكمل IAM باللي تركناه في البداية.

AWS Organizations

Organizations يجمع عدة حسابات تحت حساب إدارة واحد، مرتبة في وحدات تنظيمية (OUs).

الجذر وحدة الأمان وحدة الإنتاج وحدة التطوير السجلات التدقيق المتجر API فريق أ فريق ب
الحسابات تقعد في وحدات تنظيمية تحت جذر واحد، والسياسة المربوطة بوحدة تنطبق على كل الحسابات تحتها.

ليه حسابات كثيرة، مو حساب واحد كبير؟

  • العزل: غلطة أو اختراق في حساب التطوير ما توصل للإنتاج.
  • تكاليف واضحة: كل حساب يبين فاتورة فريقه.
  • الحدود: كل حساب له حصص خدماته.

ووش تكسب من Organizations؟

  • فاتورة موحدة: فاتورة وحدة، والاستخدام المجمع يوصل لخصومات الكمية أسرع. وSavings Plans وReserved Instances ممكن تتشارك بين الحسابات.
  • إدارة مركزية: إنشاء حسابات عبر API، وCloudTrail Trail واحد للكل.
  • السياسات: قواعد تنطبق على مجموعات كاملة من الحسابات.

سياسات المنظمة

السياسة وش تسوي
SCP تحدد أقصى ما يقدر يسويه المستخدمين والأدوار في الحساب
RCP تحدد أقصى ما ينعمل على موارد الحساب
Declarative Policies تثبت إعدادات أساسية لخدمة عبر الحسابات
Tag Policies توحد الوسوم، مثل فرض كتابة معينة لـ CostCenter

Service Control Policies (SCP)

النقطة الأهم: SCP ما تعطي أي شي. تحدد سقف بس، وكل مستخدم لسا يحتاج صلاحية IAM. هي سقف على المسموح:

  • لما تنربط بـ OU تنطبق على كل اللي تحتها، ولازم كل مستوى يسمح بالإجراء.
  • ما تأثر على حساب الإدارة، فلا تشغّل شغلك فيه.
  • تنطبق على الكل في الحساب العضو، ومعهم Root حق الحساب.

مثلاً هذي الـ SCP تمنع الشغل خارج منطقتين، إلا الخدمات العالمية:

JSON
{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "OnlyTwoRegions",
    "Effect": "Deny",
    "NotAction": ["iam:*", "organizations:*", "route53:*", "cloudfront:*", "support:*"],
    "Resource": "*",
    "Condition": {
      "StringNotEquals": { "aws:RequestedRegion": ["me-central-1", "eu-west-1"] }
    }
  }]
}

الشروط في سياسات IAM

عنصر Condition في السياسة يضيق متى تنطبق الصلاحية. وهذي أشهرها:

الشرط الاستخدام
aws:SourceIp من شبكة المكتب فقط
aws:RequestedRegion في مناطق محددة فقط
aws:MultiFactorAuthPresent فقط لو سجل الدخول بـ MFA
aws:ResourceTag وaws:PrincipalTag لازم وسم المستخدم يطابق وسم المورد
aws:PrincipalOrgID من حسابات منظمتك فقط

والأخير هدية للحاويات المشتركة. بدل ما تعدد خمسين حساب في سياسة الحاوية، سطر واحد يسمح لمنظمتك كلها:

JSON
{
  "Effect": "Allow",
  "Principal": "*",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::shared-files/*",
  "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5" } }
}

غلطة S3 الكلاسيكية

إجراءات S3 تشتغل على مستويين، وكل واحد يحتاج ARN خاص فيه:

الإجراء ينطبق على ARN
s3:ListBucket الحاوية arn:aws:s3:::my-bucket
s3:GetObject الكائن arn:aws:s3:::my-bucket/*

حط الغلط ويجيك AccessDenied، مهما بدت السياسة صحيحة. وبنجرب هذا في التجربة العملية.

دور أو سياسة مورد؟

عشان تخلي مستخدم في حساب A يوصل لشي في حساب B، عندك طريقين:

تقمص دور سياسة مورد
كيف المستخدم يصير الدور في B المورد في B يسمح للمستخدم مباشرة
صلاحياته الأصلية يتركها طول ما هو في الدور يحتفظ فيها
يناسب الشغل بالكامل داخل الحساب الثاني القراءة من جدول في A والكتابة في حاوية في B بنفس الوقت
متاح في كل الخدمات اللي تدعمها فقط، مثل S3 وSNS وSQS وLambda

ووراء كل دور تفترضه خدمة AWS STS (Security Token Service). هي اللي تعطي الصلاحيات المؤقتة، وتنتهي لحالها. وبهذي الطريقة يشتغل الوصول بين الحسابات بدون مشاركة مفاتيح طويلة المدى: مستخدم أو خدمة تنادي AssumeRole، وSTS تفحص سياسة الثقة في الدور، وترجع مفاتيح تشتغل فترة محدودة.

حدود الصلاحيات (Permissions Boundaries)

تبي قادة الفرق ينشئون أدوار لخدماتهم، بدون ما يقدرون يعطون أحد أكثر مما لازم. Permissions Boundary يحدد الحد الأقصى لمستخدم أو دور معين، ومثل SCP ما يعطي شي.

والصلاحية الفعلية هي المسموح في سياسة الهوية والحد وSCP مع بعض. وهي طريقة ممتازة للتفويض بأمان.

كيف تقرر AWS؟

كل طلب يمر بهذا التفكير. وهذي نسخة مبسطة:

فيه منع صريح في أي مكان؟ SCP وRCP تسمح به؟ سياسة هوية أو مورد تسمح به؟ حد الصلاحيات يسمح به؟ مسموح مرفوض نعم لا لا لا
صورة مبسطة لقرار AWS: أي منع صريح ينهي الموضوع، وكل طبقة تنطبق لازم تسمح بالإجراء.

تذكر ثلاث قواعد: المنع الصريح يكسب دايماً، وأي شي غير مسموح ممنوع، وداخل الحساب الواحد، سياسة المورد تقدر تعطي الوصول لحالها في حالات كثيرة.

IAM Identity Center: دخول واحد

بدل مستخدم في كل حساب، IAM Identity Center يعطي كل موظف دخول واحد وبوابة فيها الحسابات والأدوار المتاحة له، وياخذ بيانات دخول مؤقتة بدون مفاتيح دائمة.

الجزء وش يسوي
مصدر الهوية دليله الخاص، أو Active Directory، أو مزود خارجي مثل Okta أو Microsoft Entra ID
Permission Sets مجموعة سياسات تصير دور في كل حساب تربطها فيه
الربط "مجموعة المطورين تاخذ Admin على حساب التطوير، وReadOnly على الإنتاج"
التطبيقات دخول موحد لتطبيقات SAML كمان

وللـ CLI، الأمر aws configure sso يسجل دخولك عبر المتصفح ويعطيك بيانات مؤقتة. وهذي الطريقة الموصى فيها للناس عشان يشتغلون مع AWS هالأيام، بدل مستخدمي IAM بمفاتيح طويلة الأمد.

الدخول من هوية خارجية (Federation)

Federation يعني أشخاص أو أنظمة يدخلون بهوية موجودة خارج AWS وياخذون صلاحيات مؤقتة، بدون إنشاء مستخدم IAM. واختيارك يعتمد على مين يدخل:

مين استخدم
موظفين على حسابات كثيرة Identity Center زي ما شرحنا، وهذي توصية AWS
حساب واحد، أو أنظمة مثل GitHub Actions Identity Provider في IAM عبر SAML 2.0 أو OIDC، مع دور يفترضونه
مستخدمي تطبيقك Identity Pools في Cognito

Active Directory على AWS

شركات كثيرة تحفظ مستخدميها في Microsoft Active Directory. وAWS Directory Service يربطه بـ AWS:

الخيار كيف يشتغل يناسب
Managed Microsoft AD AD حقيقي مُدار في AWS، ويقدر يثق في حقك تطبيقات تعتمد على AD وتشتغل على AWS
AD Connector وسيط يمرر الطلبات لـ AD حقك وما يخزن شي إبقاء المستخدمين في AD حقك
Simple AD دليل صغير مبني على Samba مقفل على العملاء الجدد منذ يوليو 2026

AWS Control Tower

تجهيز كل هذا بيدك ياخذ أسابيع. Control Tower يبني Landing Zone بأفضل الممارسات فوق Organizations، ومعها حسابات السجلات والتدقيق، ويضيف:

  • Account Factory: إنشاء حسابات جديدة بإعدادات جاهزة.
  • Controls: وقائية عبر SCP، وكشفية عبر Config، واستباقية تفحص الموارد قبل إنشائها.
  • لوحة: تبين الملتزم من غيره بنظرة وحدة.

لو تبدأ بيئة حسابات متعددة من الصفر، ابدأ من هنا.

عملي: اختبر السياسات بدون ما تلمس شي

محاكي السياسات يقيّم السياسة بدون ما ينشئ شي أو ينفذ الإجراء، وهذا ممتاز للتعلم. من CloudShell، اكتب سياسة تسمح بـ S3 وEC2، وحد يسمح بـ S3 فقط:

Bash
cat > identity.json <<'EOF'
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": ["s3:*", "ec2:*"],
    "Resource": "*"
  }]
}
EOF

cat > boundary.json <<'EOF'
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "s3:*",
    "Resource": "*"
  }]
}
EOF

اختبر ثلاث إجراءات بالسياسة لحالها:

Bash
aws iam simulate-custom-policy --policy-input-list file://identity.json \
  --action-names s3:GetObject ec2:RunInstances iam:CreateUser \
  --query "EvaluationResults[].[EvalActionName,EvalDecision]" --output table

S3 وEC2 يطلع لهم allowed، وIAM يطلع له implicitDeny لأن ما فيه شي يسمح به. الحين أضف الحد:

Bash
aws iam simulate-custom-policy --policy-input-list file://identity.json \
  --permissions-boundary-policy-input-list file://boundary.json \
  --action-names s3:GetObject ec2:RunInstances \
  --query "EvaluationResults[].[EvalActionName,EvalDecision]" --output table

EC2 صار implicitDeny، مع إن السياسة تسمح به. الحين شوف إن المنع يكسب دايماً، بإضافة منع صريح لحذف الحاويات:

Bash
cat > deny.json <<'EOF'
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Deny",
    "Action": "s3:DeleteBucket",
    "Resource": "*"
  }]
}
EOF

aws iam simulate-custom-policy \
  --policy-input-list file://identity.json file://deny.json \
  --action-names s3:GetObject s3:DeleteBucket \
  --query "EvaluationResults[].[EvalActionName,EvalDecision]" --output table

s3:GetObject يبقى allowed، وs3:DeleteBucket يطلع له explicitDeny، مع إن السياسة الأولى تسمح بـ s3:*. جرب بعدها شرط: الوصول من شبكة المكتب فقط، واختبر من عنوانين:

Bash
cat > office.json <<'EOF'
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "*",
    "Condition": { "IpAddress": { "aws:SourceIp": "203.0.113.0/24" } }
  }]
}
EOF

for ip in 203.0.113.10 198.51.100.7; do
  aws iam simulate-custom-policy --policy-input-list file://office.json \
    --action-names s3:GetObject \
    --context-entries "ContextKeyName=aws:SourceIp,ContextKeyValues=$ip,ContextKeyType=ip" \
    --query "EvaluationResults[0].EvalDecision" --output text
done

العنوان الأول allowed، والثاني implicitDeny. وأخيراً، غلطة S3 الكلاسيكية، صلاحية عرض مع ARN الكائن:

Bash
cat > list.json <<'EOF'
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": "arn:aws:s3:::shop/*"
  }]
}
EOF

aws iam simulate-custom-policy --policy-input-list file://list.json \
  --action-names s3:ListBucket --resource-arns arn:aws:s3:::shop \
  --query "EvaluationResults[0].EvalDecision" --output text

يطلع implicitDeny. السياسة تبدو صحيحة، بس الصلاحية تنطبق على الحاوية، مو على اللي فيها. غيّر المورد إلى arn:aws:s3:::shop وجرب مرة ثانية، وبيطلع allowed.

الخلاصة

  • Organizations يجمع الحسابات تحت فاتورة وحدة، وSCP تحدد سقف وما تعطي شي.
  • الشروط تضيق الصلاحيات بالشبكة والمنطقة وMFA والوسوم، وaws:PrincipalOrgID يفتح الوصول لمنظمتك فقط.
  • الدور يخليك تترك صلاحياتك الأصلية، وسياسة المورد تبقيها.
  • Permissions Boundary يفوض بأمان، والمنع الصريح يكسب دايماً.
  • Identity Center يعطي دخول واحد ببيانات مؤقتة، وControl Tower يبني كل هذا بأفضل الممارسات.

اختبر نفسك

قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.

السؤال 1 من 7

شركة تبي تتأكد إن ما أحد في حسابات التطوير يقدر يشغّل أي شي خارج Regionين، ولا حتى مدراء هذي الحسابات. وش يناسب؟

اعرض الجواب

الجواب الصحيح: C

الـ SCP تحدد سقف لكل مستخدم ودور في الحسابات اللي تحتها، بما فيهم المستخدم الجذر. وهي ما تعطي شي، فالناس لسا يحتاجون صلاحيات IAM خاصة فيهم.

  • A: مدراء الحساب يقدرون يغيرونها ببساطة.
  • B: هذا يحد مستخدم أو دور واحد في كل مرة، والمدير يقدر يشيله.
  • D: هذا يعلّم الموارد غير ملتزمة، وما يوقف شي.

للمراجعة: Service Control Policies (SCP) في هذا الجزء، وService control policies (SCPs) في وثائق AWS.

السؤال 2 من 7

شركة تبي قادة الفرق ينشئون أدوار لخدماتهم، بدون ما يقدرون يعطون أكثر من وصول S3 وDynamoDB. وش يناسب؟

اعرض الجواب

الجواب الصحيح: A

الـ Permissions Boundary يحدد الحد الأقصى لمستخدم أو دور وما يعطي شي بنفسه، فالدور ما يتجاوزه أبداً مهما كانت سياسته.

  • B: هذا يحد الحساب كامل، والشغل الثاني فيه ممكن يحتاج خدمات ثانية.
  • C: القاعدة المكتوبة ما توقف أحد.
  • D: هذي تعطي الناس وصول للحسابات، وما تحد الأدوار اللي ينشئونها.

للمراجعة: حدود الصلاحيات (Permissions Boundaries) في هذا الجزء، وPermissions boundaries for IAM entities في وثائق AWS.

السؤال 3 من 7

شركة عندها 50 حساب و500 موظف، وتحفظ مستخدميها في Microsoft Entra ID. وتبي دخول واحد، بدون مفاتيح طويلة المدى، ووصول مختلف لكل حساب. وش يناسب؟

اعرض الجواب

الجواب الصحيح: D

الموظف يدخل مرة وحدة ويشوف الحسابات والأدوار المتاحة له، بصلاحيات مؤقتة. والـ Permission Set يصير دور في كل حساب تربطه فيه.

  • A: هذا يعني آلاف المستخدمين والمفاتيح طويلة المدى اللي لازم تديرها.
  • B: هذا يضيّع مين سوى وش، ويشارك مفاتيح طويلة المدى.
  • C: هذا يبني Landing Zone وينشئ الحسابات، وما يعطي الناس دخولهم لحاله.

للمراجعة: IAM Identity Center: دخول واحد في هذا الجزء، وManage AWS accounts with permission sets في وثائق AWS.

السؤال 4 من 7

تطبيق في الحساب A لازم يقرأ من جدول DynamoDB في الحساب A ويكتب في حاوية S3 في الحساب B بنفس الوقت، بهوية وحدة. وش يناسب؟

اعرض الجواب

الجواب الصحيح: B

مع سياسة المورد يحتفظ التطبيق بصلاحياته، فيقدر يستخدم الجدول في A والحاوية في B مع بعض.

  • A: وهو في الدور يتخلى عن صلاحياته الأصلية، فيفقد الجدول في A.
  • C: الـ SCP ما تعطي شي.
  • D: الـ Boundary ما يعطي شي.

للمراجعة: دور أو سياسة مورد؟ في هذا الجزء، وCross account resource access in IAM في وثائق AWS.

السؤال 5 من 7

دور لازم يعرض الكائنات في حاوية اسمها reports ويقرأها. أي عبارتين لازم يكونون في سياسته؟ (اختر اثنين.)

اعرض الجواب

الجواب الصحيح: B + D

إجراءات S3 تشتغل على مستويين: العرض على الحاوية، والقراءة على الكائنات، فكل واحد يحتاج ARN خاص فيه.

  • A: العرض على الحاوية، فهذا الـ ARN يعطي AccessDenied.
  • C: القراءة على الكائنات، فهذا الـ ARN يعطي AccessDenied.
  • E: هذا يشتغل، بس يعطي أكثر بكثير من اللازم، وعلى كل الحاويات.

للمراجعة: غلطة S3 الكلاسيكية في هذا الجزء، وGrant read and write access to Amazon S3 bucket objects في وثائق AWS.

السؤال 6 من 7

مهمة ليلية في الحساب A لازم تشتغل بالكامل داخل الحساب B كم دقيقة. وفريق الأمان يمنع المفاتيح طويلة المدى. وش يناسب؟

اعرض الجواب

الجواب الصحيح: D

المهمة تنادي AssumeRole، وSTS تفحص سياسة الثقة في الدور وترجع صلاحيات مؤقتة، فما فيه مفاتيح طويلة المدى تحفظها.

  • A: هذي المفاتيح طويلة المدى اللي يمنعها الفريق.
  • B: الأدوار ما تنسخ بين الحسابات، والوصول لسا يحتاج سياسة ثقة.
  • C: الـ SCP ما تعطي شي.

للمراجعة: دور أو سياسة مورد؟ في هذا الجزء، وTemporary security credentials in IAM في وثائق AWS.

السؤال 7 من 7

مسار GitHub Actions ينشر على حساب AWS واحد، ومفاتيح الوصول محفوظة كأسرار في المستودع. والفريق يبي يوقف حفظ المفاتيح. وش يناسب؟

اعرض الجواب

الجواب الصحيح: B

المسار يثبت هويته بتوكن من GitHub، وياخذ صلاحيات مؤقتة عبر الدور، فما فيه مفاتيح تحفظها.

  • A: هذا يقصر عمر المفاتيح، ولسا محفوظة.
  • C: هذا لدخول الأشخاص، مو لأنظمة مثل مسار النشر.
  • D: هذا لمستخدمي تطبيقك، مو للوصول لحساب AWS.

للمراجعة: الدخول من هوية خارجية (Federation) في هذا الجزء، وIdentity providers and federation into AWS في وثائق AWS.

ضبطت مين يوصل لبياناتك. طيب لو وصل لها أحد بأي طريقة، أو هاجم موقعك من برا؟ في الجزء السابع والعشرين نغطي التشفير والأسرار والحماية من الهجمات.