{"id":"l-aws-1-4","courseId":"aws-cloud-foundations","lang":"ar","kind":"lesson","summary":"ثبّت AWS CLI v2، وسجّل الدخول ببيانات اعتماد قصيرة الأمد عبر aws login، وتحقّق من هويتك بالأمر aws sts get-caller-identity، وشكّل المخرجات باستخدام --query و–output.","html":"<p>لديك حساب آمن وهوية مدير. النقر في أرجاء الـ console يكفي لنظرة أولى، لكن القائمين على Lantern يريدون شيئًا يستطيعون تكراره، ولصقه في دليل تشغيل (runbook)، ومراجعته في pull request. كل زر في الـ console يستدعي API من AWS، و<strong>AWS CLI v2</strong> يتيح لك استدعاء الـ APIs نفسها من الطرفية.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">الـ console أم الـ CLI؟</h2>\n<p>استخدم <strong>الـ console</strong> للاستكشاف، وقراءة لوحات المعلومات، والمهام التي تنفّذها مرة واحدة وتريد رؤيتها بصريًا، مثل النظرة الأولى على فاتورة. واستخدم <strong>الـ CLI</strong> لكل ما ستفعله مرتين، ولكل ما يجب أن يراجعه زميل، ولكل ما تريد التراجع عنه بدقّة. الأمر في سكربت توثيق؛ أما سلسلة النقرات فمجرد ذكرى.</p>\n<p>إذا لم تستطع تثبيت أي شيء، فإن <strong>AWS CloudShell</strong> يمنحك طرفية في المتصفّح داخل الـ console، فيها الـ CLI مثبّتًا ومسجّل الدخول بهوية الـ console الخاصة بك.</p>\n<h2 id=\"sec-2\" tabindex=\"-1\">التثبيت والتحقّق من الإصدار</h2>\n<p>ثبّت من الحزمة الرسمية لنظامك. على Linux x86-64:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">Terminal</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:#953800;--shiki-dark:#FFA657\">curl</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> \"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip\"</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> -o</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> \"awscliv2.zip\"</span></span>\n<span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">unzip</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> awscliv2.zip</span></span>\n<span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">sudo</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> ./aws/install</span></span>\n<span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --version</span></span></code></pre></div>\n<p>على macOS تنشر AWS مُثبِّتًا بصيغة <code dir=\"ltr\">.pkg</code>، وعلى Windows بصيغة <code dir=\"ltr\">.msi</code>. أيًّا كان ما تستخدمه، يجب أن يطبع <code dir=\"ltr\">aws --version</code> العبارة <code dir=\"ltr\">aws-cli/2.</code> متبوعة برقم الإصدار. تحتاج إلى <strong>الإصدار 2.32.0 أو أحدث</strong> لأمر تسجيل الدخول أدناه؛ وإذا كان لديك تثبيت قديم من الإصدار 1، فأزله أولًا، لأن الإصدارين يتصرّفان بشكل مختلف.</p>\n<h2 id=\"sec-3\" tabindex=\"-1\">سجّل الدخول دون مفاتيح وصول</h2>\n<p>كانت الطريقة القديمة هي <code dir=\"ltr\">aws configure</code>، حيث تلصق معرّف مفتاح وصول طويل الأمد وسرّه في <code dir=\"ltr\">~/.aws/credentials</code>. هذه المفاتيح لا تنتهي صلاحيتها أبدًا، وتتسرّب عبر النسخ الاحتياطية ولقطات الشاشة والـ commits في Git. أما اليوم فتسجّل الدخول بهوية الـ console الخاصة بك بدلًا من ذلك:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"1\"><div class=\"code-head\"><span class=\"code-title\">Terminal</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:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> login</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --profile</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> lantern-admin</span></span></code></pre></div>\n<p>يسألك الـ CLI عن Region افتراضية في المرة الأولى (أدخل الـ Region الخاصة بـ Lantern)، ثم يفتح متصفّحك، وبعد أن تسجّل الدخول بكلمة المرور والـ MFA، يخزّن <strong>بيانات اعتماد قصيرة الأمد</strong> تتجدّد تلقائيًا لمدة تصل إلى 12 ساعة. يُضاف إلى ملف <code dir=\"ltr\">~/.aws/config</code> لديك profile كهذا، ولاحظ أنه لا يحتوي على أي سرّ:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"ini\" data-index=\"2\"><div class=\"code-head\"><span class=\"code-title\">~/.aws/config</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:#953800;--shiki-dark:#FFA657\">[profile lantern-admin]</span></span>\n<span class=\"line\"><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">login_session</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> = arn:aws:iam::111122223333:user/amara</span></span>\n<span class=\"line\"><span style=\"color:#CF222E;--shiki-dark:#FF7B72\">region</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\"> = eu-west-1</span></span></code></pre></div>\n<p>يحتاج مستخدم IAM إلى صلاحية لاستخدام هذه الطريقة؛ والسياسة <code dir=\"ltr\">AdministratorAccess</code> من الدرس السابق تتضمّنها بالفعل، أما للمستخدمين ذوي الصلاحيات الأضيق فتوفّر AWS السياسة المُدارة <code dir=\"ltr\">SignInLocalDevelopmentAccess</code>. والفرق التي تستخدم IAM Identity Center تسجّل الدخول بدلًا من ذلك عبر <code dir=\"ltr\">aws configure sso</code> و<code dir=\"ltr\">aws sso login</code>، وستتعرّف إليهما في القسم الثاني. وعندما تنتهي، يحذف <code dir=\"ltr\">aws logout --profile lantern-admin</code> بيانات الاعتماد المخزّنة.</p>\n<h2 id=\"sec-4\" tabindex=\"-1\">من أنا؟</h2>\n<p>أكثر الأوامر فائدةً في AWS هو أيضًا أكثرها مللًا:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"3\"><div class=\"code-head\"><span class=\"code-title\">Terminal</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:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> sts</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> get-caller-identity</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --profile</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> lantern-admin</span></span></code></pre></div>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"json\" data-index=\"4\"><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\">  \"UserId\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"AIDAEXAMPLEUSERID1234\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Account\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"111122223333\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">,</span></span>\n<span class=\"line\"><span style=\"color:#116329;--shiki-dark:#7EE787\">  \"Arn\"</span><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">: </span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\">\"arn:aws:iam::111122223333:user/amara\"</span></span>\n<span class=\"line\"><span style=\"color:#1F2328;--shiki-dark:#E6EDF3\">}</span></span></code></pre></div>\n<p>لا يحتاج إلى أي صلاحيات ولا يغيّر شيئًا، لذا تستطيع حتى هوية جديدة تمامًا بلا سياسات مرفقة أن تشغّله. إذا فشل، فالمشكلة في بيانات اعتمادك لا في صلاحياتك: جلسة منتهية، أو اسم profile خاطئ، أو لا اتصال بالشبكة. إنه يخبرك بـ <strong>الحساب</strong> و<strong>الهوية</strong> اللذين سيستخدمهما كل أمر لاحق. شغّله قبل أي شيء مدمّر، وفي السكربتات تحقّق من أن <code dir=\"ltr\">Account</code> هو الحساب الذي تتوقّعه قبل المتابعة.</p>\n<aside class=\"callout callout-mistake\" role=\"note\"><p class=\"callout-title\"><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\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg><span><span class=\"callout-kind\">خطأ شائع</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>التشغيل على الحساب الخطأ</span></p>\n<p>مع وجود عدة profiles، من السهل أن تشغّل سكربت تنظيف في الإنتاج وأنت تقصد حساب الاختبار. يختار الـ CLI بيانات الاعتماد من <code dir=\"ltr\">--profile</code>، ثم من متغيّر البيئة <code dir=\"ltr\">AWS_PROFILE</code>، ثم من <code dir=\"ltr\">default</code>. تجنّب أن يشير profile باسم <code dir=\"ltr\">default</code> إلى الإنتاج، وضع فحص <code dir=\"ltr\">get-caller-identity</code> في أعلى كل سكربت.</p>\n</aside>\n<h2 id=\"sec-5\" tabindex=\"-1\">تشكيل المخرجات</h2>\n<p>الاستجابات بصيغة JSON افتراضيًا، وكثيرًا ما تكون طويلة. يساعدك خياران عامّان:</p>\n<ul>\n<li><code dir=\"ltr\">--output</code> يختار التنسيق: <code dir=\"ltr\">json</code> أو <code dir=\"ltr\">text</code> أو <code dir=\"ltr\">table</code> أو <code dir=\"ltr\">yaml</code>.</li>\n<li><code dir=\"ltr\">--query</code> يرشّح الاستجابة بتعبير JMESPath <strong>على جهازك</strong> قبل الطباعة.</li>\n</ul>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"5\"><div class=\"code-head\"><span class=\"code-title\">Terminal</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:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> s3api</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> list-buckets</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --profile</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> lantern-admin</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --query</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> \"Buckets[].Name\"</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --output</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> text</span></span></code></pre></div>\n<p>يطبع هذا أسماء الـ buckets فقط، مفصولة بمسافات جدولة، وجاهزة لحلقة تكرار في الـ shell. ولأن <code dir=\"ltr\">--query</code> يُنفَّذ محليًا، فهو لا يقلّل ما تعيده AWS ولا تكلفة الاستدعاء؛ بل يقلّل فقط ما عليك قراءته.</p>\n<aside class=\"callout callout-tip\" role=\"note\"><p class=\"callout-title\"><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\"><path d=\"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5\"/><path d=\"M9 18h6\"/><path d=\"M10 22h4\"/></svg><span><span class=\"callout-kind\">نصيحة</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>إعدادان صغيران يوفّران عليك الإحباط</span></p>\n<p>يمرّر الـ CLI المخرجات الطويلة عبر أداة تصفّح صفحات (pager). في السكربتات، أضف <code dir=\"ltr\">--no-cli-pager</code> أو اضبط <code dir=\"ltr\">AWS_PAGER=&quot;&quot;</code> كي لا تنتظر الأوامر ضغطة مفتاح أبدًا. ويعرض <code dir=\"ltr\">aws s3 help</code> (أو <code dir=\"ltr\">aws s3 cp help</code>) المرجع الكامل لأي أمر دون اتصال.</p>\n</aside>\n<p>بهذا يكتمل القسم الأول: تعرف أين تشغّل AWS مواردك، ومن يؤمّن ماذا، وكيف تدير الحساب بأمان. يدخل القسم الثاني إلى أعماق IAM، النظام الذي يقرّر هل يُسمح بكل استدعاء من تلك الاستدعاءات الأخرى. (<code dir=\"ltr\">get-caller-identity</code> هو الاستثناء الوحيد: يعمل حتى لو منعته سياسة.)</p>\n","toc":[{"id":"sec-1","text":"الـ console أم الـ CLI؟","level":2},{"id":"sec-2","text":"التثبيت والتحقّق من الإصدار","level":2},{"id":"sec-3","text":"سجّل الدخول دون مفاتيح وصول","level":2},{"id":"sec-4","text":"من أنا؟","level":2},{"id":"sec-5","text":"تشكيل المخرجات","level":2}],"takeaways":["الـ console والـ CLI يستدعيان الـ APIs نفسها؛ استخدم الـ console للاستكشاف، والـ CLI لكل ما ستكرّره أو تراجعه.","يحوّل <code dir=\"ltr\">aws login</code> تسجيل دخولك في الـ console إلى بيانات اعتماد قصيرة الأمد للـ CLI تتجدّد تلقائيًا، فلا تبقى مفاتيح وصول طويلة الأمد على حاسوبك.","يعرض <code dir=\"ltr\">aws sts get-caller-identity</code> الحساب والهوية اللذين تعمل بهما أوامرك؛ شغّله قبل أي شيء مدمّر.","الـ profiles المسمّاة مع <code dir=\"ltr\">--profile</code> أو <code dir=\"ltr\">AWS_PROFILE</code> تُبقي العمل في الحسابات المختلفة منفصلًا.","يرشّح <code dir=\"ltr\">--query</code> استجابة JSON على جهازك، ويغيّر <code dir=\"ltr\">--output</code> تنسيقها؛ ولا يغيّر أيٌّ منهما ما تفعله AWS."],"further":[{"title":"Installing or updating to the latest version of the AWS CLI","url":"https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html"},{"title":"Login for AWS local development using console credentials","url":"https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html"},{"title":"Filtering output in the AWS CLI","url":"https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html"},{"title":"get-caller-identity (AWS CLI Command Reference)","url":"https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html"}],"quiz":[{"q":"<p>أنت على وشك حذف bucket في S3 من الطرفية، ولديك profiles لحساب اختبار ولحساب الإنتاج الخاص بـ Lantern. ما الذي يجب أن تشغّله أولًا؟</p>","options":[{"text":"<code dir=\"ltr\">aws s3 ls</code> لرؤية قائمة الـ buckets","why":"يسرد الـ buckets للهوية النشطة أيًّا كانت، لكنه لا يخبرك بأيّ حساب هي. وقد يكون لحسابين أسماء buckets متشابهة."},{"text":"<code dir=\"ltr\">aws configure</code> لإعادة إدخال بيانات اعتمادك","why":"إعادة إدخال بيانات الاعتماد تغيّر إعدادك بدلًا من التحقّق منه، وتكتب مفاتيح طويلة الأمد لا يُفترض أن تحتاجها."},{"text":"<code dir=\"ltr\">aws sts get-caller-identity</code> لمعرفة الحساب والهوية اللذين سيعمل بهما الأمر","why":"صحيح. يعيد معرّف الحساب والـ ARN للهوية المستخدمة، وهذا بالضبط ما تحتاج إلى التحقّق منه قبل أمر مدمّر."}],"answer":2},{"q":"<p>ما الميزة الأمنية الرئيسية لـ <code dir=\"ltr\">aws login</code> مقارنةً بلصق مفتاح وصول في <code dir=\"ltr\">aws configure</code>؟</p>","options":[{"text":"يمنحك صلاحيات أكثر مما يمنحه مفتاح الوصول.","why":"الصلاحيات تأتي من سياسات الهوية، لا من طريقة تسجيل الدخول. لا يمنح <code dir=\"ltr\">aws login</code> أي شيء إضافي."},{"text":"بيانات الاعتماد قصيرة الأمد وتتجدّد تلقائيًا، فلا يوجد سرّ طويل الأمد في ملف على حاسوبك.","why":"صحيح. مفتاح الوصول المسرّب يظل يعمل حتى يحذفه أحد. أما بيانات اعتماد تسجيل الدخول فتنتهي صلاحيتها خلال ساعات."},{"text":"يمنع أي أحد من قراءة ملف <code dir=\"ltr\">~/.aws/config</code> الخاص بك.","why":"ملف الإعداد ملف نصي عادي ويظل قابلًا للقراءة. الفائدة أنه لا يحتوي على سرّ طويل الأمد."},{"text":"يعمل دون اتصال بالإنترنت.","why":"كل استدعاء في AWS CLI يمرّ عبر الشبكة إلى API من AWS، وتسجيل الدخول يحتاج أيضًا إلى خطوات في المتصفّح."}],"answer":1},{"q":"<p>ماذا يطبع هذا الأمر؟</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">Terminal</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:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> ec2</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> describe-availability-zones</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --region</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> eu-west-1</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --query</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> \"AvailabilityZones[].ZoneName\"</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --output</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> text</span></span></code></pre></div>\n","options":[{"text":"أسماء مناطق التوافر في سطر واحد تفصل بينها مسافات جدولة (tabs)، مثل <code dir=\"ltr\">eu-west-1a  eu-west-1b  eu-west-1c</code>","why":"صحيح. يُبقي <code dir=\"ltr\">--query</code> قيم ZoneName فقط، ويطبعها <code dir=\"ltr\">--output text</code> مفصولة بمسافات جدولة دون أقواس JSON."},{"text":"استجابة JSON كاملة، لأن <code dir=\"ltr\">--query</code> لا يعمل إلا مع <code dir=\"ltr\">--output json</code>","why":"يعمل <code dir=\"ltr\">--query</code> مع كل تنسيقات المخرجات. وهو يُنفَّذ على جهازك قبل التنسيق."},{"text":"خطأ، لأن الاستعلام يجب أن يبدأ بعلامة الدولار","why":"تستخدم AWS CLI لغة JMESPath، التي تبدأ من المفاتيح العليا في الاستجابة، دون علامة دولار."}],"answer":0}],"exercise":{"kind":"fill","language":"bash","template":"# 1. Sign in with your console identity (short-term credentials)\naws {{0}} --profile lantern-admin\n\n# 2. Confirm which account and identity you are using\naws {{1}} get-caller-identity --profile lantern-admin\n\n# 3. List bucket names only, as plain text, in Lantern's Region\naws s3api list-buckets --profile lantern-admin \\\n  --{{2}} eu-west-1 \\\n  --query \"Buckets[].Name\" --output {{3}}","blanks":[{"answers":["login"]},{"answers":["sts"]},{"answers":["region"]},{"answers":["text"]}],"title":"أول ثلاثة أوامر لك في الـ CLI","prompt":"<p>أكمل روتين بداية اليوم الخاص بـ Lantern باستخدام AWS CLI v2. الخطوة 1 تسجّل الدخول دون مفاتيح وصول، والخطوة 2 تثبت في أيّ حساب أنت، والخطوة 3 تسرد أسماء الـ buckets كنص عادي مفصول بمسافات جدولة في الـ Region الخاصة بـ Lantern (<code dir=\"ltr\">eu-west-1</code>).</p>\n","hints":["أمر تسجيل الدخول كلمة واحدة، ويحتاج إلى الـ CLI بالإصدار 2.32.0 أو أحدث.","ينتمي <code dir=\"ltr\">get-caller-identity</code> إلى خدمة Security Token Service.","الخيار العام الذي يتجاوز الـ Region المحفوظة في الـ profile هو <code dir=\"ltr\">--region</code>؛ وتنسيق المخرجات النصي العادي هو الذي يناسب حلقات التكرار في الـ shell."],"explanation":"<p>ينشئ <code dir=\"ltr\">aws login</code> بيانات اعتماد قصيرة الأمد من تسجيل دخولك في الـ console، فلا يُخزَّن أي مفتاح وصول سرّي. ويعيد <code dir=\"ltr\">aws sts get-caller-identity</code> معرّف الحساب والـ ARN للهوية المستخدمة، وهو ما تتحقّق منه قبل فعل أي شيء يغيّر الموارد. ويتجاوز <code dir=\"ltr\">--region</code> الـ Region المحفوظة في الـ profile لأمر واحد، ويطبع <code dir=\"ltr\">--output text</code> القيم التي اختارها <code dir=\"ltr\">--query</code> دون أقواس JSON، مع مسافة جدولة واحدة بين كل اسم وآخر.</p>\n","checkLabels":{}},"words":647,"readMinutes":4}