يوجد أثران كلما شاركت ملف Compose: النسخة التي كتبتها، والنسخة التي تُصيّرها أداة بعد استبدال المتغيرات. الثانية غالبًا أكثر حساسية من الأولى، وهي النسخة التي يلصقها الناس في تقرير مشكلة دون قراءتها. مراجعة ملف المصدر وحده تعني مراجعة المستند الخطأ.

قارن ما يمكن أن تحتويه كل نسخة قبل أن تقرر ما يجب حذفه.

النموذج المُصيَّر مستند مختلف

يحل Compose متغيرات البيئة، ويدمج ملفات التجاوز، وينتج إعدادًا فعّالًا لم يعد القارئ قادرًا على تمييزه عن قيم مكتوبة يدويًا. يصبح مرجع مثل اسم متغير في المصدر هو رمز الحساب نفسه في المخرجات. البنية التي تجعل الملف مفيدًا للتشخيص تبقى بعد هذا التحويل، ويبقى معها كل ما لم يكن ينبغي أن يكون فيه أصلًا.

صيّر الملف بنفسك قبل أن ترفقه، وتعامل مع تلك المخرجات باعتبارها الأثر قيد المراجعة. إن لم تستطع تصييره، فلا يمكنك أن تعرف ما أنت على وشك نشره.

الأسرار موجودة في أماكن أكثر من حقل المفتاح

ابدأ بالواضح: المفاتيح الخاصة، والمفاتيح المشتركة مسبقًا، والرموز، وكلمات المرور، وعناوين الاتصال التي تتضمن بيانات اعتماد. ثم انظر إلى كل ما يشير إليه الملف، لأن الإشارة ليست حجبًا. ملف بيئة يُثبَّت داخل الخدمة، وملف إعداد يُربَط من المضيف، وملصق يحمل رمزًا، ووسيط أمر يتضمن كلمة مرور، كلها تنتقل مع النشر حتى عندما يبدو ملف YAML نظيفًا. المفتاح الملصوق داخل متغير باسم مطمئن يظل مفتاحًا.

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

إعلان السر ليس هو السر

تفصل كائنات الأسرار في Compose الإعلان عن المادة: تحصل الخدمة على مسار أو هدف، ويعيش المحتوى في مكان آخر. الإبقاء على الإعلان مع استبدال المادة هو المقايضة الصحيحة عادةً، لأن المراجع يحتاج إلى رؤية أن سرًا موجود وكيف يُثبَّت. أما ما يجب ألا يبقى فهو المحتوى نفسه.

الملصقات والتعليقات تستحق المعاملة نفسها. تعليق يذكر مسار الخزنة الذي يحمل مفتاح الإنتاج يخبر المهاجم أين ينظر حتى وإن لم يكن يحتوي على أي مفتاح.

احتفظ بالشكل ليبقى الملف صالحًا للتشخيص

الحجب الذي يزيل وضع الشبكة أو إصدار الصورة أو إعدادات القدرات ينتج ملفًا لا يستطيع أحد تتبعه. استبدل القيم الحساسة واحتفظ بالعلاقات: أي خدمة تُثبّت ماذا، وأي شبكة تنضم إليها، وأي جهاز تحتاجه. هذا هو الجزء الذي يستخدمه القارئ في شرح مسار مفقود أو جهاز غير متاح. وهو أيضًا النسخة التي يستطيع زميل مقارنتها بنشره العامل الخاص به.

docker compose -f compose.yaml config > rendered.yaml
grep -nE 'PRIVATE_KEY|PASSWORD|TOKEN|PSK|PrivateKey|passphrase' rendered.yaml
wc -l rendered.yaml

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

إن انكشفت المادة، فاستبدلها

إزالة المرفق لا تزيل النسخ التي صنعها آخرون بالفعل، والنسخ المتطابقة والذاكرات المؤقتة تحتفظ بنسخها. استخدم عملية الإلغاء والاستبدال لدى الجهة المُصدرة لما تسرّب، ثم حدّث النشر. هذا الترتيب مهم، لأن الاستبدال أولًا والإلغاء لاحقًا يتركان نافذة ببيانات اعتماد صالحتين.

في خيوط الدعم، ابدأ بالخطأ الدقيق وإصدار الصورة ووضع الشبكة والإعداد الواحد غير السري المهم. هذا المزيج يفسر جهازًا مفقودًا أو مسارًا معطلًا أكثر بكثير مما يفسره المفتاح.

مقالات ذات صلة