تخطَّ إلى المحتوى

External Secrets و Secret Rotation

ستتعلم لماذا لا نضع secrets في Git كنص صريح، وكيف تعمل أدوات مثل External Secrets Operator لنسخ السر من مزود خارجي إلى Kubernetes Secret.

Kubernetes Secret ليس مدير أسرار كامل. هو object داخل cluster. في Production غالبا يكون المصدر الحقيقي في AWS Secrets Manager أو Vault أو Azure Key Vault، ثم يقوم operator بعمل sync.

flowchart LR
SM[External Secret Store] --> ESO[External Secrets Operator]
ESO --> KS[Kubernetes Secret]
KS --> P[Pod env أو volume]

secret-store.yaml:

apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
name: demo-store
spec:
provider:
fake:
data:
- key: /demo/database/password
value: "change-me"

external-secret.yaml:

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: database-password
spec:
refreshInterval: 1h
secretStoreRef:
name: demo-store
kind: SecretStore
target:
name: database-password
creationPolicy: Owner
data:
- secretKey: password
remoteRef:
key: /demo/database/password
خطوةالهدف
أضف secret جديد في storeلا تكسر النسخة الحالية
حدّث التطبيق لقراءة القيمة الجديدةenv يحتاج restart غالبا
نفذ rolloutPods تقرأ secret الجديد
راقب الأخطاءتأكد أن الاتصال يعمل
احذف السر القديمأغلق نافذة الخطر

Lab: قراءة Secret متزامن

المستوى: مبتدئ الوقت: 30 دقيقة الأدوات: kubectl

الهدف: فهم كيف يظهر ExternalSecret كـ Kubernetes Secret واختبار قيمته.

  • External Secrets Operator مثبت إذا أردت تنفيذ المثال فعليا.
Terminal window
kubectl apply -f secret-store.yaml
kubectl apply -f external-secret.yaml
kubectl get externalsecret
kubectl get secret database-password
kubectl get secret database-password -o jsonpath='{.data.password}' | base64 -d
change-me
Terminal window
kubectl delete -f external-secret.yaml
kubectl delete -f secret-store.yaml
الخطأالحل
تخزين Secret YAML في Gitاستخدم External Secrets أو Sealed Secrets
تغيير Secret بدون rolloutأعد تشغيل Pods التي تقرأه كـ env
صلاحيات store واسعةاستخدم least privilege