0Pricing
Cyber Security Academy · درس

خزائن ومستودعات الأسرار

مركزة الأسرار باستخدام أدوات مثل Vault.

خزائن ومستودعات الأسرار درس مجاني في Cyber Security Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cyber Security Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.

ما الذي يحلّه مخزن الأسرار

مخزن الأسرار (أو خزنة) هو خدمة مركزية مُحصَّنة، تتمثل مهمتها الوحيدة في تخزين الأسرار والتحكم في الوصول إليها وتدقيقه. وهو يستبدل الملفات المبعثرة ومتغيرات البيئة التي تسبب انتشار الأسرار.

يوفّر مدير الأسرار الجيد أربع إمكانات أساسية:

  • التخزين المركزي مصدر موثوق واحد للحقيقة.
  • التحكم في الوصول سياسات دقيقة تحدد من وما يمكنه قراءة كل سر.
  • سجلات التدقيق سجل لكل عملية وصول لاستخدامه في الاستجابة للحوادث.
  • التشفير تشفير الأسرار أثناء التخزين والنقل.

تشمل الأمثلة HashiCorp Vault وAWS Secrets Manager وAzure Key Vault وGCP Secret Manager.

بنية HashiCorp Vault

HashiCorp Vault مدير أسرار شائع مفتوح المصدر. وينظّم وظائفه في secrets engines قابلة للإضافة، ومثبَّتة على مسارات.

  • KV engine يخزّن الأسرار الثابتة في أزواج مفتاح-قيمة.
  • Database engine ينشئ بيانات اعتماد ديناميكية وقصيرة العمر لقواعد البيانات.
  • PKI engine يصدر شهادات TLS عند الطلب.
  • Transit engine يوفّر التشفير كخدمة من دون كشف المفاتيح.

تتفاعلون مع Vault عبر HTTP API أو CLI. ويخضع كل مسار لسياسات تحدد من يمكنه القراءة منه أو الكتابة فيه.

# Enable a KV v2 secrets engine at the 'secret/' path
vault secrets enable -path=secret kv-v2

# Write and read a static secret
vault kv put secret/app/db password='S3cr3t' user='app'
vault kv get secret/app/db

نموذج seal/unseal

يحمي Vault بياناته باستخدام آلية seal/unseal. عند بدء تشغيل Vault، يكون في حالة sealed؛ فهو يعرف مكان البيانات المشفَّرة، لكنه لا يستطيع فك تشفيرها.

يُشفَّر المفتاح الرئيسي الذي يفك تشفير التخزين نفسه باستخدام مفتاح unseal. وباستخدام Shamir's Secret Sharing، يُقسَّم مفتاح unseal إلى أجزاء متعددة تُوزَّع على مشغّلين مختلفين.

يجب توفير عتبة قابلة للتهيئة، مثل 3 من 5 أجزاء، لإعادة بناء المفتاح وإلغاء قفل Vault. ولا يستطيع شخص واحد إلغاء قفله بمفرده، ما يحمي من اختراق أحد المطلعين.

# Initialize Vault: 5 key shares, threshold of 3 to unseal
vault operator init -key-shares=5 -key-threshold=3

# Each operator supplies one shard until threshold is met
vault operator unseal <shard-1>
vault operator unseal <shard-2>
vault operator unseal <shard-3>

المصادقة: من أنت؟

قبل قراءة أي سر، يجب على العميل المصادقة للحصول على رمز مميز. يدعم Vault العديد من طرق المصادقة الملائمة لهويات مختلفة:

  • AppRole للتطبيقات وأنظمة CI، باستخدام role ID + secret ID.
  • Kubernetes يستخدم رمز حساب خدمة الـpod.
  • AWS/GCP/Azure IAM يثق بهوية منصة السحابة.
  • OIDC/LDAP للمستخدمين البشريين عبر SSO.

المبدأ الأساسي هو أن الهوية تأتي من المنصة، لا من كلمة مرور طويلة العمر. يثبت pod في Kubernetes هويته باستخدام رمز حساب الخدمة الخاص به، فلا يوجد سر تمهيدي يمكن تسريبه.

# App authenticates via AppRole to receive a token
vault write auth/approle/login \
  role_id="db-app-role" \
  secret_id="$WRAPPED_SECRET_ID"
# Response includes client_token used for subsequent reads

التفويض باستخدام السياسات

تثبت المصادقة الهوية، أما السياسات فتحدد ما يمكن لتلك الهوية فعله. تُكتب سياسات Vault بلغة HCL وتتبع مبدأ أقلّ قدر من الامتيازات، فلا تمنح سوى المسارات والإمكانات التي يحتاج إليها حمل العمل.

تتيح هذه السياسة لخدمة ما قراءة سر قاعدة البيانات الخاص بها فقط، ولا شيء سواه:

تطابق الإمكانات أفعال API: read وcreate وupdate وdelete وlist. ارفضوا افتراضيًا، وامنحوا الصلاحيات صراحةً.

# policy: billing-app.hcl
path "secret/data/billing/*" {
  capabilities = ["read"]
}
path "database/creds/billing-readonly" {
  capabilities = ["read"]
}
# everything else is implicitly denied

مخازن الأسرار السحابية

إذا كنتم تعملون على سحابة واحدة، فإن مخزن الأسرار المُدار من الموفّر يزيل العبء التشغيلي؛ فلا حاجة إلى seal/unseal ولا إلى خوادم لتصحيحها:

  • AWS Secrets Manager يتكامل مع IAM ويدعم دوال Lambda مدمجة لتدوير الأسرار.
  • Azure Key Vault يخزّن الأسرار والمفاتيح والشهادات باستخدام RBAC.
  • GCP Secret Manager يوفّر أسرارًا متعددة الإصدارات، ويقيّد الوصول إليها عبر IAM bindings.

يتحكم IAM الخاص بالسحابة في الوصول، لذلك تقرأ أعباء العمل السر باستخدام دورها الحالي، من دون كلمة مرور منفصلة. والمقابل هو الارتباط بمورّد واحد ودعم أضعف للبيئات متعددة السحب مقارنةً بـVault.

# Read a secret from AWS Secrets Manager (workload uses its IAM role)
aws secretsmanager get-secret-value \
  --secret-id prod/billing/db \
  --query SecretString --output text

# GCP equivalent
gcloud secrets versions access latest --secret=billing-db

التشفير كخدمة

أحيانًا لا تريدون تخزين سر على الإطلاق؛ بل تريدون تشفير بيانات التطبيق من دون أن يحتفظ تطبيقكم بمفتاح التشفير مطلقًا. وهذا ما يفعله Transit engine في Vault تحديدًا.

يرسل التطبيق نصًا صريحًا إلى Vault، ويتلقى نصًا مشفَّرًا، ولا يرى المفتاح مطلقًا. وتعمل عملية فك التشفير بالطريقة نفسها. ويُسمّى ذلك التشفير كخدمة.

الفائدة هي أن المفاتيح لا توجد إلا داخل Vault، ويمكن تدويرها مركزيًا، كما أن التطبيق المخترق لا يستطيع تسريب مفتاح لم يمتلكه أصلًا.

# Encrypt data without the app ever seeing the key
vault write transit/encrypt/orders-key \
  plaintext=$(echo -n 'card=4111...' | base64)
# returns: ciphertext=vault:v1:abc123...

# Decrypt later
vault write transit/decrypt/orders-key ciphertext='vault:v1:abc123...'

حقن الأسرار في أحمال العمل

لا تكون الخزنة مفيدة إلا إذا استطاعت التطبيقات استهلاك الأسرار من دون تضمين المسار أو الرمز المميز مباشرةً في الشيفرة. وتشمل أنماط الحقن الشائعة:

  • Sidecar/agent يعمل Vault Agent إلى جانب التطبيق، ويصادق هويته، ويكتب الأسرار في وحدة تخزين مشتركة داخل الذاكرة.
  • CSI driver يثبّت Kubernetes الأسرار كملفات عبر Secrets Store CSI driver.
  • SDK fetch يستدعي التطبيق واجهة API الخاصة بالخزنة مباشرةً عند بدء التشغيل.

فضّلوا التثبيت على نظام ملفات داخل الذاكرة مثل tmpfs بدلًا من متغيرات البيئة، وتجنبوا كتابة الأسرار على القرص حيث قد تبقى.

# Vault Agent template renders a secret to an in-memory file
template {
  contents = "DB_PASS={{ with secret \"secret/app/db\" }}{{ .Data.data.password }}{{ end }}"
  destination = "/run/secrets/db.env"
}

تسجيل التدقيق والمساءلة

يجب تسجيل كل حدث قراءة وكتابة ومصادقة في سجل تدقيق. وهذا ما يجعل إدارة الأسرار قابلة للإثبات أثناء وقوع حادثة.

تجيب سجلات التدقيق عن الأسئلة المهمة: من وصل إلى أي سر، ومتى، ومن أين. يحسب Vault تجزئات للقيم الحساسة في السجلات، حتى لا يتسبب السجل نفسه في تسريب الأسرار.

أرسل سجلات التدقيق إلى نظام منفصل يكشف العبث (SIEM)، حتى لا يتمكن مهاجم يخترق مضيف Vault من محو الأدلة على ما وصل إليه أيضاً.

# Enable a file audit device (HMAC-hashes secret values)
vault audit enable file file_path=/var/log/vault/audit.log

# Forward to a SIEM/syslog endpoint for tamper resistance
vault audit enable syslog tag="vault" facility="AUTH"

حماية Vault نفسه

يؤدي تركيز المخاطر في مخزن مركزي إلى عواقب كبيرة؛ فإذا اختُرقت الخزنة، اختُرق كل شيء. حصّنها باعتبارها أهم أصولك:

  • شغّلها باستخدام TLS على جميع نقاط النهاية؛ ولا تكشف واجهة API مطلقاً من دون تشفير.
  • أبقِ الخزنة على شبكة خاصة خلف قواعد جدار ناري صارمة.
  • فعّل إلغاء الختم التلقائي عبر KMS سحابي لتجنب التعامل اليدوي مع الأجزاء، مع حماية مفتاح KMS بإحكام.
  • استخدم مدداً قصيرة لـ TTL للرموز وعقود إيجار قابلة للتجديد حتى تنتهي صلاحية الرموز المسروقة بسرعة.
  • ثبّت التحديثات سريعاً وراقب سجلات التدقيق بحثاً عن الحالات الشاذة.

تستبدل الخزنة نقاط الفشل الكثيرة بنقطة واحدة محمية بأعلى درجة.

اختيار المخزن المناسب

لا توجد أداة واحدة هي الأفضل دائماً؛ لذا طابق المخزن مع بيئتك:

  • سحابة واحدة واحتياجات بسيطة: استخدم المدير الأصلي (AWS/Azure/GCP) لتقليل العبء التشغيلي إلى أدنى حد.
  • سحابات متعددة أو بيئة محلية: يوفر HashiCorp Vault تجريداً متسقاً وقابلاً للنقل.
  • الحاجة إلى أسرار ديناميكية أو التشفير كخدمة: تُعد محركات Vault الأكثر قدرة.
  • الاعتماد الكبير على Kubernetes: اجمع بين مخزن وبرنامج تشغيل CSI أو مشغّل مثل External Secrets.

أيّاً كان اختيارك، فالهدف واحد: مصدر حقيقة واحد خاضع للتدقيق والتحكم في الوصول، يحل محل الأسرار النصية الصريحة المبعثرة.

تحقق سريع

اختبر مدى فهمك لنموذج حماية Vault.

مراجعة: Vault ومخازن الأسرار

تعلّمت كيفية استبدال الأسرار المبعثرة بمخزن مركزي خاضع للتدقيق.

  • يوفر مخزن الأسرار تخزيناً مركزياً، والتحكم في الوصول، وتسجيل التدقيق، والتشفير.
  • يستخدم HashiCorp Vault محركات أسرار قابلة للتبديل ونموذج الختم/إلغاء الختم المحمي باستخدام مشاركة سر Shamir.
  • تستخلص أساليب المصادقة الهوية من المنصة (Kubernetes وIAM وAppRole)، وتفرض السياسات مبدأ أقل قدر من الامتيازات.
  • تستبدل المخازن السحابية الأصلية (AWS وAzure وGCP) قابلية النقل بعبء تشغيلي منخفض.
  • يوفر محرك Transit التشفير كخدمة، بحيث لا تحتفظ التطبيقات بالمفاتيح.
  • احقن الأسرار عبر الوكلاء أو CSI في تخزين داخل الذاكرة، وسجّل كل عملية وصول، وحصّن الخزنة باعتبارها أهم أصولك.

بعد ذلك، سنجعل الأسرار أكثر أماناً بتوليدها ديناميكياً وجعلها قصيرة العمر.

الأسئلة الشائعة

هل درس «خزائن ومستودعات الأسرار» مجاني؟

نعم — نص درس «خزائن ومستودعات الأسرار» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cyber Security Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.

ماذا ستتعلم في «خزائن ومستودعات الأسرار»؟

مركزة الأسرار باستخدام أدوات مثل Vault. تتمرن على Cyber Security Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cyber Security Academy؟

لا تُشترط خبرة سابقة. Cyber Security Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «خزائن ومستودعات الأسرار»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Cyber Security Academy هذا؟

نعم. كل درس في Cyber Security Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مشكلة انتشار الأسرار
  2. خزائن ومستودعات الأسرار
  3. الأسرار الديناميكية وتأجيرها
  4. تدوير المفاتيح واكتشاف التسريبات
← العودة إلى Cyber Security Academy