مستوى المقال: مبتدئ
لو فيه ريبو GitHub بتاعك ملف اسمه db-secret.yaml وفيه باسورد قاعدة البيانات مكتوب بـ Base64، أي مطوّر عنده صلاحية القراءة على الريبو يقدر يفكّه في خمس ثواني بأمر واحد. Base64 مش تشفير، ده تحويل صيغة بس. Sealed Secrets بيخلّيك تـ commit ملفات الـ secrets في الريبو بأمان حقيقي، لأنها متشفّرة بمفتاح بيقعد جوّا الـ cluster بس، ومفيش حد قادر يفكها برّاه. هتفهم الفكرة كلها وتشغّلها على cluster حقيقي في 12 دقيقة.
Sealed Secrets في Kubernetes: المفهوم والتطبيق العملي
المشكلة باختصار
Kubernetes Secret الافتراضي بيتخزّن في الـ cluster بصيغة Base64. لو حبّيت تـ commit الـ Secret ده في Git علشان GitOps أو علشان مراجعة التغييرات، انت بتنشر الباسورد في كل مكان فيه نسخة من الريبو: لاب توب كل مطوّر، نسخ الـ CI، أرشيف Git history، وحتى لو الريبو عام، الإنترنت كله بياخد نسخة. مفيش شفرة هنا، فيه تحويل صيغة فقط.
الحل التقليدي إنك تخرج الـ secrets من الكود وتحطها في HashiCorp Vault أو AWS Secrets Manager. ده شغّال، لكن بيكسر مبدأ GitOps الأساسي: "كل حاجة بتوصف الـ cluster لازم تكون في Git". Sealed Secrets بيرجّع المبدأ ده وهو بيحافظ على الأمان.
تخيّل صندوق البريد في الشارع
صندوق البريد الأحمر اللي في الشارع ليه فتحة من فوق. أي حد يقدر يحط فيه جواب، لكن مفيش حد يقدر يطلّع جواب من فوق. ساعي البريد بس عنده مفتاح يفتح الصندوق من تحت ويفرّغه. ده بالظبط النظام اللي Sealed Secrets شغّال بيه:
- المفتاح العام (Public Key) = فتحة الصندوق. موجود مع كل المطوّرين، بيستخدموه يقفلوا الـ secret قبل ما يـ commit.
- المفتاح الخاص (Private Key) = مفتاح ساعي البريد. موجود بس جوّا الـ cluster، ومفيش حد عنده نسخة منه برّاه.
لمّا تكتب باسورد قاعدة البيانات وتقفله بالمفتاح العام، بيتحوّل لنص مشفّر طوله حوالي 700 حرف عشوائي. حتى لو حد سرق الريبو كله، مش هيقدر يفك الباسورد بدون المفتاح اللي قاعد جوّا الـ cluster.
التعريف العلمي: تشفير غير متماثل
Sealed Secrets مبني على خوارزمية RSA-OAEP بمفتاح طوله 4096-bit بشكل افتراضي. التشفير غير المتماثل (Asymmetric Encryption) معناه إن في زوج مفاتيح: مفتاح بيشفّر، ومفتاح تاني مختلف بيفك الشفرة. الـ controller اللي اسمه sealed-secrets-controller بيشتغل في namespace kube-system ومسؤول عن أربع مهام:
- توليد زوج المفاتيح أول مرة بيتنصّب فيها على الـ cluster.
- عرض المفتاح العام عبر API علشان أداة
kubesealتستخدمه من جهاز المطوّر. - مراقبة الـ resources من نوع
SealedSecretفي كل الـ namespaces. - فك الشفرة وتحويلها لـ
Secretعادي يستخدمه الـ Pod.