Thuta Learning
Cloud & Deployment
AdvancedDevOps & Toolsbeginner

Production Security နှင့် Access Control

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

  • Production Security နှင့် Access Control concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • Diagram ကို ဖတ်ပြီး architecture ထဲမှာ request/data ဘယ်လိုစီးဆင်းသလဲ ခြေရာခံနိုင်ရန်
  • ကိုယ့် project အတွက် ဘယ်လို ဆုံးဖြတ်သင့်သလဲ ရှင်းပြနိုင်ရန်

နားလည်ထားရမယ့် အချက်

Production security ဆိုတာ layer အစုအဝေးတစ်ခုပါ၊ setting တစ်ခုတည်း မဟုတ်ပါဘူး။ Traffic ကို in-transit encrypt လုပ်တဲ့ HTTPS ဟာ non-negotiable ပါ၊ optional polish မဟုတ်ပါဘူး။

  • Authentication — မင်းဘယ်သူလဲ (login ဝင်တာ)။
  • Authorization — မင်းဘာလုပ်ခွင့်ရှိလဲ (login ပြီးရင် permission)။ ဒီနှစ်ခုကို ရောထွေးတာက bug ရဲ့ classic source။
  • Secret — password, API key, signing key — code ရဲ့ အပြင်ဘက်မှာ, env var ဒါမှမဟုတ် secrets manager ထဲမှာ, commit မလုပ်ရ။

Least privilege — user/service တိုင်းကို လိုအပ်တဲ့ permission ကိုပဲ ပေးပါ။ Firewall က network version ကို force ချပေးပါတယ် — တကယ်လိုအပ်တဲ့ port ကိုပဲ ဖွင့်ပါ။

CORS ဟာ authentication မဟုတ်ဘူး

CORS က cross-origin request အပေါ်က browser-enforced policy ပါ။ CORS ကို လုံးဝ ignore လုပ်တဲ့ script ဒါမှမဟုတ် curl လို non-browser client ကနေ API ကို ကာကွယ်မပေးပါဘူး — endpoint တိုင်းမှာ auth check အစစ် ဆက်လိုအပ်ပါတယ်။

Security header (CSP, HSTS) တွေက browser-enforced protection ထပ်ထည့်ပေးပါတယ်။ IAM — identity, role, permission, policy — ဆိုတာ ဘယ်သူ/ဘာက ဘာလုပ်နိုင်လဲ သတ်မှတ်ဖို့ vendor-neutral framework ပါ။

text
LAYERED PRODUCTION SECURITY
---------------------------
LAYERED PRODUCTION SECURITY
------------------------------

   internet
      |
      v
  +-----------------------------+
  |  HTTPS (encrypt in transit) |
  +-----------------------------+
      |
      v
  +-----------------------------+
  |  FIREWALL (only needed      |
  |  ports reach the server)    |
  +-----------------------------+
      |
      v
  +-----------------------------+
  |  IAM / LEAST PRIVILEGE      |
  |  (what each user/service    |
  |   can do once inside)       |
  +-----------------------------+
      |
      v
  [ APPLICATION + DATA ]

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

CORS enforcement ရဲ့ core idea က incoming Origin header ကို ယုံကြည်ရတဲ့ site list နဲ့ စစ်တာပါ။

Allowed origin တစ်ခုက 'allow' ရပြီး header အဖြစ် ပြန် echo ခံရပါတယ်။ Rejected origin က 'reject' ရပြီး header ဘာမှ မရှိပါဘူး — browser ကို response ကို block လုပ်ဖို့ ပြောပြပါတယ်။

CORS က browser ကိုသာ သက်ဆိုင်တယ်

သင့် API ကို တိုက်ရိုက် ခေါ်တဲ့ script ဒါမှမဟုတ် server တစ်ခုက browser လုပ်သလို Origin header ဘယ်တော့မှ ပို့မပါဘူး။ Endpoint တိုင်းမှာ authentication/authorization အစစ် ဆက်လိုအပ်ပါတယ်။

Production Security အခြေခံများ

အတူတူ စမ်းရေးကြည့်မယ်

javascript
function createCorsChecker(allowedOrigins) {
  return function checkOrigin(origin) {
    const allowed = allowedOrigins.includes(origin);
    return {
      origin,
      decision: allowed ? "allow" : "reject",
      headerSent: allowed ? origin : null,
    };
  };
}

const checkOrigin = createCorsChecker([
  "https://app.example.com",
  "https://admin.example.com",
]);

console.log(JSON.stringify(checkOrigin("https://app.example.com")));
console.log(JSON.stringify(checkOrigin("https://evil-clone.com")));
You should see
{"origin":"https://app.example.com","decision":"allow","headerSent":"https://app.example.com"}
{"origin":"https://evil-clone.com","decision":"reject","headerSent":null}
(output က locale နှစ်ခုစလုံးအတွက် တူညီပါတယ်)

၅ မိနစ် စမ်းကြည့်

Wildcard subdomain case ထပ်ထည့်ပါ — '*.example.com' နဲ့ ကိုက်ညီတဲ့ origin ဘယ်ဟာမဆို allow လုပ်ပါ။ createCorsChecker ကို ဒါ support ဖြစ်အောင်ပြင်ပြီး 'https://staging.example.com' နဲ့ 'https://example.com.evil.com' နဲ့ test လုပ်ပါ။

သတိလေးတစ်ချက်

API endpoint အတွက် CORS ကိုပဲ တစ်ခုတည်း protection အဖြစ် အားကိုးထားပြီး curl request တစ်ခုက ဒါကို လုံးဝ ကျော်နိုင်တာ တွေ့ရတာ။

Service ဒါမှမဟုတ် user တစ်ယောက်ကို task အတွက် တကယ်လိုအပ်တဲ့ specific permission အစား 'အချိန်ချွေတာဖို့' admin permission ကျယ်ကျယ်ပြန့်ပြန့် ပေးထားတာ။

MDN — Cross-Origin Resource Sharing (CORS)Cloud & Deployment

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

  • API endpoint အတွက် CORS ကိုပဲ တစ်ခုတည်း protection အဖြစ် အားကိုးထားပြီး curl request တစ်ခုက ဒါကို လုံးဝ ကျော်နိုင်တာ တွေ့ရတာ။
  • Service ဒါမှမဟုတ် user တစ်ယောက်ကို task အတွက် တကယ်လိုအပ်တဲ့ specific permission အစား 'အချိန်ချွေတာဖို့' admin permission ကျယ်ကျယ်ပြန့်ပြန့် ပေးထားတာ။
  • Localhost မှာ အလုပ်လုပ်တာနဲ့ Production မှာ အလိုအလျောက်အလုပ်လုပ်မယ်လို့ မယူဆပါနှင့် — environment, network, database, security ကွာခြားချက်တွေ ရှိနိုင်ပါတယ်။

လေ့ကျင့်ခန်း

Wildcard subdomain case ထပ်ထည့်ပါ — '*.example.com' နဲ့ ကိုက်ညီတဲ့ origin ဘယ်ဟာမဆို allow လုပ်ပါ။ createCorsChecker ကို ဒါ support ဖြစ်အောင်ပြင်ပြီး 'https://staging.example.com' နဲ့ 'https://example.com.evil.com' နဲ့ test လုပ်ပါ။

You'll know it worked when: {"origin":"https://app.example.com","decision":"allow","headerSent":"https://app.example.com"} {"origin":"https://evil-clone.com","decision":"reject","headerSent":null} (output က locale နှစ်ခုစလုံးအတွက် တူညီပါတယ်)

Production Security နှင့် Access Control | Thuta Learning