مخازن الأسرار السحابية الأصيلة
مخازن الأسرار السحابية الأصيلة
عند تشغيل الأحمال على AWS، لست بحاجة إلى مجموعة Vault مُدارة ذاتيًا لكل سر. توفر AWS خدمتين مُدارتين متخصصتين — AWS Secrets Manager وAWS Systems Manager Parameter Store (SSM) — إضافةً إلى عمود فقري لإدارة المفاتيح يُسمى KMS يدعم التشفير في كلتيهما. فهم متى تستخدم كل خدمة، وكيف يعمل تشفير الظرف (envelope encryption) في KMS تحت الغطاء، وأين تقع الفِرق الإنتاجية في الفخاخ — هو جوهر هذا الدرس.
AWS Secrets Manager مقابل SSM Parameter Store
كلتا الخدمتين تخزّنان الإعداد الحساس، لكنهما تستهدفان حالات استخدام مختلفة ولهما نماذج تكلفة وخصائص تشغيلية مختلفة بشكل ملحوظ.
AWS Secrets Manager هو الخيار الصحيح عندما تحتاج إلى:
- التدوير التلقائي — يمتلك Secrets Manager تكاملًا أصيلًا مع RDS وRedshift وDocumentDB وإطار دوران قابل للتمديد يعتمد على Lambda. يعالج تبادل بيانات الاعتماد بشكل ذري: ينشئ بيانات الاعتماد الجديدة، ويُحدّث قاعدة البيانات، ويُحدّث السر، ويُهمل القديم — كل ذلك دون أي توقف للتطبيق.
- مشاركة الأسرار عبر الحسابات — سياسات مستندة إلى الموارد على السر تسمح بمشاركته مع حسابات AWS أخرى في مؤسستك، وهو النمط المعياري لإدارة الأسرار المركزية في البنى متعددة الحسابات.
- مسار تدقيق لكل سر — كل عملية قراءة وكتابة وتدوير هي استدعاء CloudTrail API مُعلَّم بـARN السر المحدد. هذه الدقة تلبي متطلبات تدقيق SOC 2 وPCI DSS.
SSM Parameter Store هو الخيار الصحيح عندما تحتاج إلى:
- تخزين الإعداد الهرمي — تعيش المعاملات تحت مسارات مثل
/prod/myapp/db/password، ويمكن لسياسات IAM منح الوصول لبادئات مسار كاملة. هذا قوي للتطبيقات التي تقرأ كل إعداداتها من SSM عند البدء. - الأحمال الحساسة للتكلفة — المعاملات القياسية مجانية. معاملات SecureString (مشفّرة بـKMS) أيضًا مجانية في الطبقة القياسية. يفرض Secrets Manager $0.40 لكل سر شهريًا. في نطاق الآلاف من الخدمات المصغّرة، الفرق في التكلفة كبير.
- إعداد بسيط لا يتطلب دورانًا — أعلام الميزات وأسماء البيئات ومفاتيح API غير المتدورة والإعداد البنيوي الذي لا يحتاج دورة حياة Secrets Manager الكاملة.
تشفير الظرف في KMS: كيف تُحمى بياناتك فعليًا
يستخدم كل من Secrets Manager وSSM SecureString خدمة AWS KMS لتشفير البيانات في حالة السكون. فهم نمط تشفير الظرف أمر ضروري — إنه النفس النمط الذي يستخدمه كل مزود سحابي رئيسي وهو ما يجعل مخازن الأسرار السحابية الأصيلة آمنةً وعاليةَ الأداء في نطاق واسع.
النهج الساذج للتشفير هو: إرسال سرك إلى KMS، ويُشفّره KMS بـCMK (مفتاح الماجستير)، وتخزّن النص المشفر. المشكلة: KMS له حد حمولة 4 كيلوبايت وهو استدعاء شبكي — استدعاء KMS مباشرةً لكل قراءة سيكون مُكلفًا وبطيئًا في معدلات طلب عالية.
يحل تشفير الظرف هذا بأناقة:
- تُنشئ AWS مفتاح تشفير البيانات (DEK) قصير الأمد باستخدام CMK في KMS. يُعاد DEK بشكلين: نص عادي (يُستخدم فورًا للتشفير) ونص مشفر (DEK مشفّر بالـCMK، يُخزَّن مع البيانات).
- تُشفَّر بياناتك (قيمة السر) محليًا باستخدام DEK العادي مع AES-256-GCM. هذا سريع وليس له حد للحمولة.
- يُهمَل DEK العادي فورًا بعد الاستخدام. يُحفظ فقط DEK المشفر والبيانات المشفرة.
- عند فك التشفير، يُرسَل DEK المشفر إلى KMS. يستخدم KMS الـCMK لفك تشفيره ويعيد DEK العادي. ثم تُفك شفرة بياناتك محليًا.
النتيجة: الـCMK لا يلمس أبدًا بياناتك الصريحة مباشرةً ولا يغادر أبدًا أجهزة KMS. جميع عمليات KMS مُسجَّلة في CloudTrail. إلغاء الوصول إلى الـCMK يجعل فورًا جميع البيانات المحمية غير قابلة للوصول بشكل دائم — حتى لموظفي AWS.
العمل مع AWS Secrets Manager
تُظهر الأمثلة التالية دورة الحياة الكاملة: إنشاء سر، واسترجاعه في الكود، وتهيئة التدوير التلقائي لبيانات اعتماد قاعدة بيانات RDS.
GetSecretValue في كل استعلام لقاعدة البيانات. استرجع السر مرة واحدة عند بدء تشغيل التطبيق، خزّنه في الذاكرة، ونفّذ نمط إعادة المحاولة عند فشل المصادقة: إذا رفضت قاعدة البيانات بيانات الاعتماد، استدعِ GetSecretValue مجددًا (ربما حدث تدوير) وأعد الاتصال. يعمل هذا النمط بشكل صحيح مع دوران Secrets Manager دون أي توقف للتطبيق.
العمل مع SSM Parameter Store
يتميز SSM Parameter Store في الإعداد الهرمي للتطبيقات. البنية المستندة إلى المسار تتوافق جيدًا مع مبدأ الأذونات الأدنى في IAM: يمكن منح دور مهمة الخدمة المصغّرة ssm:GetParametersByPath على /prod/myapp/* فحسب.
تصميم سياسة IAM لأذونات الحد الأدنى
أهم ضابط أمني لكلتا الخدمتين هو سياسة IAM المرفقة بدور الحوسبة (دور مهمة ECS، ملف تعريف نسخة EC2، دور تنفيذ Lambda). يجب تحديد الوصول بـARN موارد محددة — لا تستخدم أبدًا Resource: "*" مع إجراءات قراءة الأسرار.
شرط kms:ViaService في عبارة KMS مهم: يقيّد إذن kms:Decrypt بحيث لا يستطيع الدور استخدامه إلا عندما يأتي الطلب عبر Secrets Manager. لا يستطيع الدور استخدام مفتاح KMS نفسه لفك تشفير أي نص مشفر مباشرةً — مما يُقلّص نطاق الضرر في حالة اختراق الدور.
secretsmanager:GetSecretValue مع Resource: "*". أي حاوية مخترقة في الحساب يمكنها حينئذٍ استخراج كل الأسرار. احدّد دائمًا بادئة ARN الدقيقة للخدمة. استخدم aws secretsmanager list-secrets مع الكشف عن شذوذات CloudTrail (نتائج GuardDuty: UnauthorizedAccess:IAMUser/AnomalousBehavior) لاكتشاف الاستعراض غير المصرح به.
Secrets Manager في Kubernetes وECS
على Amazon EKS، يقوم Secrets Store CSI Driver مع مزود AWS بتحميل قيم Secrets Manager أو SSM Parameter Store مباشرةً كملفات وحدة تخزين Kubernetes (أو مزامنتها في Kubernetes Secrets الأصيلة). يتحكم دور IRSA لحساب خدمة الـpod في الوصول. على Amazon ECS، يقوم تكامل ECS Secrets بحقن قيم Secrets Manager كمتغيرات بيئة عند بدء تشغيل الحاوية دون أي تغييرات في كود التطبيق — تشير إلى ARN السر في تعريف المهمة.
يُلغي كلا النمطين بيانات الاعتماد المُبرمجة على مستوى البنية التحتية. غير أن حقن متغيرات البيئة (الافتراضي في ECS) له دقة: يُقرأ السر مرةً واحدة عند إطلاق الحاوية ولا يُحدَّث إذا تدوّر السر. للأحمال الحساسة للتدوير على ECS، استخدم نمط CSI Driver (على EKS) أو ابنِ منطق التحديث في التطبيق.
SecretCache). في معدلات الطلب العالية — خدمة تُجري عشرات الآلاف من اتصالات قاعدة البيانات في الثانية — يُلغي التخزين المؤقت تقييد API لـSecretManager (الحصة الافتراضية هي 10,000 استدعاء API في الثانية لكل منطقة، مشتركة بين جميع المبادئ في الحساب). ابنِ التخزين المؤقت في كل مستهلك عالي الإنتاجية منذ اليوم الأول.