AWS Certified Solutions Architect 03 - Securing Access

يُعدّ تأمين الوصول إلى الموارد السحابية أحد أهم الأولويات في أي بنية تحتية تعتمد على AWS. في هذه الوحدة، سنستعرض مبادئ الأمان الأساسية، ونشرح AWS Shared Responsibility Model، وركيزة الأمان في إطار Well-Architected، ومبادئ التصميم السبعة للأمان. سنتعمق في خدمة AWS Identity and Access Management (IAM) بأنواعها المختلفة: المستخدمين (Users)، المجموعات (Groups)، الأدوار (Roles)، والسياسات (Policies). وأخيراً، سنفهم بنية مستندات IAM بصيغة JSON، وكيف نطبق مبدأ Least Privilege لحماية بيئتنا. تماماً كما يحمي القلعة بأسوار خارجية وبحراس داخليين وبخزائن للأسرار، تحمي AWS مواردك بطبقات متعددة من الأمان.

1️⃣ Security principles

مبادئ الأمان في AWS تشكل الأساس الذي تبنى عليه جميع استراتيجيات الحماية في السحابة. هناك ثلاثة مبادئ رئيسية يجب مراعاتها عند تصميم بنية آمنة. أولاً: فهم AWS Shared Responsibility Model لتحديد من المسؤول عن أي جزء من الأمان. ثانياً: استخدام Security Pillar من إطار Well-Architected لتحديد مبادئ التصميم المناسبة. ثالثاً: تطبيق Principle of Least Privilege عند تأمين موارد AWS. هذه المبادئ الثلاثة مترابطة: بدون فهم تقسيم المسؤوليات، لا يمكنك تحديد أين يبدأ دورك وأين ينتهي دور AWS. تماماً كما يحتاج مالك المبنى لشريك يفهم من المسؤول عن السور الخارجي (مالك المبنى) ومن المسؤول عن الأبواب الداخلية (المستأجر)، يحتاج cloud architect لفهم توزيع المسؤوليات في السحابة.

شركة جديدة تنقل تطبيقها إلى AWS. قبل البدء، يجتمع cloud architect مع فريق الأمان ويضعون قائمة بمسؤوليات AWS (مراكز البيانات، الشبكة الفيزيائية، العتاد) ومسؤولياتهم (البيانات، التطبيقات، IAM، التشفير). هذه القائمة هي خريطة الطريق لتطبيقات الأمان في الأشهر التالية.

2️⃣ AWS shared responsibility model

AWS Shared Responsibility Model يوضح تقسيم مهام الأمان بين AWS والعميل. AWS مسؤولة عن أمان السحابة (Security OF the Cloud)، أي البنية التحتية الأساسية: مراكز البيانات، الشبكات، الأجهزة، الخوادم الفيزيائية، طبقة hypervisor. العميل مسؤول عن الأمان داخل السحابة (Security IN the Cloud)، أي: بيانات العملاء، التطبيقات، أنظمة التشغيل، إعدادات الشبكة والجدار الناري، التشفير، إدارة الهوية والوصول. هذا التقسيم يعني أن AWS تؤمن الأساس وأنت تبني عليه. تماماً كما يبني مالك المبنى السور الخارجي والأبواب الرئيسية، بينما المستأجر مسؤول عن أقفال شقته وتأمين ممتلكاته الخاصة.

شركة تستخدم EC2 لاستضافة تطبيقها. AWS مسؤولة عن أمان الخادم الفيزيائي ومرفق مركز البيانات. الشركة مسؤولة عن: تحديث نظام التشغيل على EC2، تكوين Security Groups، تشفير البيانات، إدارة IAM. لو حدث اختراق بسبب عدم تحديث OS، فالشركة هي المسؤولة، وليس AWS.

3️⃣ Security is a Well-Architected Framework pillar

الأمان هو أحد الركائز الست لإطار Well-Architected، إلى جانب Operational Excellence، Reliability، Performance Efficiency، Cost Optimization، وSustainability. يوفر الإطار أفضل الممارسات والنصائح التصميمية لمساعدتك في اتخاذ القرارات الصحيحة ومراجعة البنى التحتية الحالية. يمكنك استخدام AWS Well-Architected Tool، وهي خدمة ذاتية توفر الوصول عند الطلب إلى أحدث أفضل ممارسات AWS. تجيب الأداة على أسئلة محددة وتقيم بنيتك بناءً على الركائز الست، ثم تقدم خطة عمل للتحسين. تماماً كما يزور الطبيب المستشفى دورياً لتقييم أداء الأقسام، يستخدم cloud architect WA Tool لتقييم بنيته دورياً.

شركة استشارات تجري Well-Architected Review لعملائها كل ستة أشهر. لكل عميل، يحدد الفريق الأحمال في WA Tool ويجيب على 60 سؤالاً. الأداة تُولّد تقريراً بالمخاطر العالية والمتوسطة، ويقدم الفريق خطة عمل. هذه العملية المنهجية تحسّن بنية العميل بشكل مستمر.

4️⃣ Design principles for the security pillar

ركيزة الأمان في إطار Well-Architected تتضمن سبعة مبادئ تصميم رئيسية. Implement a strong identity foundation: تطبيق مبدأ Least Privilege وفصل المهام. Protect data in transit and at rest: تصنيف البيانات حسب الحساسية وتطبيق التشفير. Apply security at all layers: نهج defense in depth مع ضوابط متعددة على كل المستويات. Keep people away from data: تقليل الوصول اليدوي للبيانات. Maintain traceability: مراقبة وتنبيه كل التغييرات في الوقت الفعلي. Prepare for security events: التحضير للحوادث عبر سياسات incident response. Automate security best practices: أتمتة الأمان عبر Infrastructure as Code. هذه المبادئ السبعة مترابطة وتغطي دورة حياة الأمان الكاملة. تماماً كما يحمي المبنى الذكي بسبع طبقات (أساسات، جدران، أبواب، أقفال، كاميرات، إنذارات، حراسة)، تحمي AWS بنيتك بسبع طبقات.

شركة تكنولوجيا تطبق كل المبادئ السبعة. الهوية: IAM مع MFA إجباري. التشفير: KMS لكل البيانات. الطبقات: WAF + Security Groups + NACLs. إبعاد البشر: لا وصول مباشر لقواعد البيانات. التتبع: CloudTrail + CloudWatch. الأحداث: فريق incident response يجتمع شهرياً. الأتمتة: Security Hub يفحص البنية آلياً.

5️⃣ User permissions to access resources

جزء من تنفيذ أساس هوية قوي هو استخدام السياسات لمنح أو رفض الوصول إلى موارد AWS مثل حاويات Amazon S3 وجداول Amazon DynamoDB. في المثال: المستخدم John يمكنه قراءة وكتابة وحذف الكائنات في حاوية S3 الأولى، لكنه يستطيع فقط قراءة الكائنات في الحاوية الثانية، وهو ممنوع صراحةً من الوصول إلى جدول DynamoDB محدد. هذه الصلاحيات تُعرَّف عبر سياسات IAM بصيغة JSON. يجب أن تكون كل صلاحية مرتبطة بمورد محدد عبر ARN (Amazon Resource Name). تماماً كما يحصل موظف على بطاقة دخول تتيح له دخول بعض الأبواب وتمنعه من أخرى، يحصل IAM user على صلاحيات تتيح له الوصول لبعض الموارد وتمنعه من أخرى.

تطبيق e-commerce يحتاج ثلاث صلاحيات: موظفو التسويق (قراءة ملفات الوسائط فقط)، موظفو التطوير (قراءة/كتابة على حاوية التطوير)، مديرو النظام (صلاحيات كاملة). cloud architect ينشئ ثلاث سياسات IAM، كل واحدة تخدم مجموعة. كل موظف يرى فقط ما يحتاجه.

6️⃣ Principle of least privilege

مبدأ Least Privilege (الامتياز الأقل) هو أحد أهم ممارسات الأمان في AWS. يطلب منك: منح فقط الصلاحيات المطلوبة لأداء المهمة، البدء بمجموعة دنيا من الصلاحيات، منح صلاحيات إضافية حسب الحاجة، وإلغاء الصلاحيات غير الضرورية. هذا النهج يقلل من سطح الهجوم (attack surface) بشكل كبير. لو حصل مهاجم على بيانات اعتماد أحد المستخدمين، فإن الضرر يكون محدوداً بالصلاحيات الممنوحة له فقط. في المثال: John (مستخدم إداري) يحصل على صلاحيات كاملة لـ S3، بينما Mary (مستخدم تسويق) تحصل على قراءة فقط لحاوية واحدة وتمنع من حاوية أخرى. تماماً كما لا يحتاج موظف الاستقبال لمفتاح غرفة الخوادم، لا يحتاج المطور للوصول لموارد الإنتاج الحساسة.

شركة تكتشف أن أحد الموظفين فقد حاسوبه المحمول الذي يحتوي على مفاتيح AWS. لو كانت الشركة قد طبقت Least Privilege، فإن المفاتيح المسروقة تتيح الوصول فقط للموارد التي يحتاجها الموظف. لو كانت المفاتيح Admin، فالخسارة كارثية. Least Privilege يحد من تأثير أي اختراق.

7️⃣ Use encryption

بالإضافة إلى تحديد من لديه صلاحية الوصول إلى البيانات، يجب عليك حماية البيانات نفسها عبر Encryption (التشفير). هذا يتعلق بمبدأ تصميم Protect data in transit and at rest. Data in transit هي البيانات المنتقلة من مكان إلى آخر عبر الإنترنت أو شبكة خاصة. لحماية البيانات أثناء النقل، يمكنك استخدام TLS (Transport Layer Security) لتأمين البيانات أثناء انتقالها. TLS يضمن أن البيانات لا يمكن قراءتها حتى لو اعترضها مهاجم. في AWS، كل الخدمات تستخدم TLS افتراضياً. تماماً كما تضع رسالتك في ظرف مغلق بدلاً من بطاقة بريدية مكشوفة، يحمي TLS بياناتك من القراءة أثناء النقل.

مستخدم يرفع صورة جواز سفره إلى S3 عبر HTTPS. الصورة نفسها لا تحتاج للتشفير، لكن استخدام TLS يضمن أن أحداً لا يستطيع اعتراض الصورة وقراءتها. حتى لو اعترض المهاجم الحزم، سيرى بيانات مشفرة لا يستطيع فكها.

8️⃣ Protecting data at rest with client-side encryption

حماية Data at Rest (البيانات المخزنة) تعني استخدام التشفير لحماية البيانات المخزنة في أي مكان في الحل السحابي. Client-side Encryption يوفر حماية شاملة (end-to-end) للكائن من المصدر إلى التخزين. في هذا الأسلوب: يقوم العميل بتشفير البيانات قبل إرسالها إلى AWS، وعند استرجاعها يقوم العميل بفك التشفير. هذا يعني أن AWS لا ترى البيانات الأصلية أبداً. الميزة: أعلى مستوى من الحماية. العيب: العميل يتحمل مسؤولية إدارة المفاتيح. تماماً كما تشفر وثائقك السرية قبل إرسالها بالبريد، يضمن Client-side Encryption أن البيانات لا يمكن قراءتها حتى لو وصلت ليد غير مصرح بها.

موظف يخزن ملفات الشركة على قرص خارجي. يشفر القرص بـ BitLocker (client-side encryption). لو فُقد القرص أو سُرق، لا يستطيع أحد قراءة الملفات بدون كلمة المرور. البيانات مشفرة سواء في حالة التخزين أو النقل.

9️⃣ Protecting data at rest with server-side encryption

مع Server-side Encryption، يتم تشفير البيانات قبل تخزينها على الخادم. Amazon S3 يوفر server-side encryption افتراضياً، حيث تقوم الخدمة بتشفير بياناتك على مستوى الكائن عند كتابتها على الأقراص في مراكز بيانات AWS، وفك تشفيرها تلقائياً عند وصولك إليها. لا يحتاج المطور لأي إجراء يدوي. هذا الخيار أبسط من client-side لكن AWS تكون قادرة على رؤية البيانات الأصلية. تماماً كما يضع البنك أموالك في خزنة مقفلة (البنك يعرف ما بداخلها، لكن اللص لا يستطيع الوصول)، يضع S3 بياناتك في تخزين مشفر.

مستشفى يخزن سجلات المرضى في S3. S3 يشفر البيانات تلقائياً بـ SSE-S3. عندما يقرأ الطبيب سجل مريض، يفك S3 التشفير تلقائياً. الطبيب لا يحتاج للتعامل مع التشفير. المستشفى تستفيد من حماية التشفير دون أي تعقيد إضافي.

📖 قاموس مصطلحات المحور الأول

المصطلح (English)الترجمةالمفهوم
Shared Responsibility Modelنموذج المسؤولية المشتركةتقسيم مسؤوليات الأمان بين AWS (أمان السحابة) والعميل (الأمان داخل السحابة).
Security OF the Cloudأمان السحابةمسؤولية AWS عن البنية التحتية الفيزيائية ومراكز البيانات والشبكات.
Security IN the Cloudالأمان داخل السحابةمسؤولية العميل عن البيانات والتطبيقات وأنظمة التشغيل وIAM.
Least Privilegeالامتياز الأقلمنح الحد الأدنى من الصلاحيات اللازمة لأداء المهمة فقط.
Data in Transitالبيانات أثناء النقلالبيانات المنتقلة عبر الشبكة، تُحمى باستخدام TLS.
Data at Restالبيانات المخزنةالبيانات المخزنة على أقراص، تُحمى باستخدام التشفير.
Client-side Encryptionتشفير من جانب العميليشفر العميل البيانات قبل إرسالها، AWS لا ترى البيانات الأصلية.
Server-side Encryptionتشفير من جانب الخادمتشفر AWS البيانات تلقائياً عند التخزين، يفكها عند الطلب.

1️⃣ Authentication and authorization

Authentication (المصادقة) وAuthorization (التفويض) هما مفهومان أساسيان في أمن المعلومات. Authentication تجيب على السؤال: من يطلب الوصول إلى حساب AWS وموارده؟ من المهم تحديد هوية الطالب من خلال بيانات الاعتماد. الطالب يمكن أن يكون شخصاً أو تطبيقاً. Authorization تجيب على السؤال: بعد مصادقة الطالب، ما الذي يُسمح له بفعله؟ تحدد ما إذا كان سيتم السماح أو رفض الطلب. المصادقة تثبت الهوية، والتفويض يحدد الصلاحيات. تماماً كما تحتاج لبطاقة هوية لدخول البنك (مصادقة)، ثم الموظف يتحقق من رصيدك ليسمح لك بالسحب (تفويض).

موظف يحاول الدخول إلى تطبيق AWS الخاص بالشركة. يدخل اسم المستخدم وكلمة المرور (authentication). النظام يتحقق من كلمة المرور ويقبلها. بعد الدخول، يحاول حذف قاعدة بيانات. النظام يرفض لأن دوره (authorization) لا يتيح له الحذف. Authentication نجحت لكن Authorization رفضت.

2️⃣ AWS Identity and Access Management (IAM)

AWS Identity and Access Management (IAM) هي الخدمة التي تتحكم في وصول الأفراد والمجموعات إلى موارد AWS. تتيح لك IAM تكوين تحكم دقيق (fine-grained access control) في الوصول إلى موارد AWS. يمكنك استخدام IAM لاتباع أفضل ممارسات الأمان من خلال منح بيانات اعتماد أمان فريدة لكل مستخدم ومجموعة. IAM آمنة افتراضياً: المستخدمون لا يملكون صلاحية الوصول إلى موارد AWS حتى تُمنح لهم الصلاحيات صراحةً. IAM متكاملة مع معظم خدمات AWS، وتدعم federated identity (مثل Active Directory) وMFA (المصادقة متعددة العوامل). تماماً كما يدير الفندق بطاقات الدخول للموظفين، تدير IAM هويات الوصول لـ AWS.

شركة تدمج 200 موظف مع AWS عبر IAM Identity Center وActive Directory. الموظفون يستخدمون نفس بيانات اعتماد الشركة. عند دخولهم إلى AWS Console، يحصلون تلقائياً على الصلاحيات المناسبة لدورهم. لا حاجة لإدارة 200 حساب IAM منفصل.

3️⃣ IAM terminology

هناك مصطلحات مهمة خاصة بـ IAM. الـIAM resource: كائن مخزن في IAM (مستخدم، مجموعة، دور، سياسة، أو موفر هوية). الـIAM entity: كائن IAM تستخدمه AWS للمصادقة (المستخدمون والأدوار فقط). الـIAM identity: كائن IAM يمكن تفويضه في السياسات (مستخدم، مجموعة، أو دور). الـPrincipal: الشخص أو التطبيق الذي يسجل الدخول ويقدم طلبات إلى AWS. الـPrincipal يشمل root user وIAM users والأدوار المفترضة والمستخدمين الموحدين (federated users). تماماً كما يميز البنك بين العميل (Principal) وبطاقته (Identity) وحسابه (Resource) وصلاحياته (Policy)، تميز IAM بين هذه العناصر.

شركة تستخدم SAML federation مع Okta. الموظف Ahmed (Principal) يدخل إلى Okta (Identity Provider). يحصل على temporary credentials ويفترض دور IAM (IAM Identity). الدور يحدد الصلاحيات عبر سياسات (Resources). كل مصطلح يخدم غرضاً محدداً في هذه السلسلة.

4️⃣ Using IAM to control access to AWS resources

IAM يوفر ثلاث طرق رئيسية للتحكم في الوصول. IAM user (مستخدم IAM): شخص أو تطبيق يمكنه المصادقة باستخدام حساب AWS. يحصل على بيانات اعتماد دائمة. IAM group (مجموعة IAM): مجموعة من المستخدمين يُمنحون صلاحية موحدة. تسهل الإدارة. IAM role (دور IAM): هوية تُستخدم لمنح مجموعة مؤقتة من الصلاحيات. لا يملك بيانات اعتماد دائمة. IAM role يُفترض من قبل شخص أو خدمة عند الحاجة. تماماً كما يميز المسرح بين الممثل الدائم (مستخدم)، وفرقة المسرح (مجموعة)، وزائر يرتدي زياً خاصاً (دور)، تميز IAM بين هذه الأنواع الثلاثة.

شركة تريد تشغيل تطبيق على EC2 يحتاج للوصول إلى S3. لا تفضل الشركة إنشاء access keys للمثيل (غير آمنة). تنشئ IAM role بسياسة تسمح بقراءة S3. تربط الدور بـ EC2 instance عبر instance profile. التطبيق يحصل على الصلاحيات تلقائياً دون access keys.

5️⃣ IAM credentials for authentication

عند التفاعل مع AWS، يجب تقديم بيانات اعتماد. هناك نوعان رئيسيان حسب طريقة الوصول. Username and password: لـ AWS Management Console (واجهة الويب). AWS access key: مزيج من Access Key ID وSecret Access Key. يُستخدم لـ AWS CLI، AWS SDKs، واستدعاءات API المباشرة. لا يمكن استخدام اسم المستخدم وكلمة المرور للمصادقة البرمجية. access keys هي بيانات اعتماد طويلة الأجل، لذا يجب تدويرها بانتظام. تماماً كما تحتاج لبطاقة صراف للجهاز (access key) ولبطاقة هوية للإنترنت (username/password)، تختلف بيانات الاعتماد حسب طريقة الوصول.

مطور يعمل على سكريبت ينشر التطبيق تلقائياً. يستخدم AWS CLI مع access keys مخزنة في ~/.aws/credentials. السكريبت ينفذ أوامر مثل aws s3 cp. لا يحتاج لـ username/password في هذه الحالة. لتدوير المفاتيح، ينشئ مفتاحاً جديداً ويحذف القديم كل 90 يوماً.

6️⃣ Best practices to secure access

أفضل ممارسات تأمين الوصول إلى AWS تشمل: اتبع Least Privilege، فعّل MFA، اطلب من المستخدمين البشريين استخدام بيانات اعتماد مؤقتة (عبر SSO أو Identity Center)، قم بتدوير access keys للحالات التي تتطلب بيانات اعتماد طويلة الأجل، استخدم كلمات مرور قوية، احمِ بيانات الاعتماد المحلية، استخدم AWS Organizations، فعّل AWS CloudTrail لتتبع النشاط، واحمِ Root User. الأهم: لا تستخدم Root User للمهام اليومية. تماماً كما لا تستخدم مفتاح المنزل الرئيسي لفتحه يومياً (تحتفظ به للطوارئ)، يجب أن يكون Root User للطوارئ فقط.

شركة تطبق كل هذه الممارسات. Root User محمي بـ MFA hardware token ويستخدم فقط لإنشاء الحساب. جميع الموظفين يستخدمون IAM Identity Center مع SSO. Access keys لا تُستخدم للتطبيقات (تستخدم IAM roles بدلاً منها). النتيجة: سطح هجوم ضيق جداً.

7️⃣ Protecting the root user

Root User هو مالك حساب AWS وله صلاحية كاملة غير محدودة لجميع الموارد. لهذا، يجب حماية بيانات اعتماده بأقصى درجة. احمِ بيانات اعتماد Root User كما تحمي رقم بطاقتك الائتمانية. للمهام اليومية، استخدم مستخدماً إدارياً في AWS IAM Identity Center مع بيانات اعتماد مؤقتة. استخدم Root User فقط للمهام التي لا يمكن لأي مستخدم آخر القيام بها: تغيير خطة الحساب، إغلاق الحساب، استعادة الوصول، تفعيل IAM access to billing. تماماً كما لا تشارك مفتاح خزنة البنك مع أي موظف، لا تستخدم Root User إلا في الحالات القصوى.

شركة تكتشف أن أحد الموظفين ترك الشركة. بدلاً من القلق من Root User، تعلم أن Root User محمي بـ MFA hardware token مخزن في خزنة المدير العام. لا أحد آخر يعرف كلمة المرور. الشركة تطمئن إلى أن موظفها السابق لا يستطيع الوصول للحساب حتى لو كانت لديه بيانات اعتماد قديمة.

8️⃣ Steps to set up an admin user

لإعداد مستخدم إداري بدلاً من Root User، اتبع هذه الخطوات. أولاً: سجل الدخول كـ Root User وقم بإعداد MFA على هذا الحساب. ثانياً: أنشئ مستخدماً إدارياً جديداً (John مثلاً)، أضف MFA للمستخدم الجديد، وحمّل المفاتيح البرمجية. ثالثاً: سجل الخروج كـ Root User. رابعاً: سجل الدخول كـ John. خامساً: أنشئ حسابات المستخدمين الآخرين مع سياسات منفصلة لكل واحد. هذه الخطوات الخمس هي أفضل ممارسة لإنشاء بيئة آمنة منذ البداية. تماماً كما تشتري منزلاً جديداً، أول ما تفعله هو تغيير أقفال الباب (إعداد MFA) قبل الانتقال إليه.

شركة جديدة تنشئ حساب AWS. Root User ينشئ IAM user اسمه admin-jane مع صلاحيات AdministratorAccess. Jane تفعّل MFA على حسابها. Root User يخرج ولا يُستخدم بعد ذلك. Jane تنشئ حسابات لكل فريق: مطور، تسويق، عمليات. كل فريق يحصل على الصلاحيات التي يحتاجها فقط.

9️⃣ Best practices: IAM users and groups

أفضل ممارسة في IAM هي إرفاق سياسات IAM بمجموعات IAM، ثم تعيين المستخدمين إلى هذه المجموعات. المستخدم الذي هو عضو في مجموعة يرث الصلاحيات المرفقة بتلك المجموعة. يمكنك أيضاً إرفاق سياسات IAM مباشرة بمستخدم لتخصيص الوصول الممنوح عبر المجموعة. هذا الأسلوب يسهل الإدارة بشكل كبير: بدلاً من تحديث 50 مستخدماً عند تغيير السياسة، تحدث المجموعة مرة واحدة ويعمم التغيير على كل الأعضاء. في المثال: السياسة 1 مرفقة بمجموعة المبيعات والسياسة 2 مرفقة بمجموعة تقنية المعلومات. تماماً كما يصدر المدير قراراً واحداً لكل قسم بدلاً من إصدار قرار لكل موظف، تُدار الصلاحيات عبر المجموعات.

شركة كبيرة تنشئ ثلاث مجموعات: Developers، Marketing، Admins. كل مجموعة لها سياستها. عند انضمام موظف جديد للتسويق، يضاف إلى Marketing group فقط. عند تغيير صلاحيات التسويق، يضاف للسياسة في Marketing group، وتنعكس على كل أعضاء التسويق تلقائياً.

🔟 IAM roles

IAM Role (دور IAM) يوفر بيانات اعتماد أمان مؤقتة ولا يرتبط بشخص واحد بشكل فريد. يمكن افتراض الدور من قبل شخص أو تطبيق أو خدمة. يُستخدم IAM Role غالباً لتفويض الوصول. حالات الاستخدام الشائعة: تطبيق يعمل على EC2 يحتاج للوصول إلى S3، وصول عبر الحسابات لمستخدم IAM، تطبيقات الجوال التي تحتاج لاستدعاء خدمات AWS، خدمات AWS التي تحتاج للوصول لبعضها. عند افتراض دور، تُلغى صلاحيات المستخدم السابقة مؤقتاً وتُستبدل بصلاحيات الدور. تماماً كما يرتدي عامل المستشفى زياً خاصاً لدخول غرفة العمليات، يفترض التطبيق دوراً خاصاً للوصول لمورد معين.

تطبيق على EC2 يحتاج لتحميل ملفات إلى S3. بدلاً من تخزين access keys على الخادم (غير آمن)، ينشئ cloud architect IAM role بسياسة s3:PutObject، ويربطه بـ EC2 instance profile. التطبيق يحصل على الصلاحية تلقائياً عبر metadata دون أي مفاتيح مخزنة.

1️⃣1️⃣ Three examples of using an IAM role

ثلاثة أمثلة شائعة لاستخدام IAM roles. المثال الأول: مستخدم IAM في حساب 1 يحتاج وصولاً مؤقتاً لمورد في حساب آخر. الحل: تنشئ سياسة IAM بالصلاحيات، تنشئ IAM role وتُرفق السياسة به، والمستخدم يفترض الدور. المثال الثاني: تطبيق على EC2 يحتاج الوصول لـ S3. تنشئ IAM role بسياسة S3، تضيف الدور إلى instance profile، تربطها بالمثيل. المثال الثالث: خدمة AWS مثل Lambda تحتاج للوصول لـ DynamoDB. تنشئ IAM role بسياسة DynamoDB، تربطه بدالة Lambda. تماماً كما يستخدم ساعي البريد بطاقة هوية موحدة لدخول عدة مبانٍ، تستخدم IAM role للوصول لعدة موارد.

شركة تستخدم Lambda لمعالجة الصور المرفوعة إلى S3. تنشئ IAM role بسياسة تسمح بقراءة S3 وكتابة DynamoDB. تربطه بدالة Lambda. الدالة تحصل على الصلاحيات تلقائياً. لو تغيرت الصورة، Lambda يعالجها ويحدّث DynamoDB دون أي تكوين إضافي.

📖 قاموس مصطلحات المحور الثاني

المصطلح (English)الترجمةالمفهوم
Authenticationالمصادقةالتحقق من هوية الطالب عبر بيانات الاعتماد (اسم مستخدم، كلمة مرور، MFA).
Authorizationالتفويضتحديد ما يُسمح للطالب فعله بعد المصادقة الناجحة.
IAM Userمستخدم IAMهوية دائمة لشخص أو تطبيق، ببيانات اعتماد ثابتة.
IAM Groupمجموعة IAMمجموعة من المستخدمين بصلاحيات موحدة لتسهيل الإدارة.
IAM Roleدور IAMهوية مؤقتة يُفترض من قبل مستخدم أو خدمة، بدون بيانات اعتماد دائمة.
Root Userالمستخدم الجذرمالك الحساب بصلاحيات كاملة، يُستخدم فقط للحالات الحرجة.
MFAالمصادقة متعددة العواملطبقة أمان إضافية تتطلب رمزاً مؤقتاً من جهاز خارجي.
Access Keyمفتاح الوصولمزيج من Access Key ID و Secret Key للمصادقة البرمجية.
IAM Identity Centerمركز هوية IAMخدمة SSO لإدارة الهويات الموحدة عبر حسابات AWS.
Instance Profileملف تعريف المثيلحاوية لـ IAM role تُربط بـ EC2 instance لمنحه صلاحيات.

1️⃣ IAM policies and permissions

السياسة (Policy) هي كائن JSON يحدد الصلاحيات للهوية أو المورد المرتبط بها. باستخدام السياسات، يمكنك ضبط الصلاحيات الممنوحة للموجهين (principals) مثل مستخدمي IAM وأدوار IAM وخدمات AWS. هناك نوعان من السياسات. Identity-based policies (قائمة على الهوية): تُرفق بمستخدم أو مجموعة أو دور IAM وتحدد ما يُسمح للهوية بفعله. Resource-based policies (قائمة على المورد): تُرفق بمورد AWS (مثل حاوية S3) وتحدد من يمكنه الوصول إليها. يتم تعريف الصلاحيات في مستندات سياسة IAM بصيغة JSON. تماماً كما يضع النادي لائحة داخلية (identity-based) تحدد ما يمكن للأعضاء فعله، ولائحة للزوار (resource-based) تحدد من يدخل، تعمل IAM بسياسات من نوعين.

مطور ينشئ تطبيقاً يحتاج للوصول لـ DynamoDB. ينشئ identity-based policy تسمح بقراءة/كتابة جدول Orders فقط. يربط السياسة بدور IAM يُفترض من Lambda. التطبيق يصل لـ Orders دون الوصول لجداول أخرى.

2️⃣ Determining permissions at the time of request

عندما يحدد IAM ما إذا كان الإجراء مسموحاً، تتبع AWS منطق تقييم محدد. أولاً: تتحقق من وجود أي سياسة منع صريح (explicit deny). إذا وُجد منع صريح، يُرفض الطلب فوراً. ثانياً: إذا لم يوجد منع صريح، تتحقق من وجود أي سياسة سماح صريح (explicit allow). إذا وُجد سماح، يُسمح. ثالثاً: إذا لم توجد سياسة منع أو سماح صريحة، تعود IAM إلى المنع الضمني (implicit deny) وترفض الوصول. القاعدة الأساسية: بشكل افتراضي، كل الطلبات مرفوضة. Explicit Deny يتجاوز أي Explicit Allow. تماماً كما لا يستطيع أي شخص دخول القصر ما لم يُسمح له صراحةً (implicit deny)، ولا يستطيع الدخول حتى بوجود إذن إذا كان مدرجاً في قائمة المنع (explicit deny).

موظف في Marketing group يحاول حذف ملف في S3 الحساس. S3 bucket policy يحتوي على Deny صريح لـ s3:Delete*. حتى لو كان لدى الموظف صلاحية s3:DeleteObject من IAM policy، فإن المنع الصريح في S3 يتغلب عليها ويُرفض الحذف.

3️⃣ Identity-based and resource-based policies

السياسات القائمة على الهوية (Identity-based) تُرفق بمستخدم أو مجموعة أو دور IAM وتجيب على السؤال: ما الذي تملك صلاحية الوصول إليه هوية معينة؟ على سبيل المثال، Carlos لديه صلاحية قراءة وكتابة وقائمة على المورد X، بينما Richard ليس لديه أي صلاحية. السياسات القائمة على المورد (Resource-based) تُرفق بالمورد نفسه (مثل حاوية S3) وتحدد من يمكنه الوصول إليه. الفرق الرئيسي هو مكان التطبيق: identity-based تحدد ما يمكن للهوية فعله، وresource-based تحدد من يصل للمورد. تماماً كما يحصل موظف على بطاقة هوية تحدد ما يمكنه فعله (identity-based)، وتضع الشركة لافتة على باب غرفة تقول "هذه الغرفة لموظفي قسم X فقط" (resource-based).

شركة تريد مشاركة ملفات مع شريك خارجي. تنشئ حاوية S3، تضيف resource-based policy تسمح لحساب AWS للشريك بالقراءة فقط. الشريك يصل للحاوية دون الحاجة لإنشاء IAM users في حساب الشركة. هذا أكثر أماناً وأسهل في الإدارة.

4️⃣ Policies: Example 1

المثال الأول لسياسة قائمة على الهوية: المستخدم Bob لديه سياسة تسمح له بعمليات Get وPut وList على حاوية X. بالنسبة للحاوية Y، الصلاحية غير محددة (N/A) مما يعني عدم وجود وصول. هذه السياسة تمنح Bob صلاحية التعامل مع حاوية S3 محددة فقط. هذا مفيد عندما تريد منح مطور صلاحية الوصول إلى حاوية تطوير محدد دون منحه صلاحية الوصول إلى حاويات الإنتاج الحساسة. تتم كتابة السياسة بصيغة JSON مع تحديد Action وResource بدقة. تماماً كما يحصل موظف على مفتاح يفتح غرفة محددة فقط، يحصل Bob على صلاحية تتيح الوصول لحاوية محددة فقط.

تطبيق staging يحتاج للوصول لـ S3 staging bucket فقط. السياسة تسمح بـ s3:GetObject وs3:PutObject على arn:aws:s3:::staging-bucket/*. المطور يصل لبيئة staging دون رؤية بيانات الإنتاج. لو حدث خطأ في الكود وأراد حذف ملف إنتاجي، يُمنع تلقائياً.

5️⃣ Policies: Example 2

المثال الثاني: Bob لا يزال لديه صلاحيات Get وPut وList على الحاوية X. الصلاحية على الحاوية Y غير محددة (N/A)، لذلك حتى لو كان هناك سماح صريح للحاوية X، فإن الحاوية Y تبقى ممنوعة (implicit deny). هذا يوضح أهمية تحديد الموارد بدقة في السياسات. نهج الأمان الأفضل هو "القائمة البيضاء": حدد بوضوح ما هو مسموح به، وكل ما لم يُذكر فهو ممنوع تلقائياً. تماماً كما لا يستطيع موظف دخول أي غرفة ما لم يُذكر اسمها صراحةً في بطاقة دخوله، لا يستطيع Bob الوصول لأي حاوية ما لم تُذكر في سياسته.

شركة fintech تنشئ سياسات IAM صارمة. كل سياسة تذكر الموارد بدقة عبر ARN. لا توجد سياسات بـ "Resource": "*" التي تمنح وصولاً واسعاً. النتيجة: كل موظف يرى فقط الموارد التي يحتاجها. حتى لو حدث اختراق، الضرر محدود.

📖 قاموس مصطلحات المحور الثالث

المصطلح (English)الترجمةالمفهوم
Policyالسياسةمستند JSON يحدد الصلاحيات لهوية أو مورد.
Identity-based Policyسياسة قائمة على الهويةسياسة تُرفق بمستخدم أو مجموعة أو دور IAM.
Resource-based Policyسياسة قائمة على الموردسياسة تُرفق بمورد AWS مثل حاوية S3.
Explicit Allowسماح صريحتجاوز المنع الافتراضي ويسمح بالإجراء.
Explicit Denyمنع صريحيتجاوز أي سماح ويرفض الإجراء نهائياً.
Implicit Denyمنع ضمنيالمنع الافتراضي عند عدم وجود سماح صريح.
ARNاسم مورد أمازونمعرف فريد لكل مورد في AWS، يستخدم في السياسات.
JSONتنسيق JSONلغة منظمة لكتابة سياسات IAM بشكل قابل للقراءة.

1️⃣ IAM policy document structure

مستند سياسة IAM يتكون من عدة عناصر رئيسية. Version: إصدار لغة السياسة (عادةً "2012-10-17"). Statement: العنصر الرئيسي الذي يحدد ما هو مسموح أو ممنوع. داخل Statement توجد: Effect (Allow أو Deny)، Principal (لسياسات المورد فقط، يحدد الحساب أو المستخدم)، Action (يسرد إجراءات AWS API المسموحة أو الممنوعة، يدعم wildcards مثل s3:*Resource (يحدد موارد AWS عبر ARN)، وCondition (ظروف إضافية مثل IP أو الوقت). كل عنصر اختياري ما عدا Effect. تماماً كما تتكون الوصفة من اسم الطبق، المكونات، الكميات، والظروف (فرن، حرارة، وقت)، تتكون السياسة من هذه العناصر الخمسة.

سياسة IAM نموذجية: { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-bucket/*" }] }. هذه السياسة تسمح بقراءة الكائنات من my-bucket. كل عنصر يخدم غرضاً: Version يحدد الصيغة، Effect يسمح، Action يحدد الإجراء، Resource يحدد الهدف.

2️⃣ Example: resource-based policy

مثال على سياسة قائمة على المورد: تسمح السياسة صراحةً بأي إجراء (*) على DynamoDB أو S3 على جدول DynamoDB المسمى course-notes، وحاوية S3 المسماة course-notes-web، وكائنات حاوية course-notes-mp3. هذه سياسة resource-based لأنها تُرفق بالمورد نفسه (جدول DynamoDB أو حاوية S3) وتحدد من يمكنه الوصول إليه. لاحظ وجود Principal في السياسة (لأنه resource-based). تماماً كما يضع المتحف لوحة على الباب تقول "الطلاب المسجلون في دورة X يمكنهم مشاهدة هذا المعرض"، تحدد resource-based policy من يصل للمورد.

شركة تريد أن يصل موظفوها لـ DynamoDB الحساس. تضيف resource-based policy على الجدول تسمح بدور DynamoDB-Reader فقط. لا يحتاج كل موظف إلى identity policy خاصة، فقط يحصل على الدور. هذا يحرر admin من إدارة السياسات على كل مستخدم.

3️⃣ Example: Identity-based policy

مثال على سياسة قائمة على الهوية: تسمح السياسة للمستخدم بإجراء عمليات إدارة ملف تعريف تسجيل الدخول (iam:CreateLoginProfile)، ومفاتيح الوصول (iam:CreateAccessKey)، والمفاتيح العامة SSH (iam:UploadSSHPublicKey). لكن لاحظ أن المورد محدد كـ ${aws:username}، مما يعني أن السياسة تنطبق فقط على المستخدم نفسه. هذا يطبق Least Privilege بدقة: المستخدم يمكنه إدارة بيانات الاعتماد الخاصة به فقط، وليس بيانات اعتماد الآخرين. لاحظ عدم وجود Principal في السياسة (لأنها identity-based ومُرفقة بالفعل بالمستخدم). تماماً كما يستطيع كل موظف تغيير كلمة المرور الخاصة بمكتبه فقط، يستطيع IAM user إدارة بياناته الشخصية فقط.

شركة تريد أن يستطيع كل موظف إدارة بياناته الشخصية (تغيير كلمة المرور، إنشاء access key). تطبق identity-based policy على كل IAM user تسمح بهذه الإجراءات على نفسه فقط عبر ${aws:username}. النتيجة: الموظف مستقل، admin مرتاح.

4️⃣ Example: Cross-account, resource-based policy

مثال على سياسة عبر الحسابات (Cross-account): الحساب A ينشئ سياسة على حاوية S3 تسمح للحساب B (رقم الحساب 111122223333) بالوصول الكامل (*) إلى جميع عمليات S3 على الحاوية. هذا النوع من السياسات resource-based يسمح بمشاركة الموارد عبر حسابات AWS مختلفة دون مشاركة كلمات المرور أو إنشاء مستخدمين جدد. يستخدم Principal لتحديد الحساب الآخر. تماماً كما تشارك شركتان مشروعاً: تمتلك إحداهما المستودع وتضع الأخرى في قائمة الوصول المسموح، تستخدم cross-account policy لمشاركة آمنة بين الحسابات.

شركة A (المالك) وشركة B (الشريك) يتعاونان على مشروع. شركة A تشارك S3 bucket مع B عبر cross-account policy. شركة B تصل للحاوية دون أي حساب في A. لو انتهى التعاون، تحذف A السياسة فوراً. لا توجد كلمات مرور مشتركة.

📖 قاموس مصطلحات المحور الرابع

المصطلح (English)الترجمةالمفهوم
Versionإصدار لغة السياسةإصدار صيغة JSON للسياسة، عادةً "2012-10-17".
Statementالبيانالكتلة الرئيسية في السياسة التي تحدد Effect و Action و Resource.
Effectالتأثيريحدد ما إذا كان الإجراء مسموحاً (Allow) أو ممنوعاً (Deny).
Actionالإجراءيسرد عمليات AWS API المسموحة أو الممنوعة، يدعم wildcards.
Resourceالمورديحدد موارد AWS عبر ARN مثل arn:aws:s3:::my-bucket/*.
Principalالموجهالحساب أو المستخدم أو الدور، يظهر في resource-based policies فقط.
Conditionالشرطظروف إضافية مثل IP أو الوقت أو MFA مطلوب.
Cross-accountعبر الحساباتالسماح بالوصول لمورد في حساب AWS مختلف.

🚀 الخاتمة

في هذه الوحدة استعرضنا أساسيات تأمين الوصول في AWS. تعلمنا أن الأمان مسؤولية مشتركة بين AWS (أمان السحابة) والعميل (الأمان داخل السحابة)، وأن ركيزة الأمان في Well-Architected تتضمن سبعة مبادئ تصميم تشمل Least Privilege وحماية البيانات والتشفير. تعرفنا على خدمة AWS IAM بأنواعها المختلفة (User, Group, Role)، وكيف يفرق بين Authentication وAuthorization عبر بيانات اعتماد مؤقتة ودائمة. فهمنا بنية السياسات (Identity-based, Resource-based)، ومنطق التقييم (Explicit Deny, Explicit Allow, Implicit Deny). وأخيراً، تعرفنا على بنية مستند JSON للسياسة وعناصره الخمسة (Version, Statement, Effect, Action, Resource, Condition). تذكر دائماً: الأمان ليس وجهة بل رحلة مستمرة من التعلم والتحسين، تماماً كما السيف يحتاج للصقل المستمر ليبقى حاداً.

تعليقات



حجم الخط
+
16
-
تباعد السطور
+
2
-