AWS عمليًا: من الحساب الأول إلى بنية جاهزة للشهادة
خروج

الدرس 1 من 12 · الأسس

البداية مع AWS — الحساب، الواجهة، المناطق، العرض المجاني وAWS CLI

40 د Debian 12

الهدف

أن تفتح حساب AWS بطريقة سليمة: تؤمّنه منذ الساعة الأولى، وتختار منطقة مناسبة لمستخدمين في المغرب، وتفهم ما يغطيه العرض المجاني، ثم تثبّت AWS CLI وتضبطه للعمل بسطر الأوامر مع عدة ملفات شخصية (profiles).

أهم النقاط

  • حساب AWS حاوية للموارد وللفوترة، يُعرَّف برقم من 12 رقمًا. يصبح البريد الإلكتروني المستعمل في التسجيل هو المستخدم الجذر (root user)، صاحب الصلاحيات المطلقة.
  • يحصل المستخدم الجذر فورًا على MFA (المصادقة متعددة العوامل)، ولا يُستعمل أبدًا في العمل اليومي: نعمل بهويات IAM أو IAM Identity Center.
  • تنقسم AWS إلى مناطق (regions) (eu-south-2 إسبانيا، eu-west-3 باريس…) ونطاقات توفّر (availability zones) (eu-south-2a، b، c). أغلب الموارد تنتمي إلى منطقة واحدة.
  • العرض المجاني (free tier) له حدود دقيقة وقد تغيّر سنة 2025: أول شيء يجب إنشاؤه هو ميزانية مع تنبيه.
  • يقرأ AWS CLI v2 إعداداته من ~/.aws/config و~/.aws/credentials، وهي منظّمة في ملفات شخصية (profiles).

1. حساب AWS

لفتح حساب، تحتاج إلى بريد إلكتروني ورقم هاتف وبطاقة بنكية تقبل الأداءات الدولية بالدولار (البطاقة المغربية الدولية تكفي عمومًا؛ تحقّق مع بنكك من سقف الأداء في الخارج).

ممارسات جيدة عند التسجيل:

الاختيار التوصية لماذا
البريد الإلكتروني قائمة بريدية للشركة (aws-racine@startup.ma) حتى لا تعتمد على صندوق بريد شخص واحد قد يغادر
اسم الحساب واضح: startup-prod، startup-formation ستكون لديك سريعًا عدة حسابات
النوع «مهني» (professional) بالنسبة للشركة معلومات فوترة صحيحة

المستخدم الجذر (root user)

يستطيع المستخدم الجذر فعل كل شيء، بما في ذلك إغلاق الحساب أو تغيير وسيلة الأداء، ولا توجد أي سياسة (policy) تستطيع تقييده داخل الحساب. لذلك:

  1. فعّل MFA (ويُفضَّل مفتاح أمان FIDO2)؛
  2. لا تنشئ له أي مفتاح وصول (access key)؛
  3. أنشئ هوية إدارة للعمل اليومي (الدرس 1.2)؛
  4. لا تستعمل الجذر إلا للمهام النادرة التي تتطلّبه (بعض إعدادات الفوترة، إغلاق الحساب، الاسترجاع).

حساب واحد أم عدة حسابات؟

غالبًا ما تبدأ الشركة الناشئة بحساب واحد. وبمجرد وجود بيئة إنتاج، نفصل الحسابات باستعمال AWS Organizations: حساب للتسيير (الفوترة فقط)، وحساب للإنتاج، وحساب لما قبل الإنتاج، وحساب للأمن (سجلات CloudTrail، التدقيق):

Organisation « startup »
├── compte gestion (facturation, rien d'autre)
├── compte production
├── compte préproduction
└── compte sécurité (journaux CloudTrail, audit)

الحدود بين الحسابات هي أقوى عزل في AWS: خطأ في بيئة ما قبل الإنتاج لا يمكن أن يمسّ الإنتاج.

2. واجهة الإدارة (console)

تتيح واجهة الويب (console.aws.amazon.com) القيام بكل شيء بالفأرة. معالم مهمة:

  • في الأعلى على اليمين، محدِّد المنطقة: السبب رقم 1 لعبارة «اختفت آلاتي!» (هي ببساطة في منطقة أخرى)؛
  • شريط البحث عن الخدمات؛
  • قائمة الحساب: رقم الحساب، الفوترة، بيانات الاعتماد الأمنية؛
  • CloudShell: طرفية (terminal) داخل المتصفح فيها AWS CLI مضبوط مسبقًا بصلاحياتك. عملي للبداية، دون تثبيت أي شيء.

بعض الخدمات عالمية (IAM، Route 53، CloudFront، Organizations): لا تأثير لمحدِّد المنطقة عليها.

3. المناطق ونطاقات التوفّر

المناطق القريبة من المغرب

المنطقة الرمز ملاحظة
أوروبا (إسبانيا) eu-south-2 الأقرب جغرافيًا؛ منطقة «يجب تفعيلها» (opt-in)
أوروبا (باريس) eu-west-3 مفعّلة افتراضيًا، كتالوج خدمات واسع
أوروبا (إيرلندا) eu-west-1 من أقدم المناطق، فيها تقريبًا كل الخدمات، وغالبًا أرخص
أوروبا (ميلانو) eu-south-1 يجب تفعيلها
إفريقيا (كيب تاون) af-south-1 المنطقة الوحيدة في إفريقيا عند تحرير الدرس، بعيدة عن المغرب

عند تحرير هذا الدرس، لا تملك AWS منطقة في المغرب. قائمة المناطق والخدمات المتوفرة في كل منطقة تتغيّر: راجع الصفحة الرسمية «Global Infrastructure» قبل أي مشروع.

المناطق التي يجب تفعيلها

المناطق التي فُتحت بعد مارس 2019 (ومنها eu-south-2 وeu-south-1 وaf-south-1) تكون معطّلة افتراضيًا. يجب تفعيلها من إعدادات الحساب (قائمة الحساب ← «Account» ← «AWS Regions»)، وقد يستغرق ذلك بضع دقائق.

# عرض حالة مناطق الحساب (مفعّلة أم لا)
aws account list-regions --query 'Regions[].[RegionName,RegionOptStatus]' --output table

النطاقات

لكل منطقة ثلاثة نطاقات توفّر على الأقل. اسمها (eu-south-2a) تسمية خاصة بحسابك: النطاق «a» في حساب آخر ليس بالضرورة مركز البيانات نفسه. وللحديث عن النطاق نفسه بين حسابين، نستعمل معرّف النطاق (zone ID) (من الشكل <code-court>-az1)، الذي يعرضه الأمر التالي.

aws ec2 describe-availability-zones --region eu-south-2 \
  --query 'AvailabilityZones[].[ZoneName,ZoneId,State]' --output table

اختيار المنطقة: شركة ناشئة في الدار البيضاء

تطبيق توصيل لمحلات البقالة في الدار البيضاء والرباط:

المعيار إسبانيا (eu-south-2) باريس (eu-west-3) إيرلندا (eu-west-1)
زمن الاستجابة نحو المغرب الأضعف ضعيف متوسط
الخدمات المتاحة كتالوج في توسّع، يجب التحقق خدمةً بخدمة واسع الأوسع
السعر يُقارَن بالحاسبة يُقارَن غالبًا الأدنى

الاختيار الشائع: منطقة رئيسية قريبة (إسبانيا أو باريس) بعد التحقق من توفّر كل الخدمات اللازمة فيها، ومنطقة ثانية لنسخ النسخ الاحتياطية. أما مسألة المعطيات الشخصية (القانون 09-08، CNDP) فيجب معالجتها قبل ذلك: انظر مسار «أساسيات السحابة»، الدرس 3.1.

4. العرض المجاني والفاتورة

العرض المجاني (free tier)

تقدّم AWS منذ مدة طويلة عرضًا مجانيًا لاكتشاف خدماتها. وقد تغيّر جذريًا سنة 2025: تحصل الحسابات الجديدة على أرصدة (credits) للبداية وتختار بين خطة مجانية محدودة في الزمن وخطة مدفوعة؛ أما الحسابات الأقدم فكانت تخضع لعرض «12 شهرًا مجانًا» على بعض الخدمات، إضافة إلى خدمات «مجانية دائمًا» في حدود شهرية.

القواعد الدقيقة (المبالغ، المدة، الخدمات المعنية) تتغيّر: اقرأ الصفحة الرسمية للعرض المجاني عند فتح الحساب، واحفظ هذه المبادئ:

  • «مجاني» يعني في حدود معيّنة (ساعات، جيجابايت، طلبات)؛
  • بعض الخدمات ليست مجانية أبدًا (بوابة NAT، عناوين IPv4 العمومية خارج ما هو مشمول، بعض أحجام الآلات)؛
  • ما تنساه مشغّلًا يستمر في الاستهلاك.

احمِ نفسك منذ اليوم الأول

  1. أنشئ ميزانية (budget) مع تنبيه بالبريد الإلكتروني عند بضعة دولارات (AWS Budgets، الدرس 3.3).
  2. فعّل استقبال تنبيهات الفوترة وراجع صفحة Billing and Cost Management كل أسبوع في البداية.
  3. احذف ما تنشئه لتجاربك، في المنطقة الصحيحة.
# ميزانية شهرية بـ 10 دولارات مع تنبيه عند 80 % (ملفات JSON مُعدّة مسبقًا)
aws budgets create-budget --account-id 123456789012 \
  --budget file://budget.json --notifications-with-subscribers file://alertes.json

5. AWS CLI

تثبيت الإصدار 2

# Linux x86_64 (على آلة متصلة بالإنترنت)
curl -sSLo awscliv2.zip "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"
unzip -q awscliv2.zip
sudo ./aws/install
aws --version          # aws-cli/2.x.x Python/3.x Linux/...

فضّل هذا المثبّت الرسمي أو CloudShell: حزمة awscli في بعض التوزيعات هي الإصدار القديم 1.

الاتصال: الطرق المتاحة

الطريقة الأمر متى
IAM Identity Center (SSO) aws configure sso ثم aws sso login موصى بها للبشر: رموز (tokens) مؤقتة
مفاتيح وصول مستخدم IAM aws configure يجب تجنّبها؛ وعند الضرورة، مفاتيح تُجدَّد بانتظام
دور (role) آلة EC2 أو Lambda أو CloudShell لا شيء لتفعله يجد CLI وحده بيانات اعتماد مؤقتة

ملفات الإعدادات

# ~/.aws/config : إعدادات لكل ملف شخصي (لا أسرار هنا)
[default]
region = eu-south-2
output = json

[profile formation]
region = eu-west-3
output = table

[profile prod]
sso_session = startup
sso_account_id = 123456789012
sso_role_name = AdministrateurProd
region = eu-south-2

[sso-session startup]
sso_start_url = https://startup.awsapps.com/start
sso_region = eu-west-3
  • ~/.aws/config: المناطق، صيغة الإخراج، الملفات الشخصية SSO؛
  • ~/.aws/credentials: مفاتيح الوصول إن كنت تستعملها (ملف يجب حمايته بـ chmod 600، ولا يوضع أبدًا في Git)؛
  • في config تُكتب الأقسام [profile nom]؛ وفي credentials تُكتب ببساطة [nom].

اختيار الملف الشخصي والمنطقة

aws s3 ls --profile formation           # ملف شخصي لأمر واحد
export AWS_PROFILE=prod                 # ملف شخصي لكامل جلسة الطرفية
aws ec2 describe-instances --region eu-west-3   # المنطقة كخيار تتجاوز منطقة الملف الشخصي
aws configure list                      # من أين تأتي الإعدادات الحالية
aws sts get-caller-identity             # «من أنا؟»: الحساب، المستخدم أو الدور

aws sts get-caller-identity هو الأمر الذي يجب كتابته كلما لم يعمل شيء ما: يخبرك بالحساب والهوية اللذين تعمل بهما فعلًا.

تنسيق النتائج

aws ec2 describe-regions --output table
# --query يرشّح استجابة JSON باستعمال JMESPath
aws ec2 describe-instances \
  --query 'Reservations[].Instances[].[InstanceId,InstanceType,State.Name]' --output text

الصيغ: json (افتراضيًا، للسكربتات)، table (مقروءة)، text (لـ grep وawk)، yaml.

أخطاء متكررة

  • استعمال المستخدم الجذر يوميًا، أو الأسوأ، إنشاء مفاتيح وصول له.
  • البحث عن مواردك في المنطقة الخطأ: تحقّق من محدِّد المنطقة ومن الخيار --region.
  • الاعتقاد بأن كل شيء مجاني خلال فترة التجربة: بوابة NAT، العناوين العمومية، الأحجام الكبيرة أو الآلات الكبيرة كلها مفوترة. أنشئ ميزانية.
  • نسخ مفاتيح الوصول في سكربت أو مستودع Git: روبوتات تعثر عليها في دقائق وتشغّل آلات تعدين على حسابك.

التطبيق العملي (Lab)

لا يتوفّر التمرين على وصول إلى الشبكة ولا على AWS CLI: ستُعِدّ الملفات التي يضعها المهندس على حاسوبه. ستكتب ~/.aws/config بملف شخصي افتراضي في إسبانيا ثم ملف شخصي formation في باريس، وسكربت جرد صغيرًا سليمًا، وبطاقة اختيارات الحساب.

cat /root/.aws/config
sh -n /root/aws/inventaire.sh && echo "syntaxe correcte"

اختبار قصير

  1. كم رقمًا يتكوّن منه رقم حساب AWS؟
  2. اذكر قاعدتين خاصتين بالمستخدم الجذر.
  3. لماذا لا تظهر المنطقة eu-south-2 في حساب جديد تمامًا؟
  4. في ~/.aws/config، كيف يُكتب عنوان ملف شخصي اسمه formation؟
  5. أي أمر يبيّن الحساب والهوية اللذين يعمل بهما CLI؟
الأجوبة
  1. 12 رقمًا.
  2. حسب الاختيار: MFA إجبارية؛ لا مفاتيح وصول؛ عدم استعماله يوميًا؛ بريد إلكتروني جماعي.
  3. إنها منطقة يجب تفعيلها (فُتحت بعد مارس 2019): يجب تفعيلها من إعدادات الحساب.
  4. [profile formation] (وفي credentials تكون [formation]).
  5. aws sts get-caller-identity.

مراجع عامة: الوثائق الرسمية لـ AWS (غير منقولة). نص أصلي بالكامل من MasterLinux.

تمارين تطبيقية

تُنجَز على Debian 12

الطرفية عبر الإنترنت قادمة قريبًا. في انتظار ذلك، أنجِز هذه المهام على جهازك بنظام لينكس أو على آلة افتراضية أو WSL.

  1. أنشئ ملف إعدادات CLI /root/.aws/config يحتوي على قسم [default] فيه region = eu-south-2 وoutput = json
    عرض تلميحmkdir -p /root/.aws ثم printf '[default]\nregion = eu-south-2\noutput = json\n' > /root/.aws/config
    عرض الحل
    mkdir -p /root/.aws && printf '[default]\nregion = eu-south-2\noutput = json\n' > /root/.aws/config

    التحقق : f=/root/.aws/config; grep -qxF "[default]" $f && grep -qx "region = eu-south-2" $f && grep -qx "output = json" $f

  2. أضف إلى /root/.aws/config ملفًا شخصيًا (profile) اسمه formation (بالعنوان [profile formation]) منطقته eu-west-3، دون حذف القسم [default]
    عرض تلميحأضف باستعمال >>: سطرًا فارغًا، ثم [profile formation]، ثم region = eu-west-3
    عرض الحل
    printf '\n[profile formation]\nregion = eu-west-3\noutput = table\n' >> /root/.aws/config

    التحقق : f=/root/.aws/config; grep -qxF "[default]" $f && grep -qx "region = eu-south-2" $f && grep -qxF "[profile formation]" $f && grep -qx "region = eu-west-3" $f

  3. اكتب السكربت القابل للتنفيذ /root/aws/inventaire.sh (سطره الأول #!/bin/sh) الذي يشغّل aws sts get-caller-identity ثم aws ec2 describe-regions --output table. يجب أن تكون صياغته سليمة (sh -n)
    عرض تلميحprintf بثلاثة أسطر، ثم chmod +x
    عرض الحل
    mkdir -p /root/aws && printf '#!/bin/sh\naws sts get-caller-identity\naws ec2 describe-regions --output table\n' > /root/aws/inventaire.sh && chmod +x /root/aws/inventaire.sh

    التحقق : f=/root/aws/inventaire.sh; test -x $f && [ "$(head -n1 $f)" = "#!/bin/sh" ] && sh -n $f && grep -q "^aws sts get-caller-identity" $f && grep -q "^aws ec2 describe-regions.*--output table" $f

  4. سجّل اختيارات الحساب في /root/aws/compte.txt: region_principale=eu-south-2 وregion_secours=eu-west-3 وmfa_racine=oui وcles_acces_racine=aucune
    عرض تلميحأربعة أسطر بصيغة cle=valeur
    عرض الحل
    printf 'region_principale=eu-south-2\nregion_secours=eu-west-3\nmfa_racine=oui\ncles_acces_racine=aucune\n' > /root/aws/compte.txt

    التحقق : f=/root/aws/compte.txt; grep -qx "region_principale=eu-south-2" $f && grep -qx "region_secours=eu-west-3" $f && grep -qx "mfa_racine=oui" $f && grep -qx "cles_acces_racine=aucune" $f

المراجع الرسمية المعتمدة: AWS — Documentation générale (référence consultée, texte original) — https://docs.aws.amazon.com/ ; AWS — AWS Command Line Interface, guide de l'utilisateur (référence) — https://docs.aws.amazon.com/cli/ ; AWS — Offre gratuite AWS (page de référence) — https://aws.amazon.com/free/. نص أصلي من MasterLinux.