IAM: مين يقدر يسوي وش في حسابك
كيف تدير الهويات والصلاحيات في حسابك بالمستخدمين والمجموعات والسياسات والأدوار، وتوقف استخدام حساب الجذر، وتطبّق مبدأ أقل صلاحية.
- الفكرة الأساسية
- تعريف
- متى يُستخدم
- تنبيه
في هذا المقال
في الجزء الأول عرفنا إن AWS تحمي السحابة نفسها، وإنك أنت المسؤول عن اللي داخلها، وأولها: مين يقدر يوصل لحسابك، ووش يقدر يسوي فيه. هذا بالضبط شغل IAM (اختصار Identity and Access Management).
IAM خدمة عالمية ومجانية، وما تحتاج تختار لها منطقة. وكل خدمة ثانية في AWS تعتمد عليها، عشان كذا نبدأ فيها قبل ما نشغّل أي سيرفر.
في نهاية هذا الجزء بيكون عندك مستخدم يومي محمي، وتوقف استخدام حساب الجذر.
سؤالين لكل طلب
أي طلب يوصل AWS، سواء ضغطة زر في لوحة التحكم أو أمر في الطرفية، لازم يجاوب على سؤالين:
- مين أنت؟ هذا التحقق من الهوية (Authentication).
- هل مسموح لك تسوي هذا الشي؟ هذا التحقق من الصلاحية (Authorization).
والقاعدة الأساسية: كل شي ممنوع افتراضياً. أي مستخدم جديد ما يقدر يسوي شي، إلى أن تعطيه صلاحية صريحة.
حساب الجذر (Root)
حساب الجذر هو الهوية اللي سجّلت فيها بإيميلك أول ما فتحت الحساب. عنده كل الصلاحيات، وما تقدر تقيّده بسياسات IAM، ولو انسرق يقدر صاحبه يسوي أي شي: يحذف كل مواردك، أو يشغّل سيرفرات على حسابك.
بعض المهام ما يقدر عليها غيره، مثل إغلاق الحساب أو تغيير إيميله. وهذا هو تقريباً الاستخدام الوحيد له.
مكوّنات IAM الأربعة
| المكوّن | وش هو | مثال |
|---|---|---|
| المستخدم (User) | هوية دائمة لشخص، بكلمة مرور أو مفاتيح وصول | نورة، مطورة في فريقك |
| المجموعة (Group) | مجموعة مستخدمين يتشاركون نفس الصلاحيات | مجموعة المطورين |
| السياسة (Policy) | ملف JSON يحدد المسموح والممنوع | قراءة الملفات من S3 |
| الدور (Role) | هوية مؤقتة بدون كلمة مرور، يستلمها من يحتاجها وقت الحاجة | سيرفر يقرأ من S3 |
الطريقة الصحيحة: لا تربط الصلاحيات بكل مستخدم على حدة. حط المستخدمين في مجموعات، واربط السياسات بالمجموعات. فلما ينضم موظف جديد تضيفه للمجموعة وخلاص، ولما يترك العمل تشيله. ولاحظ إن المستخدم يقدر يكون في أكثر من مجموعة، بس المجموعة ما تقدر تحتوي مجموعة ثانية.
كيف تقرأ سياسة IAM
السياسة ملف JSON. هذي سياسة تسمح بقراءة الملفات من حاوية S3 وحدة فقط:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ReadBlogAssets",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::my-blog-assets",
"arn:aws:s3:::my-blog-assets/*"
]
}
]
}
Version: إصدار لغة السياسات. اكتبها دائماً2012-10-17، وهذا مو تاريخ سياستك.Statement: قائمة القواعد، وكل قاعدة تجاوب على: مسموح أو ممنوع، وش الفعل، وعلى أي مورد.Sid: اسم اختياري للقاعدة يوضّح الغرض منها.Effect: ياAllowياDeny.Action: الأفعال، بصيغةالخدمة:الفعل. وتقدر تستخدم*مثلs3:Get*، بس بحذر.Resource: الموارد المقصودة، وتُكتب بصيغة ARN وهو المعرّف الفريد لأي مورد في AWS.Condition: شرط اختياري، مثل السماح فقط إذا كان المستخدم داخل بـ MFA.
لاحظ إن فيه موردين: الأول للحاوية نفسها (عشان ListBucket)، والثاني لكل الملفات داخلها (عشان GetObject). كثير من أخطاء "Access Denied" سببها نسيان واحد منهم.
أنواع السياسات
- سياسات AWS الجاهزة (AWS managed): مثل
ReadOnlyAccessوAdministratorAccess. سهلة للبداية، بس غالباً أوسع مما تحتاج. - سياساتك أنت (Customer managed): تكتبها بنفسك وتعيد استخدامها، وهي الأفضل لتطبيق أقل صلاحية.
- السياسات المضمّنة (Inline): مربوطة بهوية وحدة وتنحذف معها. استخدمها في حالات خاصة فقط.
كيف تتقرر الصلاحية؟
AWS تجمع كل السياسات اللي تنطبق على الطلب، وتمشي بهذا الترتيب:
- فيه منع صريح (
Deny) في أي سياسة؟ الطلب مرفوض، حتى لو فيه سماح في مكان ثاني. - فيه سماح صريح (
Allow)؟ الطلب مقبول. - ما فيه لا هذا ولا هذا؟ مرفوض، لأن كل شي ممنوع افتراضياً.
المنع دايم يفوز. وهذي نقطة تفيدك كثير لما تحاول تفهم ليش طلب مرفوض.
مبدأ أقل صلاحية
أعطِ كل هوية أقل صلاحيات تكفيها لتسوي شغلها، لا أكثر. لو انسرقت هويتها أو أخطأت، الضرر يبقى محدود.
عملياً: ابدأ بصلاحيات ضيقة ووسّعها عند الحاجة، مو العكس. ولا تعطي AdministratorAccess إلا لمن يحتاجها فعلاً. وبنشوف تحت أدوات تساعدك تعرف وش الصلاحيات اللي ما تُستخدم.
عملي: أنشئ مستخدمك اليومي
الحين نطبّق. بنحمي الجذر، وننشئ مستخدم إداري تستخدمه بدل الجذر.
- فعّل MFA على الجذر. سجّل دخولك بالجذر، افتح قائمة حسابك أعلى لوحة التحكم، ثم Security credentials، ثم Assign MFA device. تطبيق مصادقة على جوالك يكفي، ومفاتيح الأمان (Passkeys) أقوى.
- أنشئ مجموعة. افتح خدمة IAM، ثم User groups ثم Create group. سمّها
Admins، واربط بها السياسةAdministratorAccess. - أنشئ مستخدم. من Users اضغط Create user، وفعّل Provide user access to the AWS Management Console، واختر كلمة مرور قوية، ثم أضفه لمجموعة
Admins. - سجّل خروج من الجذر. وادخل بالمستخدم الجديد من رابط الدخول الخاص بحسابك، وتلقاه في صفحة IAM الرئيسية، وشكله
https://رقم-حسابك.signin.aws.amazon.com/console. - فعّل MFA على المستخدم الجديد. نفس الخطوة الأولى، بس من حسابه.
ونفس الخطوات 2 و3 تقدر تسويها بسطر الأوامر، وهذا يوضّح إن كل شي في لوحة التحكم مجرد طلبات لنفس الخدمة:
# إنشاء المجموعة وربطها بالسياسة الجاهزة
aws iam create-group --group-name Admins
aws iam attach-group-policy --group-name Admins \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess
# إنشاء المستخدم وإضافته للمجموعة
aws iam create-user --user-name noura
aws iam add-user-to-group --group-name Admins --user-name noura
# التأكد من النتيجة
aws iam list-groups-for-user --user-name noura
وعشان تقوّي كلمات المرور في حسابك، حدد سياسة كلمات المرور من IAM ثم Account settings: الطول الأدنى، وأنواع الأحرف، ومدة الصلاحية، ومنع إعادة استخدام القديمة.
مفاتيح الوصول: للأوامر والكود
لوحة التحكم تدخلها بكلمة مرور. أما سطر الأوامر والكود فيستخدمون مفاتيح وصول (Access Keys)، وهي جزئين: معرّف المفتاح (مثل اسم المستخدم)، والمفتاح السري (مثل كلمة المرور).
تنشئها من صفحة المستخدم في IAM، تبويب Security credentials. والمفتاح السري يظهر لك مرة وحدة بس. بعدها تربطها بسطر الأوامر:
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: eu-central-1
Default output format [None]: json
(هذي قيم توضيحية من توثيق AWS، مو مفاتيح حقيقية.) وتتأكد إنها شغالة بالأمر اللي جربناه في الجزء الأول:
aws sts get-caller-identity
الأدوار: صلاحيات بدون مفاتيح
تخيل تطبيق على سيرفر EC2 يحتاج يقرأ من S3. الحل الغلط: تحط مفاتيح وصول داخل السيرفر. لو انكشف السيرفر، انكشفت معه المفاتيح.
الحل الصحيح هو الدور (Role): تعطي السيرفر دوراً، وAWS تزوّده تلقائياً بمفاتيح مؤقتة تتجدد لحالها، بدون ما تخزّن أنت شي.
للدور جزئين: سياسة صلاحيات تحدد وش يقدر يسوي، وسياسة ثقة تحدد مين يقدر يستلم الدور. هذي سياسة ثقة تسمح لسيرفرات EC2 باستلامه:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "Service": "ec2.amazonaws.com" },
"Action": "sts:AssumeRole"
}
]
}
لاحظ الحقل الجديد Principal: هو اللي يحدد مين المقصود. ما يظهر في السياسات المربوطة بمستخدم أو مجموعة، لأن الهوية هناك معروفة. وبنستخدم الأدوار فعلياً في الجزء الجاي مع EC2. والقاعدة بسيطة: لأي خدمة أو تطبيق داخل AWS، استخدم دور، مو مفاتيح.
راجع صلاحياتك
الصلاحيات تتراكم مع الوقت، فراجعها كل فترة. IAM يعطيك أدوات لهذا:
- تقرير بيانات الاعتماد (Credential report): ملف على مستوى الحساب، فيه كل المستخدمين وحالة كلمات مرورهم ومفاتيحهم وMFA عندهم. يكشف لك مثلاً مستخدم بدون MFA أو مفتاح قديم.
- آخر وصول (Last accessed): تبويب في صفحة المستخدم أو الدور، يوريك الخدمات اللي عنده صلاحية عليها ومتى استخدمها آخر مرة. الخدمة اللي ما استخدمها من شهور، شيل صلاحيتها.
- IAM Access Analyzer: ينبّهك على الموارد المتاحة لجهات خارج حسابك، وعلى الصلاحيات غير المستخدمة.
الخلاصة
- IAM خدمة عالمية ومجانية، وتجاوب على: مين أنت؟ وهل مسموح لك؟ وكل شي ممنوع افتراضياً.
- احمِ حساب الجذر بـ MFA ولا تستخدمه يومياً.
- حط المستخدمين في مجموعات، واربط السياسات بالمجموعات.
- المنع الصريح يفوز دايم على السماح.
- طبّق أقل صلاحية: ابدأ ضيق ووسّع عند الحاجة.
- مفاتيح الوصول سرية، وللخدمات استخدم الأدوار بدلها.
اختبر نفسك
قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.
السؤال 1 من 5
تطبيق على سيرفر EC2 يقرأ تقارير من حاوية S3، ومطور حفظ مفاتيح وصول في ملف إعدادات على السيرفر. يبي فريق الأمن يتخلص من المفاتيح طويلة الأمد، بدون ما يصير على المطورين شغل مستمر. أي حل يحقق هذا؟
اعرض الجواب
الجواب الصحيح: B
الدور يعطي التطبيق بيانات دخول مؤقتة تتجدد لحالها، فما فيه شي تحفظه أو تدوره.
- A: نفس المفاتيح طويلة الأمد لسا على السيرفر.
- C: المفاتيح باقية، وصار عندك سكربت تصونه.
- D: التقارير بتصير مفتوحة لأي أحد على الإنترنت.
للمراجعة: الأدوار: صلاحيات بدون مفاتيح في هذا الجزء، وIAM roles for applications on EC2 في وثائق AWS.
السؤال 2 من 5
مجموعة Developers عندها سياسة تسمح بـ s3:* على كل الحاويات. ومجموعة Compliance عندها سياسة تمنع s3:DeleteObject على حاوية finance-records. وريم في المجموعتين. وش يصير لما تحاول ريم تحذف كائن من finance-records؟
اعرض الجواب
الجواب الصحيح: D
AWS تجمع كل السياسات اللي تنطبق. ولو فيها منع صريح للطلب، ينرفض الطلب.
- A: اتساع السماح ما يفرق قدام المنع.
- B: سياسات المجموعات تقبل
Denyمثل أي سياسة هوية. - C: ترتيب السياسات ما يأثر على النتيجة.
للمراجعة: كيف تتقرر الصلاحية؟ في هذا الجزء، وPolicy evaluation logic في وثائق AWS.
السؤال 3 من 5
مستخدم عنده هذي السياسة يقدر ينزل s3://reports/q1.pdf باسمه، بس الأمر aws s3 ls s3://reports يرجع AccessDenied:
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": "arn:aws:s3:::reports/*"
}
وش لازم يتغير؟
اعرض الجواب
الجواب الصحيح: A
s3:ListBucket ينطبق على الحاوية نفسها، وs3:GetObject ينطبق على الكائنات اللي فيها. والسياسة تذكر الكائنات فقط، فالعرض ما له شي ينطبق عليه.
- B: هذا يسمح بالكتابة، وما له علاقة بالعرض.
- C: هذا الإعداد يخص الوصول العام، مو صلاحيات مستخدم مسجل دخوله.
- D: المجموعة بيكون عندها نفس المورد الغلط.
للمراجعة: كيف تقرأ سياسة IAM في هذا الجزء، وIdentity-based policy examples for S3 في وثائق AWS.
السؤال 4 من 5
تدقيق كشف إن حساب الجذر في شركة عنده مفاتيح وصول وما عليه تحقق متعدد العوامل. أي إجراءين يقللون الخطر على حساب الجذر؟ (اختر اثنين.)
اعرض الجواب
الجواب الصحيح: A + C
AWS توصي إن حساب الجذر ما يكون له مفاتيح وصول، وإن دخوله يكون بـ MFA.
- B: سياسات IAM في الحساب ما تقدر تحد من حساب الجذر.
- D: كلمة مرور الجذر ما تنشارك بدون حاجة قصوى، وكل شخص يشتغل يومياً بهويته.
- E: حساب الجذر يدخل بإيميل الحساب، فما فيه اسم مستخدم تغيره.
للمراجعة: حساب الجذر في هذا الجزء، وRoot user best practices في وثائق AWS.
السؤال 5 من 5
دور يستخدمه تطبيق تقارير عنده صلاحيات على عشر خدمات AWS. فريق الأمن يشك إنه يستخدم ثلاث فقط، ويبي يشيل الباقي بناءً على دليل، وبأقل جهد. وش يستخدم؟
اعرض الجواب
الجواب الصحيح: C
Last Accessed يبين كل خدمة مسموحة للدور ومتى حاول يستخدمها آخر مرة، وهذا الدليل المطلوب بالضبط.
- A: يعرض المستخدمين وحالة كلمات مرورهم ومفاتيحهم وMFA، مو الخدمات اللي يستخدمها دور.
- B: جهد كبير، وممكن يفوت استدعاءات تسويها المكتبات.
- D: يخلي الأعطال في الإنتاج هي الاختبار.
للمراجعة: راجع صلاحياتك في هذا الجزء، وLast accessed information في وثائق AWS.
في الجزء الثالث نشغّل أول سيرفر حقيقي على EC2، ونستخدم فيه دور IAM بدل المفاتيح. وإذا تبي تسبق، عندنا شرح عملي: كيف تنشئ سيرفر على AWS.