Thuta Learning
ရှာဖွေရန်
IntermediateDevOpsintermediate

Secrets

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Secrets ကို ကြောက်စရာမလိုအောင် နားလည်မယ်
  • ကိုယ်တိုင် kubectl command/YAML ကို run ကြည့်တတ်မယ်
  • Real project ထဲမှာ ဒီ concept ကို ချက်ချင်း အသုံးချတတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

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 ထဲမှာ တွေ့ချင်ရင် ချက်ချင်းပေါ်ပါလိမ့်မယ်။

အတူတူ ကြည့်မယ်

bash
# 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
You should see
$ 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 မလုပ်မိအောင် သတိထားပါ။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Secret YAML file ကို git repository ထဲ commit လုပ်မိခြင်း — .gitignore ထဲ ထည့်ထားရပါမယ်
  • base64 encode ကို 'encryption' လို့ ထင်ပြီး Secret ကို ChatGPT/support ticket/screenshot ထဲ share ခြင်း

အခု ကိုယ်တိုင် စမ်းကြည့်

Secret တစ်ခု create လုပ်ပြီး `base64 --decode` နဲ့ decode ပြန်ကြည့်ကာ 'base64 က encryption မဟုတ်ဘူး' ဆိုတာ ကိုယ်တိုင် သက်သေပြကြည့်ပါ။

You'll know it worked when: $ kubectl get secret db-secret NAME TYPE DATA AGE db-secret Opaque 1 5s

Secrets | Thuta Learning