الدرس 6 من 24

أمان IAM والهوية

أخطاء تكوين IAM الخطيرة

4 دقيقة للقراءة

أخطاء تكوين IAM وراء معظم خروقات السحابة. فهم الأخطاء الشائعة يساعدك في تجنبها والتعرف عليها أثناء تقييمات الأمان.

الأنماط الأكثر خطورة

1. السياسات المتساهلة بشكل مفرط ("المدير للجميع")

أكثر أخطاء التكوين شيوعاً وخطورة:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "*",
    "Resource": "*"
  }]
}

لماذا هي خطيرة:

  • أي بيانات اعتماد مخترقة = وصول كامل للحساب
  • تنتهك مبدأ أقل صلاحيات
  • شائعة في بيئات التطوير التي تصل للإنتاج

كيفية البحث:

# AWS CLI - البحث عن سياسات بإجراءات *
aws iam list-policies --scope Local --query 'Policies[*].Arn' | \
xargs -I {} aws iam get-policy-version --policy-arn {} --version-id v1 | \
grep -l '"Action": "\*"'

2. سياسات الثقة العامة

أدوار IAM التي يمكن لأي شخص تولیها:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": "*",
    "Action": "sts:AssumeRole"
  }]
}

التأثير: أي حساب AWS في العالم يمكنه تولي هذا الدور.

النهج الصحيح:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::123456789012:root"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringEquals": {
        "sts:ExternalId": "unique-external-id"
      }
    }
  }]
}

3. مفاتيح الوصول طويلة العمر

بيانات الاعتماد الثابتة التي لا تتدور:

# مفاتيح الوصول الأقدم من 90 يوماً
aws iam list-access-keys --user-name developer
# المخرجات تظهر تاريخ إنشاء من 2023...

المخاطر:

  • تسريب المفاتيح في مستودعات الكود
  • تخزين المفاتيح على أجهزة محمولة مخترقة
  • لا انتهاء صلاحية = نافذة هجوم غير محدودة

الحل: استخدام أدوار IAM وبيانات الاعتماد المؤقتة:

# بدلاً من بيانات الاعتماد المشفرة
import boto3

# استخدم instance profile (لا بيانات اعتماد في الكود)
session = boto3.Session()
s3 = session.client('s3')

# أو تولي دور
sts = boto3.client('sts')
credentials = sts.assume_role(
    RoleArn='arn:aws:iam::123456789012:role/MyRole',
    RoleSessionName='MySession'
)

4. متطلبات MFA المفقودة

السماح بعمليات حساسة بدون MFA:

{
  "Effect": "Allow",
  "Action": ["iam:*", "s3:*"],
  "Resource": "*"
}

يجب أن تكون:

{
  "Effect": "Allow",
  "Action": ["iam:*", "s3:*"],
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:MultiFactorAuthPresent": "true"
    }
  }
}

5. مشكلة النائب المرتبك

الوصول عبر الحسابات بدون External ID:

سياسة ثقة ضعيفة:

{
  "Principal": {
    "AWS": "arn:aws:iam::111111111111:root"
  },
  "Action": "sts:AssumeRole"
}

سيناريو الهجوم:

  1. تمنح وصولاً لخدمة طرف ثالث (الحساب A)
  2. المهاجم يستخدم نفس الخدمة أيضاً
  3. المهاجم يخدع الخدمة لتولي دورك
  4. المهاجم يحصل على وصول لحسابك

الوقاية:

{
  "Principal": {
    "AWS": "arn:aws:iam::111111111111:root"
  },
  "Action": "sts:AssumeRole",
  "Condition": {
    "StringEquals": {
      "sts:ExternalId": "your-unique-id-here"
    }
  }
}

أخطاء التكوين الخاصة بـ Azure

صلاحيات الدور المخصص المفرطة

{
  "Name": "CustomAdmin",
  "Actions": [
    "*"
  ],
  "AssignableScopes": [
    "/subscriptions/subscription-id"
  ]
}

الوصول المشروط المفقود

لا متطلبات MFA للأدوار المميزة:

  • Global Administrator يصل من أي موقع
  • لا كشف عن السفر المستحيل
  • لا متطلبات امتثال الجهاز

أسرار Service Principal

أسرار طويلة العمر بدلاً من مصادقة الشهادة:

# Service principal بكلمة مرور (محفوف بالمخاطر)
az ad sp create-for-rbac --name "MyApp" --password "WeakPassword123"

# أفضل: استخدم مصادقة الشهادة
az ad sp create-for-rbac --name "MyApp" --cert @cert.pem

أخطاء التكوين الخاصة بـ GCP

الأدوار البدائية في الإنتاج

استخدام Owner/Editor بدلاً من الأدوار المحددة مسبقاً:

# سيء: دور بدائي بصلاحيات مفرطة
gcloud projects add-iam-policy-binding my-project \
    --member="user:developer@example.com" \
    --role="roles/editor"

# جيد: دور محدد مسبقاً محدد
gcloud projects add-iam-policy-binding my-project \
    --member="user:developer@example.com" \
    --role="roles/cloudsql.viewer"

تصدير مفتاح Service Account

تنزيل مفاتيح service account يخلق بيانات اعتماد طويلة العمر:

# يخلق مفتاحاً قابلاً للتنزيل (تجنب هذا)
gcloud iam service-accounts keys create key.json \
    --iam-account=sa@project.iam.gserviceaccount.com

نهج أفضل: Workload Identity لـ GKE، service accounts مرفقة للحوسبة.

قائمة فحص الكشف

خطأ التكوين طريقة الكشف
سياسات wildcard أدوات تحليل السياسات (Prowler, ScoutSuite)
principals عامة مراجعة سياسة الثقة
مفاتيح وصول قديمة تقرير بيانات اعتماد IAM
لا MFA تقرير بيانات الاعتماد، تدقيق Console
صلاحيات غير مستخدمة IAM Access Analyzer (AWS)
أدوار ذات صلاحيات مفرطة تحليل حدود الصلاحيات

التالي، سنستكشف أفضل ممارسات إدارة بيانات الاعتماد لمنع هذه المشاكل. :::

اختبار

الوحدة 2: أمان IAM والهوية

خذ الاختبار