ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
Secret ရဲ့ concept က ConfigMap နဲ့ ဆင်တူပါတယ် — key-value data ကို Pod ထဲ environment variable/file အဖြစ် inject ယူနိုင်ပါတယ်။ ကွာတာက Secret data ကို base64 encode လုပ်ထားတာနဲ့ Kubernetes ရဲ့ access control (RBAC) နဲ့ ပိုတင်းကျပ်စွာ ကန့်သတ်နိုင်တာပါ — ဒါပေမယ့် base64 က 'encryption' မဟုတ်ပါ, decode ပြန်လုပ်ရုံနဲ့ original value ပြန်ရနိုင်ပါတယ်! Production မှာ Secret ကို truly လုံခြုံအောင် ထားချင်ရင် etcd encryption at rest ကို enable လုပ်ရပါမယ် (ဒါမှမဟုတ် external secret manager, ဥပမာ - Vault, AWS Secrets Manager သုံးရပါမယ်).
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
Database password ကို Secret အနေနဲ့ create လုပ်ပြီး Pod ထဲမှာ env variable အဖြစ် ချိတ်ဆက်ယူနိုင်ပါတယ်။ Secret YAML file ကို git repository ထဲ commit မလုပ်ပါနှင့် — base64 encode ထားရုံနဲ့ 'လုံခြုံပြီ' လို့ မထင်ပါနှင့်၊ decode ချက်ချင်းလုပ်လို့ရလို့ git history ထဲမှာ တွေ့ချင်ရင် ချက်ချင်းပေါ်ပါလိမ့်မယ်။
အတူတူ ကြည့်မယ်
# Create a Secret from literal values (kubectl base64-encodes it for you)
kubectl create secret generic db-secret \
--from-literal=DB_PASSWORD=super-secret-value
# See it exists (value is hidden by default)
kubectl get secret db-secret
# Decode it yourself (proves base64 is not real encryption)
kubectl get secret db-secret -o jsonpath='{.data.DB_PASSWORD}' | base64 --decode$ kubectl get secret db-secret
NAME TYPE DATA AGE
db-secret Opaque 1 5s၅ မိနစ် စမ်းကြည့်
Secret တစ်ခု create လုပ်ပြီး `base64 --decode` နဲ့ decode ပြန်ကြည့်ကာ 'base64 က encryption မဟုတ်ဘူး' ဆိုတာ ကိုယ်တိုင် သက်သေပြကြည့်ပါ။
သတိလေးတစ်ချက်
Secret ကို logs, error message, third-party tool ထဲ မတော်တဆ leak ဖြစ်နိုင်ကြောင်း သတိထားပါ — application code ထဲမှာ Secret value ကို console.log/print မလုပ်မိအောင် သတိထားပါ။