{"checkpoints":{"s-aws-1":[{"q":"<p>في المحاولة الأولى ينسخ Lantern الخادم القديم إلى instance واحدة في EC2 ضمن <code dir=\"ltr\">eu-west-1a</code>، ويصفه أحد المتطوّعين بأنه «عالي التوافر لأنه في السحابة». أيّ تغيير يتيح فعلًا للتطبيق النجاة من خسارة منطقة توافر؟</p>","options":[{"text":"الانتقال إلى نوع instance أكبر في منطقة التوافر نفسها.","why":"الآلة الأكبر تتحمّل حملًا أكبر، لكنها ما زالت تعيش في منطقة توافر واحدة وتسقط معها."},{"text":"تشغيل instances في منطقتي توافر على الأقل، مع إبقاء البيانات خارج الـ instances في خدمة مُدارة متعدّدة مناطق التوافر.","why":"صحيح. الصمود يأتي من نسخ مستقلة في مناطق توافر منفصلة، ومن عدم تخزين النسخة الوحيدة من البيانات على خادم واحد."},{"text":"نقل كل شيء إلى us-east-1 لأن فيها مناطق توافر أكثر.","why":"كثرة مناطق التوافر في الـ Region لا تفيد إلا إذا استخدمت أكثر من واحدة منها فعلًا، وقد يخالف النقل قواعد حماية البيانات التي يلتزم بها Lantern."},{"text":"تفعيل المراقبة التفصيلية للـ instance.","why":"تخبرك المراقبة مبكرًا بأن منطقة التوافر تعطّلت. لكنها لا تُبقي التطبيق يعمل."}],"answer":1},{"q":"<p>أنت مسجّل الدخول بمستخدم IAM المدير الخاص بـ Lantern وله <code dir=\"ltr\">AdministratorAccess</code>، ومع ذلك تقول صفحات Billing and Cost Management إنك غير مخوّل. ما السبب الأرجح؟</p>","options":[{"text":"لا تتضمّن AdministratorAccess أي إجراءات فوترة.","why":"تسمح AdministratorAccess بكل الإجراءات. الحجب يأتي من إعداد على مستوى الحساب، لا من السياسة."},{"text":"بيانات الفوترة لا تظهر إلا في us-east-1، والـ console مفتوح على Region أخرى.","why":"صفحات الفوترة عامّة ولا تعتمد على مُحدِّد الـ Region."},{"text":"مستخدمو IAM لا يستطيعون رؤية بيانات الفوترة أبدًا؛ وحده مستخدم الجذر يستطيع.","why":"يستطيع مستخدمو IAM والـ roles رؤية الفوترة بمجرد أن يسمح الحساب بذلك. وهذا هو الإعداد الموصى به."},{"text":"لم يفعّل مستخدم الجذر وصول مستخدمي IAM والـ roles إلى معلومات الفوترة.","why":"صحيح. هذا الإعداد من إعدادات الحساب مهمة حصرية بالجذر، وحتى يُفعَّل لا تستطيع صلاحيات IAM وحدها فتح صفحات الفوترة."}],"answer":3},{"q":"<p>وفق نموذج المسؤولية المشتركة، أيّ من التالي مهمة AWS بالنسبة إلى جدول DynamoDB الخاص بـ Lantern؟</p>","options":[{"text":"تخزين بيانات الجدول بشكل مكرّر عبر مناطق التوافر في الـ Region.","why":"صحيح. DynamoDB خدمة مُدارة إقليمية، ونسخ بياناتها عبر مناطق التوافر جزء من الخدمة التي تشغّلها AWS."},{"text":"تحديد أيّ roles في IAM يحق لها استدعاء <code dir=\"ltr\">dynamodb:Scan</code> على الجدول.","why":"من يحق له الوصول إلى بياناتك قرارك أنت دائمًا، وتعبّر عنه في سياساتك."},{"text":"تحديد أيّ السمات يجوز أن تحتوي على بيانات شخصية مثل عناوين البريد.","why":"ما تخزّنه، وهل يجب أن تخزّنه، من حوكمة بيانات العميل ويبقى مسؤوليتك."},{"text":"تفعيل الاستعادة إلى نقطة زمنية (point-in-time recovery) للجدول.","why":"توفّر AWS الميزة، لكن تفعيلها خيار إعداد تتّخذه أنت لكل جدول."}],"answer":0},{"q":"<p>شغّل سكربت تنظيف الأمر <code dir=\"ltr\">aws s3 rb s3://lantern-test --force</code> بينما كانت بيانات اعتماد الإنتاج نشطة في الطرفية أيضًا. أيّ تغيير يمنع السكربت على أفضل وجه من العمل في الحساب الخطأ أبدًا؟</p>","options":[{"text":"إضافة <code dir=\"ltr\">--dry-run</code> إلى الأمر.","why":"لا يحتوي الأمر <code dir=\"ltr\">aws s3 rb</code> على خيار dry-run، والتشغيل التجريبي لن يتحقّق من الحساب النشط على أي حال."},{"text":"تشغيل السكربت بمستخدم الجذر فقط كي يُسجَّل كل إجراء.","why":"الجذر يضخّم الأخطاء ولا يقلّلها، ولا يختار الحساب الصحيح نيابة عنك."},{"text":"تمرير <code dir=\"ltr\">--profile</code> صريح وإيقاف السكربت ما لم يُعِد <code dir=\"ltr\">aws sts get-caller-identity</code> معرّف الحساب المتوقّع.","why":"صحيح. الـ profile الصريح يزيل الالتباس، وفحص الهوية يفشل بأمان قبل تشغيل أي شيء مدمّر."},{"text":"ضبط <code dir=\"ltr\">--output text</code> كي تسهل قراءة الأخطاء.","why":"تنسيق المخرجات يغيّر طريقة طباعة النتائج، لا الحساب الذي يستهدفه الأمر."}],"answer":2},{"q":"<p>متعلّم على خطة الحساب المجانية يريد التدرّب على شراء Savings Plan لـ instance تجريبية. ماذا يحدث؟</p>","options":[{"text":"تتم عملية الشراء وتُدفع من الأرصدة الترويجية.","why":"الأرصدة لا تفتح ميزات تستثنيها الخطة المجانية. وشراء الالتزامات خارج نطاق الخطة."},{"text":"تتم عملية الشراء لكنها تُلغى تلقائيًا بعد ستة أشهر.","why":"لا يوجد إلغاء تلقائي؛ عملية الشراء ببساطة غير معروضة في الخطة المجانية."},{"text":"الـ Savings Plans مجانية خلال الأشهر الستة الأولى من أي حساب.","why":"الـ Savings Plans خصم مقابل التزام بالإنفاق، وليست مجانية أبدًا."},{"text":"الـ Savings Plans غير متاحة في الخطة المجانية؛ ويجب ترقية الحساب إلى الخطة المدفوعة أولًا.","why":"صحيح. تستثني الخطة المجانية الخدمات والميزات التي قد تستهلك الأرصدة، مثل Savings Plans وReserved Instances."}],"answer":3}],"s-aws-2":[{"q":"<p>هذه السياسة مرفقة بـ Sam، ومع ذلك يعيد <code dir=\"ltr\">aws s3 ls s3://lantern-posters/</code> الخطأ AccessDenied. لماذا؟</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"json\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">JSON</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Effect\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"Allow\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Action\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"s3:ListBucket\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Resource\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"arn:aws:s3:::lantern-posters/*\"</span></span>\n<span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n","options":[{"text":"يعمل <code dir=\"ltr\">s3:ListBucket</code> على الـ bucket، لذا يجب أن يكون الـ Resource هو <code dir=\"ltr\">arn:aws:s3:::lantern-posters</code> دون <code dir=\"ltr\">/*</code>.","why":"صحيح. السرد إجراء على مستوى الـ bucket؛ ونمط ARN الكائنات لا يطابقه أبدًا."},{"text":"يحتاج السرد إلى <code dir=\"ltr\">s3:GetObject</code> أيضًا.","why":"ينزّل GetObject الكائنات. أما سرد المفاتيح فلا يحتاج إلا إلى ListBucket على ARN الـ bucket."},{"text":"تحتاج العبارة إلى عنصر Principal.","why":"السياسات القائمة على الهوية ليس فيها Principal؛ فالهوية المرفقة بها هي الـ principal."},{"text":"السرد في S3 يتطلّب MFA دائمًا.","why":"لا يشترط MFA إلا شرطٌ في سياسة، وهذه السياسة ليس فيها شروط."}],"answer":0},{"q":"<p>ينشر الـ workflow الخاص بـ Lantern في GitHub Actions الموقعَ إلى S3. ما الطريقة الموصى بها لمنحه صلاحيات AWS؟</p>","options":[{"text":"تخزين مفتاح وصول مستخدم IAM وسرّه كأسرار في المستودع.","why":"هذا يعمل، لكنه سرّ طويل الأمد قد يتسرّب من نظام الـ CI ويجب تدويره يدويًا."},{"text":"استخدام جلسة <code dir=\"ltr\">aws login</code> الخاصة بمستخدم المدير من حاسوب أحد القائمين على المشروع.","why":"جلسات تسجيل الدخول للأشخاص الجالسين أمام الطرفية وتنتهي خلال ساعات، فلا يمكن أن يعتمد عليها pipeline."},{"text":"جعل الـ bucket الخاص بالموقع قابلًا للكتابة العامة كي لا يحتاج الـ workflow إلى بيانات اعتماد.","why":"الـ bucket القابل للكتابة العامة يتيح لأي أحد على الإنترنت استبدال موقع Lantern."},{"text":"إضافة GitHub كمزوّد هوية OpenID Connect في IAM وترك الـ workflow يتقمّص role للنشر تسمّي سياسة الثقة الخاصة به المستودعَ.","why":"صحيح. يستبدل الـ workflow الـ token قصير العمر ببيانات اعتماد role مؤقتة، فلا يوجد أي سرّ مخزّن على الإطلاق."}],"answer":3},{"q":"<p>تتضمّن سياسات أحد المطوّرين Allow لـ <code dir=\"ltr\">ec2:*</code> على <code dir=\"ltr\">*</code> وهذه العبارة. ماذا يحدث حين يشغّل instance في <code dir=\"ltr\">us-east-1</code>؟</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"json\" data-index=\"1\"><div class=\"code-head\"><span class=\"code-title\">JSON</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">{</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Effect\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"Deny\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Action\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"ec2:*\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Resource\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"*\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Condition\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: { </span><span style=\"color:#116329;--shiki-dark:#7EE787\">\"StringNotEquals\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: { </span><span style=\"color:#116329;--shiki-dark:#7EE787\">\"aws:RequestedRegion\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"eu-west-1\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> } }</span></span>\n<span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n","options":[{"text":"ينجح، لأن الـ Allow لـ <code dir=\"ltr\">ec2:*</code> كُتب أولًا.","why":"ترتيب العبارات لا يهمّ في IAM. كل العبارات المنطبقة تُقيَّم معًا."},{"text":"ينجح، لأن الشروط لا تنطبق إلا على عبارات Allow.","why":"الشروط تعمل على عبارات Deny أيضًا، وهي طريقة شائعة لبناء حواجز الحماية."},{"text":"يُرفض، لأن الـ Region في الطلب ليست eu-west-1، فتطابق عبارة الـ Deny الصريحة.","why":"صحيح. الشرط صحيح بالنسبة إلى us-east-1، فينطبق الـ Deny، والرفض الصريح ينتصر دائمًا."},{"text":"يُرفض، لأن <code dir=\"ltr\">ec2:*</code> ليس نمط إجراء صالحًا.","why":"الرموز البديلة على مستوى الخدمة مثل <code dir=\"ltr\">ec2:*</code> صالحة. عبارة الـ Deny هي ما يحجب الطلب."}],"answer":2},{"q":"<p>غادر أحد المتطوّعين Lantern. الجميع يسجّلون الدخول عبر IAM Identity Center بحزم صلاحيات في حسابَي التطوير والإنتاج. ماذا تفعل؟</p>","options":[{"text":"احذف الـ roles في IAM المسمّاة باسم المتطوّع في كل حساب.","why":"الـ roles في Identity Center لكل حزمة صلاحيات، لا لكل شخص، وحذفها سيمنع وصول كل من يستخدمها."},{"text":"عطّل مستخدم المتطوّع في Identity Center أو احذفه، فيُزال وصوله إلى كل حساب مُسند إليه.","why":"صحيح. هوية واحدة، ومكان واحد لإلغائها. كما تتوقّف جلساته الحالية عن التجدّد."},{"text":"دوّر مفاتيح الوصول لكل مستخدمي IAM في الحسابين.","why":"مع Identity Center لا يملك الأشخاص مفاتيح وصول لتدويرها. هذه الخطوة تنتمي إلى عالم المستخدمين المشتركين القديم."},{"text":"غيّر كلمة مرور مستخدم الجذر في الحسابين.","why":"لم يكن للمتطوّع وصول إلى الجذر أصلًا، فتغيير كلمات مرور الجذر لا يزيل شيئًا كان لديه."}],"answer":1},{"q":"<p>يبلّغ ماسح أمني أن مفتاح وصول نشطًا لمستخدم IAM المسمّى <code dir=\"ltr\">export-bot</code> في Lantern رُفع إلى مستودع عام على GitHub قبل ساعة. ما أول ما يجب أن تفعله؟</p>","options":[{"text":"احذف المستودع كي لا يجد أحد آخر المفتاح.","why":"تنسخ البوتات المفاتيح المكشوفة خلال دقائق، فإخفاء المستودع لا يوقف من حصل عليه بالفعل."},{"text":"تحقّق من تاريخ آخر استخدام للمفتاح وقرّر بناءً عليه.","why":"هذا الفحص جزء من التخلّص المخطّط له من مفتاح قديم. أما المفتاح المسرّب فحالة طوارئ، والانتظار يمنح المهاجم وقتًا."},{"text":"افتح طلب دعم وانتظر أن تلغيه AWS.","why":"قد تساعد AWS وقد تطبّق سياسة حجر، لكن تعطيل مفتاحك بنفسك فوري وتحت سيطرتك."},{"text":"عطّل المفتاح فورًا، ثم راجع CloudTrail لمعرفة فيمَ استُخدم، واستبدله بـ role.","why":"صحيح. التعطيل يوقف أي استخدام إضافي فورًا. ويأتي التحقيق والإصلاح البنيوي بعد ذلك."}],"answer":3}],"s-aws-3":[{"q":"<p>يضيف Lantern خادم cache في الذاكرة يحتاج إلى كثير من الـ RAM وقليل من المعالج. أيّ عائلة instances تناسبه أكثر؟</p>","options":[{"text":"<code dir=\"ltr\">c</code> (محسّنة للحوسبة)","why":"الأنواع المحسّنة للحوسبة تمنح معالجًا أكثر لكل غيغابايت من الذاكرة، وهذا عكس ما يحتاجه حمل العمل هذا."},{"text":"<code dir=\"ltr\">t</code> (قابلة للاندفاع)","why":"الأنواع القابلة للاندفاع تناسب استخدام المعالج المنخفض المتقطّع مع ذاكرة متواضعة، لا cache كثيف الذاكرة."},{"text":"<code dir=\"ltr\">r</code> (محسّنة للذاكرة)","why":"صحيح. تمنح العائلة <code dir=\"ltr\">r</code> أكبر قدر من الذاكرة لكل vCPU بين العائلات الشائعة."},{"text":"<code dir=\"ltr\">g</code> (GPU)","why":"الـ instances ذات الـ GPU للرسوميات وتعلّم الآلة، وهي مكلفة كـ cache."}],"answer":2},{"q":"<p>تُشاهَد ملصقات الفعاليات باستمرار خلال الشهر المحيط بالفعالية، ثم نادرًا، لكن صفحات الفعاليات القديمة يجب أن تظل تحمّلها فورًا. أيّ إعداد يخفّض التكاليف دون تعطيل الصفحات القديمة؟</p>","options":[{"text":"أبقِ الملصقات الجديدة في S3 Standard وأضف قاعدة دورة حياة تنقلها إلى S3 Glacier Instant Retrieval بعد 90 يومًا.","why":"صحيح. تحافظ Glacier Instant Retrieval على الوصول بالمللي ثانية بسعر تخزين أقل للكائنات التي نادرًا ما تُقرأ."},{"text":"انقل الملصقات إلى S3 Glacier Deep Archive بعد 30 يومًا.","why":"يجب استعادة كائنات Deep Archive قبل قراءتها، وهذا يستغرق ساعات، فستعرض الصفحات القديمة صورًا معطوبة."},{"text":"خزّن كل الملصقات في S3 One Zone-IA من البداية.","why":"الملصقات الحديثة تُقرأ باستمرار، فستتراكم رسوم الاسترجاع، ومنطقة توافر واحدة مخاطرة بالنسبة إلى النسخة الوحيدة."},{"text":"خزّن كل الملصقات في S3 Express One Zone.","why":"صُمِّمت Express One Zone لأحمال العمل فائقة الانخفاض في زمن الاستجابة، وليست مكانًا أرخص للملفات التي نادرًا ما تُقرأ."}],"answer":0},{"q":"<p>ينشئ Lantern جدول DynamoDB جديدًا لميزة تسجيل الحضور، زياراتها قريبة من الصفر معظم الأيام وهائلة في أيام المهرجانات. بأيّ نمط سعة يجب أن يبدأ؟</p>","options":[{"text":"سعة provisioned بحجم ذروة المهرجان.","why":"ستدفع ثمن سعة الذروة كل يوم من أيام السنة، بما فيها الأيام الخاملة الكثيرة."},{"text":"سعة provisioned بحجم يوم عادي، دون توسّع تلقائي.","why":"ستتجاوز زيارات المهرجان السعة المحجوزة وستُرفض الطلبات (throttled)."},{"text":"سعة محجوزة (reserved capacity) تُشترى لمدة سنة.","why":"السعة المحجوزة خصم على إنتاجية provisioned ثابتة، وهذا الجدول المتقطّع لا يملكها."},{"text":"سعة on-demand، بالدفع لكل طلب.","why":"صحيح. يتبع on-demand الزيارات صعودًا وهبوطًا، والأيام الخاملة لا تكاد تكلّف شيئًا."}],"answer":3},{"q":"<p>دالة Lambda في شبكة فرعية خاصة تقرأ الملصقات من S3 وتكتب في DynamoDB. لا توجد في الـ VPC بوابة NAT. ما أرخص طريقة لتمكينها من الوصول إلى الخدمتين؟</p>","options":[{"text":"أضف بوابة NAT في شبكة فرعية عامة.","why":"هذا يعمل، لكن بوابة NAT تُحتسب بالساعة ولكل غيغابايت، وهو ما تتجنّبه نقاط النهاية من نوع gateway لهاتين الخدمتين."},{"text":"أضف نقاط نهاية من نوع gateway لـ S3 وDynamoDB إلى جدول التوجيه الخاص بالشبكات الفرعية الخاصة.","why":"صحيح. نقاط النهاية من نوع gateway تُبقي الزيارات إلى S3 وDynamoDB داخل AWS ولا تضيف رسومًا بالساعة أو لكل غيغابايت."},{"text":"انقل الدالة إلى شبكة فرعية عامة.","why":"دوال Lambda داخل VPC لا تحصل على عناوين IP عامة، فالشبكة الفرعية العامة وحدها لا تمنحها وصولًا إلى الإنترنت."},{"text":"افتح المنفذ 443 الصادر في مجموعة الأمان الخاصة بالدالة.","why":"تسمح مجموعات الأمان بكل الزيارات الصادرة افتراضيًا؛ والقطعة الناقصة مسار، لا قاعدة جدار حماية."}],"answer":1},{"q":"<p>دالة Lambda غير مرتبطة بأي VPC لا تستطيع الاتصال بقاعدة بيانات RDS الخاصة بـ Lantern في شبكة فرعية خاصة. ما المطلوب؟</p>","options":[{"text":"اجعل الـ instance في RDS متاحة للعموم.","why":"هذا يكشف قاعدة البيانات للإنترنت، وهو ما وُجدت الشبكة الفرعية الخاصة لمنعه."},{"text":"أضف <code dir=\"ltr\">rds:*</code> إلى الـ execution role الخاص بالدالة.","why":"يتحكّم IAM في استدعاءات API الإدارية لـ RDS. أما الاتصال بقاعدة البيانات فزيارات شبكية لا تفتحها إجراءات IAM."},{"text":"زِد مهلة الدالة.","why":"الاتصال لا يفشل لأنه بطيء؛ بل لا يوجد مسار شبكي على الإطلاق."},{"text":"اربط الدالة بالشبكات الفرعية الخاصة في الـ VPC مع مجموعة أمان تسمح بها مجموعة أمان قاعدة البيانات على المنفذ 5432.","why":"صحيح. عندئذٍ تعمل الدالة داخل الـ VPC، وتستطيع القاعدة في مجموعة أمان قاعدة البيانات أن تسمّي مجموعة أمان الدالة كمصدر."}],"answer":3}],"s-aws-4":[{"q":"<p>تسمح سياسة الـ bucket الخاص بموقع Lantern بـ <code dir=\"ltr\">s3:GetObject</code> للـ service principal المسمّى <code dir=\"ltr\">cloudfront.amazonaws.com</code>، لكن دون شرط <code dir=\"ltr\">AWS:SourceArn</code>. ما الخطر؟</p>","options":[{"text":"يمكن توجيه أي distribution في CloudFront، بما في ذلك distribution في حساب AWS آخر، إلى الـ bucket وقراءته.","why":"صحيح. شرط SourceArn هو ما يقصر الوصول على الـ distribution الخاص بـ Lantern."},{"text":"يستطيع الزوّار رفع ملفات إلى الـ bucket عبر CloudFront.","why":"العبارة لا تسمح إلا بـ GetObject، فلا يوجد وصول كتابة لأي أحد."},{"text":"سيتوقّف CloudFront عن تخزين الملفات مؤقتًا.","why":"التخزين المؤقت يعتمد على سياسات الـ cache والترويسات، لا على الشروط في سياسة الـ bucket."},{"text":"سيُوقف Block Public Access تلقائيًا.","why":"إعدادات Block Public Access لا تتغيّر أبدًا من تلقاء نفسها حين تعدّل سياسة bucket."}],"answer":0},{"q":"<p>بعد تحويل الـ origin في الـ distribution إلى origin access control، أصبح كل ملف يعيد 403 من CloudFront. الـ bucket خاص وBlock Public Access مفعّل. ما السبب الأرجح؟</p>","options":[{"text":"يجب إيقاف Block Public Access كي يعمل OAC.","why":"صُمِّم OAC للـ buckets الخاصة مع تفعيل Block Public Access. إيقافه غير مطلوب ولا مرغوب."},{"text":"الشهادة ليست في us-east-1.","why":"مشكلة الشهادة تظهر كخطأ HTTPS أو خطأ إعداد للنطاق المخصّص، لا كـ 403 من S3 لكل ملف."},{"text":"لا تحتوي سياسة الـ bucket على عبارة تسمح لهذا الـ distribution باستدعاء <code dir=\"ltr\">s3:GetObject</code>.","why":"صحيح. يوقّع OAC الطلبات، لكن S3 ما زال يحتاج إلى سياسة تسمح للـ principal الخاص بـ CloudFront لهذا الـ distribution."},{"text":"رُفعت الكائنات بترويسة no-cache.","why":"ترويسات الـ cache تؤثّر في مدة الاحتفاظ بالنسخ، لا في سماح S3 بالقراءة."}],"answer":2},{"q":"<p>لماذا يضبط Lantern الـ reserved concurrency على دالة تأكيد الحضور؟</p>","options":[{"text":"لإبقاء نسخ دافئة تعمل كي لا يحدث تشغيل بارد (cold start).","why":"هذا هو الـ provisioned concurrency، وهو إعداد مختلف له رسومه الخاصة."},{"text":"لجعل الدالة تعمل أسرع تحت الحمل.","why":"يحدّ الـ reserved concurrency من عدد النسخ العاملة؛ ولا يغيّر سرعة كل نسخة."},{"text":"لخفض السعر لكل استدعاء.","why":"التسعير لكل طلب ولكل GB-second هو نفسه مع الـ reserved concurrency ومن دونه."},{"text":"لوضع سقف لعدد النسخ التي يمكن تشغيلها في آنٍ واحد، فتُحَدّ التكلفة وتُحمى الخدمات التالية أثناء سيل من الطلبات.","why":"صحيح. الطلبات التي تتجاوز السقف تُرفض (throttled) بدلًا من تضخيم الفاتورة والحمل دون حدود."}],"answer":3},{"q":"<p>يستخدم إنذار الأخطاء في Lantern الخيار <code dir=\"ltr\">--treat-missing-data notBreaching</code>. ماذا يعني ذلك في ليلة هادئة بلا استدعاءات؟</p>","options":[{"text":"ينطلق الإنذار، لأن البيانات المفقودة قد تخفي توقّفًا للخدمة.","why":"هذا ما يفعله <code dir=\"ltr\">breaching</code>. أما مع notBreaching فتُعَدّ البيانات المفقودة ضمن الحد."},{"text":"الفترات التي لا بيانات فيها تُعَدّ سليمة، فيبقى الإنذار في حالة OK.","why":"صحيح. الدالة التي لا تُستدعى لا تنشر نقاط بيانات Errors، ولا يجب أن يوقظ ذلك أحدًا."},{"text":"يُحذف الإنذار بعد فترة بلا بيانات.","why":"لا تُحذف الإنذارات تلقائيًا أبدًا. هذا الإعداد يحدّد فقط كيف تُعامَل البيانات المفقودة."},{"text":"يتحوّل الإنذار إلى عدّ حالات الـ throttling بدلًا من ذلك.","why":"يراقب الإنذار المقياس الوحيد الذي ضبطته؛ وهذا الإعداد لا يغيّر المقياس."}],"answer":1},{"q":"<p>تلاحظ مراجعة Well-Architected أن جدول تأكيدات الحضور بلا point-in-time recovery، فقد يمسحه سكربت سيئ دون أي طريق للعودة. إلى أيّ ركيزة تنتمي هذه الملاحظة؟</p>","options":[{"text":"الموثوقية (Reliability)","why":"صحيح. التعافي من الأعطال، بما فيها الخطأ البشري، هو جوهر ركيزة الموثوقية."},{"text":"كفاءة الأداء (Performance efficiency)","why":"النسخ الاحتياطية لا تغيّر مدى كفاءة الجدول في خدمة الطلبات."},{"text":"الاستدامة (Sustainability)","why":"الاستدامة تتعلّق بتقليل الأثر البيئي لحمل العمل، لا بالتعافي."},{"text":"تحسين التكلفة (Cost optimization)","why":"يضيف PITR تكلفة صغيرة. والخطر الذي يعالجه هو فقدان البيانات، لا إنفاق المال."}],"answer":0}]},"final":[{"q":"<p>شركة في البرازيل تخدم مستخدمين في أنحاء أمريكا الجنوبية، لكن عقدًا يشترط بقاء كل بيانات العملاء داخل الاتحاد الأوروبي. أيّ اختيار للـ Region يتبع ترتيب الأولويات الوارد في الدرس؟</p>","options":[{"text":"sa-east-1، لأنها الأقرب إلى المستخدمين.","why":"زمن الاستجابة مهم، لكنه يأتي بعد قواعد حماية البيانات الصارمة. وهذه الـ Region تخالف العقد."},{"text":"us-east-1، لأنها تحصل عادةً على الخدمات الجديدة أولًا.","why":"توافر الخدمات يأتي ثالثًا، وهذه الـ Region تخالف أيضًا شرط البيانات الأوروبي."},{"text":"أرخص Region في العالم أيًّا كانت.","why":"السعر آخر عامل للترجيح، وقد تكون أرخص Region خارج الاتحاد الأوروبي."},{"text":"Region أوروبية توفّر كل خدمة مطلوبة، مع قبول زمن الاستجابة الإضافي واستخدام CDN للمحتوى الثابت.","why":"صحيح. قواعد حماية البيانات مرشّح صارم؛ وداخل حدوده تقلّل زمن الاستجابة بأدوات مثل CloudFront."}],"answer":3},{"q":"<p>تحتاج الـ instance الخاصة بـ Lantern في RDS for PostgreSQL إلى تحديث أمني ثانوي للمحرّك. من يطبّقه ومتى؟</p>","options":[{"text":"تطبّقه AWS خلال نافذة الصيانة التي اختارها Lantern، أو يستطيع Lantern تطبيقه قبل ذلك.","why":"صحيح. تحديث المحرّك عمل AWS في RDS (مع تفعيل الترقيات التلقائية للإصدارات الثانوية، وهي مفعّلة افتراضيًا)، ويُجدوَل في نافذة تتحكّم فيها أنت."},{"text":"يجب أن يتصل Lantern بمضيف قاعدة البيانات عبر SSH ويثبّته.","why":"لا يمنح RDS أي وصول على مستوى نظام التشغيل إلى المضيف. التحديث جزء من الخدمة المُدارة."},{"text":"لا أحد؛ قواعد البيانات المُدارة لا تحتاج إلى تحديثات أبدًا.","why":"كل محرّك يحتاج إلى تحديثات. والفرق مع RDS هو من يثبّتها."},{"text":"تطبّقه AWS فورًا في أي وقت دون إشعار.","why":"الصيانة مجدوَلة، ويمكنك رؤية إجراءات الصيانة المعلّقة قبل حدوثها."}],"answer":0},{"q":"<p>في الـ shell لديك المتغيّر <code dir=\"ltr\">AWS_PROFILE=lantern-dev</code> مضبوط، وتشغّل <code dir=\"ltr\">aws s3 ls --profile lantern-prod</code>. أيّ حساب يستخدمه الأمر؟</p>","options":[{"text":"lantern-dev، لأن متغيّرات البيئة تنتصر دائمًا.","why":"خيارات سطر الأوامر لها الأسبقية على متغيّرات البيئة في AWS CLI."},{"text":"لا هذا ولا ذاك؛ يرفض الـ CLI الإعدادات المتعارضة.","why":"يحسم الـ CLI التعارض بالأسبقية بدلًا من الفشل."},{"text":"lantern-prod، لأن خيار سطر الأوامر يتجاوز متغيّر البيئة.","why":"صحيح. خيارات سطر الأوامر في أعلى ترتيب الأسبقية في الـ CLI، ولهذا يكون <code dir=\"ltr\">--profile</code> الصريح الأكثر أمانًا في السكربتات."},{"text":"أيّ profile اسمه <code dir=\"ltr\">default</code> في <code dir=\"ltr\">~/.aws/config</code>.","why":"لا يُستخدم الـ profile الافتراضي إلا حين لا يسمّي الخيار ولا متغيّر البيئة أيّ profile."}],"answer":2},{"q":"<p>تسمح سياسة مجموعة Sam بـ <code dir=\"ltr\">s3:GetObject</code> على <code dir=\"ltr\">arn:aws:s3:::lantern-posters/*</code>. وترفض سياسة الـ bucket كل إجراءات S3 حين يكون <code dir=\"ltr\">aws:SecureTransport</code> بقيمة false. يطلب Sam ملصقًا عبر رابط HTTP عادي. ماذا يحدث؟</p>","options":[{"text":"ينجح، لأن السماح القائم على الهوية مطابق.","why":"السماح مطابق فعلًا، لكن الرفض الصريح في أي سياسة منطبقة يتجاوزه."},{"text":"يُرفض، لأن الطلب لم يستخدم TLS فينطبق الرفض الصريح في سياسة الـ bucket.","why":"صحيح. قيمة SecureTransport هي false في HTTP العادي، فيطابق الـ Deny، والرفض الصريح ينتصر دائمًا."},{"text":"ينجح، لأن سياسات الـ buckets لا تنطبق إلا على المستخدمين المجهولين.","why":"تنطبق سياسات الـ buckets على كل principal تطابقه، بما في ذلك المستخدمون في الحساب نفسه."},{"text":"يُرفض، لأن Sam لا يملك <code dir=\"ltr\">s3:ListBucket</code>.","why":"تنزيل مفتاح معروف لا يحتاج إلى ListBucket. حاجز TLS هو ما يحجب هذا الطلب."}],"answer":1},{"q":"<p>دالة التقارير في Lantern تقرأ فقط جدول DynamoDB المسمّى <code dir=\"ltr\">lantern-events-archive</code> في eu-west-1. أيّ عبارة سياسة تتبع أقل الصلاحيات؟</p>","options":[{"text":"<code dir=\"ltr\">dynamodb:*</code> على <code dir=\"ltr\">*</code>","why":"هذه تسمح بكل إجراء في DynamoDB على كل جدول، بما في ذلك حذفها."},{"text":"<code dir=\"ltr\">dynamodb:GetItem</code> و<code dir=\"ltr\">dynamodb:Query</code> و<code dir=\"ltr\">dynamodb:Scan</code> على <code dir=\"ltr\">*</code>","why":"الإجراءات للقراءة فقط، لكن الـ Resource يغطّي كل جدول في كل Region من الحساب."},{"text":"<code dir=\"ltr\">dynamodb:*</code> على ARN الجدول","why":"المورد صحيح، لكن الإجراءات تشمل الكتابة والحذف وتعديل الجدول، وهي أمور لا تفعلها الدالة أبدًا."},{"text":"<code dir=\"ltr\">dynamodb:GetItem</code> و<code dir=\"ltr\">dynamodb:Query</code> على <code dir=\"ltr\">arn:aws:dynamodb:eu-west-1:111122223333:table/lantern-events-archive</code>","why":"صحيح. إجراءات القراءة التي تستخدمها الدالة فقط، على ARN جدول واحد بالضبط."}],"answer":3},{"q":"<p>أيّ من موارد Lantern الخاملة التالية يظل يضيف إلى الفاتورة كل ساعة حتى حين لا تمرّ أي زيارات؟</p>","options":[{"text":"بوابة NAT تُركت في شبكة فرعية عامة بعد الترحيل.","why":"صحيح. تُحتسب بوابات NAT بالساعة سواء مرّت زيارات أم لا، إضافة إلى كل غيغابايت حين تمرّ."},{"text":"دالة Lambda لا يستدعيها أحد.","why":"تحاسب Lambda لكل طلب ولكل GB-second من وقت التشغيل، فوجود دالة خاملة لا يكلّف شيئًا."},{"text":"نقطة نهاية من نوع gateway لـ S3.","why":"نقاط النهاية من نوع gateway لـ S3 وDynamoDB لا تحمل أي رسوم بالساعة أو لمعالجة البيانات."},{"text":"role في IAM بلا سياسات مرفقة.","why":"لا رسوم على IAM إطلاقًا، أيًّا كانت الـ roles والسياسات التي تنشئها."}],"answer":0},{"q":"<p>الـ versioning مفعّل في الـ bucket الخاص بالملصقات، وشغّل أحدهم <code dir=\"ltr\">aws s3 rm s3://lantern-posters/posters/2026/festival.jpg</code>. كيف تستعيد الملصق؟</p>","options":[{"text":"لا يمكنك ذلك؛ يحذف <code dir=\"ltr\">rm</code> الكائنات نهائيًا.","why":"مع تفعيل الـ versioning، لا يضيف الحذف البسيط إلا علامة حذف؛ والنسخة السابقة ما زالت مخزّنة."},{"text":"استعده من S3 Glacier، حيث تذهب الكائنات المحذوفة.","why":"لا تُنقل الكائنات المحذوفة إلى فئة أخرى. إنها تبقى كنسخ غير حالية في الـ bucket نفسه."},{"text":"احذف علامة الحذف، أو انسخ النسخة السابقة لتعود النسخة الحالية.","why":"صحيح. إزالة علامة الحذف تجعل النسخة السابقة هي الحالية من جديد."},{"text":"اطلب من AWS Support استرجاعه.","why":"لا تستطيع AWS استعادة بيانات حذفتها أنت، ومع الـ versioning لا تحتاج إلى ذلك."}],"answer":2},{"q":"<p>يريد أمين الصندوق جدولًا شهريًا بالفعاليات الأكثر تأكيدًا للحضور، قابلًا للترشيح حسب المدينة والفئة، مع إضافة مرشّحات جديدة كلما طلب أحدهم. تأكيدات الحضور موجودة في DynamoDB. ما النهج الأكثر عملية؟</p>","options":[{"text":"امسح جدول تأكيدات الحضور كل شهر ورشّح في الكود.","why":"عمليات المسح تقرأ الجدول كله وتحتسبه في كل مرة، وكل مرشّح جديد يعني مزيدًا من الكود المخصّص."},{"text":"حمّل الأعداد الشهرية لتأكيدات الحضور إلى قاعدة بيانات RDS for PostgreSQL بجوار الفعاليات، وأجب عن الأسئلة بـ SQL.","why":"صحيح. الأسئلة المتنوّعة والمتغيّرة مع عمليات JOIN مع الفعاليات والمدن والفئات هي ما وُجدت قاعدة البيانات العلائقية من أجله."},{"text":"أضف global secondary index جديدًا في DynamoDB لكل مرشّح يبتكره أمين الصندوق.","why":"كل index يكلّف تخزينًا وعمليات كتابة، والتركيبات المخصّصة من المرشّحات تتجاوز تصميم المفاتيح بسرعة."},{"text":"انقل كل تأكيدات الحضور إلى S3 Express One Zone.","why":"Express One Zone تخزين كائنات سريع. لكنه لا ينفّذ استعلامات ولا عمليات تجميع."}],"answer":1},{"q":"<p>مجموعة أمان تسمح بـ TCP 443 الوارد من أي مكان، وأُزيلت كل قواعدها الصادرة. يرسل زائر طلب HTTPS إلى الـ instance. ماذا يحدث للاستجابة؟</p>","options":[{"text":"تُسقط، لأنه لا توجد قاعدة صادرة.","why":"هذا صحيح بالنسبة إلى network ACL عديمة الحالة. أما مجموعات الأمان فتتتبّع الاتصالات."},{"text":"تُرسَل فقط إذا كانت للـ network ACL الخاصة بالشبكة الفرعية قاعدة واردة للمنفذ 443 أيضًا.","why":"الـ network ACL مهمة أيضًا، لكن هذا السؤال عمّا تفعله مجموعة الأمان بالرد."},{"text":"تُرسَل فقط بعد أن تعيد AWS إضافة قاعدة صادرة افتراضية.","why":"لا تعيد AWS إضافة قواعد أزلتها. ولا حاجة إلى قاعدة صادرة للردود."},{"text":"تُرسَل، لأن مجموعات الأمان ذات حالة وتسمح بالردود على الزيارات الواردة المسموح بها.","why":"صحيح. القواعد الصادرة لا تتحكّم إلا في الاتصالات الجديدة التي تبدؤها الـ instance."}],"answer":3},{"q":"<p>بعد عملية نشر، رُفع ملف جديد ذو hash هو <code dir=\"ltr\">assets/index-9c2e1f.css</code> وحُدِّث <code dir=\"ltr\">index.html</code> بترويسة no-cache. أيّ مسار يحتاج إلى إبطال في CloudFront؟</p>","options":[{"text":"<code dir=\"ltr\">/index.html</code> فقط، إن كان CloudFront قد يحتفظ بنسخة قديمة منه؛ أما ملف CSS الجديد فلم يُخزَّن مؤقتًا قط.","why":"صحيح. اسم الملف الجديد لا يحمل شيئًا قديمًا لإبطاله، و<code dir=\"ltr\">index.html</code> قصير العمر يلتقط المرجع الجديد."},{"text":"<code dir=\"ltr\">/*</code>، احتياطًا في كل عملية نشر.","why":"إبطال كل شيء يُفرغ الـ cache ويرسل الموجة التالية من الزوّار إلى الـ origin دفعة واحدة."},{"text":"<code dir=\"ltr\">/assets/index-9c2e1f.css</code> فقط","why":"لم يُطلب ملف CSS الجديد قط، فلا يملك CloudFront نسخة قديمة منه لإزالتها."},{"text":"لا يمكن أبدًا إبطال أي شيء مع origins من S3.","why":"تعمل عمليات الإبطال مع أي نوع من الـ origins، بما في ذلك الـ buckets في S3."}],"answer":0},{"q":"<p>يجب أن يضع Lantern خدمة AWS WAF أمام الـ API الخاص بتأكيد الحضور لحجب الزيارات المسيئة عند الـ API نفسه. أيّ نوع من API Gateway يدعم ذلك مباشرة؟</p>","options":[{"text":"HTTP API","why":"تستغني الـ HTTP APIs عن عدة ميزات كي تبقى رخيصة، والتكامل المباشر مع AWS WAF واحد منها."},{"text":"Lambda function URL","why":"الـ function URL ميزة في Lambda، وليست نوعًا من API Gateway، ولا تكامل لها مع WAF."},{"text":"REST API","why":"صحيح. تدعم الـ REST APIs خدمة AWS WAF، إلى جانب API keys وخطط الاستخدام والتحقّق من الطلبات."},{"text":"WebSocket API","why":"تخدم الـ WebSocket APIs الاتصالات ثنائية الاتجاه، وليست النوع الذي يدعم WAF لهذا الاستخدام."}],"answer":2},{"q":"<p>تضاعفت فاتورة Lantern الشهرية. أيّ خطوة أولى تُظهر من أين جاءت الزيادة؟</p>","options":[{"text":"احذف أحدث الموارد حتى ينخفض التوقّع.","why":"الحذف دون دليل قد يزيل شيئًا مهمًا وقد لا يمسّ السبب الحقيقي."},{"text":"افتح AWS Cost Explorer وجمّع التكاليف حسب الخدمة وحسب الوسم <code dir=\"ltr\">project</code>، مقارنًا هذا الشهر بالشهر السابق.","why":"صحيح. يُظهر Cost Explorer أيّ خدمة وأيّ مشروع موسوم نما، وهذا يشير مباشرة إلى السبب."},{"text":"اخفض حد AWS Budgets كي ينطلق التنبيه مبكرًا.","why":"خفض الحد يجعل الرسائل تصل أبكر، لكنه لا يفسّر ما الذي يكلّف أكثر."},{"text":"ارفع الـ reserved concurrency على كل دالة Lambda.","why":"هذا سيتيح للدوال أن تتوسّع أكثر وقد يرفع التكاليف. ولا يجيب عن أي شيء يخص الفاتورة."}],"answer":1}],"glossary":[{"id":"region","term":"Region","definition":"منطقة جغرافية منفصلة تشغّل فيها AWS نسختها الخاصة من معظم الخدمات، مثل eu-west-1 في أيرلندا. تبقى بياناتك في الـ Region التي تختارها ما لم تنقلها أو تنسخها.","lesson":"l-aws-1-2"},{"id":"availability-zone","term":"منطقة التوافر (Availability Zone, AZ)","definition":"مركز بيانات مستقل أو أكثر داخل Region، بكهرباء وشبكات مستقلة. تشغيل حمل العمل في منطقتي توافر أو أكثر يتيح له النجاة من خسارة إحداها.","lesson":"l-aws-1-2"},{"id":"edge-location","term":"موقع الحافة (edge location)","definition":"واحد من مواقع AWS الصغيرة الكثيرة القريبة من المستخدمين، يخزّن فيه Amazon CloudFront المحتوى مؤقتًا ويقدّمه، ويجيب فيه Amazon Route 53 عن استعلامات DNS.","lesson":"l-aws-1-2"},{"id":"shared-responsibility","term":"نموذج المسؤولية المشتركة (shared responsibility model)","definition":"تقسيم لمهام الأمان تؤمّن فيه AWS السحابة نفسها، كالعتاد والمنشآت وبرمجيات الخدمات، بينما يؤمّن العملاء بياناتهم والوصول والإعدادات والكود.","lesson":"l-aws-1-3"},{"id":"root-user","term":"مستخدم الجذر (root user)","definition":"الهوية التي تُنشأ ببريد التسجيل في حساب AWS. يستطيع فعل أي شيء، بما في ذلك إغلاق الحساب، لذا يحصل على MFA قوي، ولا مفاتيح وصول، ولا يُستخدم إلا نادرًا.","lesson":"l-aws-1-3"},{"id":"aws-budgets","term":"AWS Budgets","definition":"خدمة تتتبّع الإنفاق الفعلي والمتوقّع مقابل مبلغ تحدّده، وترسل تنبيهات عند تجاوز الحدود. إنها تحذّرك لكنها لا توقف الإنفاق من تلقاء نفسها.","lesson":"l-aws-1-3"},{"id":"aws-cli","term":"AWS CLI v2","definition":"أداة سطر الأوامر التي تستدعي الـ APIs نفسها التي يستدعيها الـ console. تتبع الأوامر النمط aws <service> <operation>، مع خيارات عامة مثل --profile و–region و–query و–output.","lesson":"l-aws-1-4"},{"id":"get-caller-identity","term":"aws sts get-caller-identity","definition":"أمر في الـ CLI يعيد معرّف الحساب والـ ARN للهوية التي تمثّلها بيانات اعتمادك. لا يحتاج إلى أي صلاحيات، لذا فهو الفحص القياسي قبل الأوامر المدمّرة.","lesson":"l-aws-1-4"},{"id":"arn","term":"ARN (Amazon Resource Name)","definition":"المعرّف الفريد لمورد في AWS، بالشكل arn:partition:service:region:account-id:resource. تستخدم السياسات الـ ARNs لتحديد الموارد التي تغطّيها العبارة بدقّة.","lesson":"l-aws-2-1"},{"id":"iam-role","term":"IAM role","definition":"هوية لها صلاحيات لكن بلا بيانات اعتماد طويلة الأمد. يتقمّصها principal موثوق فيتلقّى من AWS STS بيانات اعتماد مؤقتة تنتهي صلاحيتها بعد الجلسة.","lesson":"l-aws-2-1"},{"id":"explicit-deny","term":"الرفض الصريح (explicit deny)","definition":"عبارة Deny في أي سياسة منطبقة تطابق الطلب. وهي تتجاوز أي Allow دائمًا، ما يجعلها أساس حواجز الحماية الموثوقة.","lesson":"l-aws-2-1"},{"id":"least-privilege","term":"أقل الصلاحيات (least privilege)","definition":"منح الهوية الإجراءات المحدّدة فقط على الموارد المحدّدة التي تحتاجها مهمتها، وعدم توسيع الصلاحيات إلا حين يُظهر خطأ AccessDenied حقيقي أن شيئًا ما ناقص.","lesson":"l-aws-2-2"},{"id":"condition-key","term":"مفتاح الشرط (condition key)","definition":"قيمة من سياق الطلب، مثل aws:SecureTransport أو aws:MultiFactorAuthPresent، تختبرها كتلة Condition في السياسة لتقرّر هل تنطبق العبارة.","lesson":"l-aws-2-2"},{"id":"identity-center","term":"IAM Identity Center","definition":"خدمة AWS التي يسجّل فيها الأشخاص الدخول مرة واحدة، مع MFA، ويحصلون على وصول قصير الأمد إلى الحسابات وحزم الصلاحيات المسندة إليهم، دون مستخدمي IAM أو مفاتيح وصول.","lesson":"l-aws-2-3"},{"id":"trust-policy","term":"سياسة الثقة (trust policy)","definition":"السياسة القائمة على المورد في الـ role الخاص بـ IAM، والتي تسمّي الـ principals الذين يحق لهم تقمّص الـ role، مثل lambda.amazonaws.com.","lesson":"l-aws-2-3"},{"id":"execution-role","term":"Lambda execution role","definition":"الـ role في IAM الذي تتقمّصه دالة Lambda حين تعمل. تلتقط حزم AWS SDK بيانات اعتماده المؤقتة تلقائيًا، فلا يحتوي كود الدالة على مفاتيح وصول أبدًا.","lesson":"l-aws-2-3"},{"id":"instance-type","term":"نوع الـ instance (instance type)","definition":"الاسم الذي يحدّد عتاد الـ instance في EC2، مثل m7g.large: العائلة m، والجيل 7، ومعالج Graviton g، والحجم large. كل خطوة في الحجم تضاعف الموارد تقريبًا.","lesson":"l-aws-3-1"},{"id":"spot-instance","term":"Spot Instance","definition":"سعة فائضة في EC2 تُعرض بخصم كبير، ويمكن أن تسترجعها AWS بإنذار مدته دقيقتان. تناسب العمل الدفعي القابل لإعادة التشغيل، لا قواعد البيانات ولا الخوادم التي يتعامل معها المستخدمون.","lesson":"l-aws-3-1"},{"id":"gb-second","term":"GB-second","definition":"وحدة احتساب الحوسبة في Lambda: الذاكرة المخصّصة بالغيغابايت مضروبة في وقت التشغيل بالثواني، مقيسًا بالمللي ثانية.","lesson":"l-aws-3-1"},{"id":"storage-class","term":"فئة التخزين في S3 (S3 storage class)","definition":"إعداد لكل كائن، مثل S3 Standard أو S3 Glacier Deep Archive، يقايض بين سعر التخزين وتكلفة الاسترجاع ووقته والحد الأدنى لمدة التخزين.","lesson":"l-aws-3-2"},{"id":"block-public-access","term":"S3 Block Public Access","definition":"إعدادات على مستوى الـ bucket والحساب، مفعّلة افتراضيًا في الـ buckets الجديدة، تتجاوز أي سياسة أو ACL قد تجعل البيانات عامة.","lesson":"l-aws-3-2"},{"id":"partition-key","term":"مفتاح التقسيم (partition key)","definition":"سمة المفتاح في DynamoDB التي تحدّد مكان تخزين العنصر. يجب أن يسمّي Query قيمة واحدة لمفتاح التقسيم، ولهذا تُصمَّم المفاتيح حول الأسئلة التي تطرحها.","lesson":"l-aws-3-3"},{"id":"multi-az","term":"نشر Multi-AZ (Multi-AZ deployment)","definition":"إعداد في Amazon RDS فيه قاعدة بيانات standby متزامنة في منطقة توافر ثانية، تتولّى العمل تلقائيًا إذا تعطّلت منطقة توافر النسخة الرئيسية.","lesson":"l-aws-3-3"},{"id":"public-subnet","term":"الشبكة الفرعية العامة (public subnet)","definition":"شبكة فرعية في VPC يرسل جدول التوجيه الخاص بها 0.0.0.0/0 إلى بوابة إنترنت. أما الشبكات الفرعية الخاصة فليس فيها مسار كهذا، فلا يستطيع الإنترنت بدء اتصالات بها.","lesson":"l-aws-3-4"},{"id":"security-group","term":"مجموعة الأمان (security group)","definition":"جدار حماية ذو حالة على شكل قائمة سماح، يُرفق بواجهة الشبكة الخاصة بمورد ما. يُسمح تلقائيًا بالردود على الزيارات المسموح بها، ويمكن أن تسمّي القواعد مجموعة أمان أخرى كمصدر.","lesson":"l-aws-3-4"},{"id":"network-acl","term":"Network ACL","definition":"قائمة عديمة الحالة من قواعد السماح والرفض المرقّمة، تُطبَّق عند حدود الشبكة الفرعية. ولأنها عديمة الحالة، تحتاج زيارات الرد إلى قواعد خاصة بها.","lesson":"l-aws-3-4"},{"id":"oac","term":"Origin access control (OAC)","definition":"ميزة في CloudFront توقّع الطلبات إلى bucket خاص في S3، كي تستطيع سياسة الـ bucket السماح لذلك الـ distribution وحده بالقراءة، فيبقى الـ bucket مغلقًا أمام أي أحد آخر.","lesson":"l-aws-4-1"},{"id":"conditional-write","term":"الكتابة المشروطة (conditional write)","definition":"عملية كتابة في DynamoDB مع ConditionExpression، مثل attribute_not_exists(email)، لا تنجح إلا إذا تحقّق الشرط، ويُفحص الشرط بشكل ذرّي لمنع التكرار.","lesson":"l-aws-4-2"},{"id":"cloudwatch-alarm","term":"إنذار CloudWatch (CloudWatch alarm)","definition":"قاعدة تراقب مقياسًا واحدًا مقابل حدّ معيّن على مدى فترة، وتغيّر حالتها عند تجاوزه، وعادةً ترسل إشعارًا إلى topic في Amazon SNS ينبّه الأشخاص.","lesson":"l-aws-4-3"},{"id":"well-architected","term":"AWS Well-Architected Framework","definition":"مجموعة أسئلة التصميم من AWS، مجمّعة في ست ركائز هي التميّز التشغيلي والأمان والموثوقية وكفاءة الأداء وتحسين التكلفة والاستدامة.","lesson":"l-aws-4-3"}]}