build process ထဲကို environment variable တွေ ထိုးသွင်းတာက... standard ခေတ်သစ်တွင်လေ့ကျင့်ခြင်း CI/CD pipelines. အဖွဲ့များသည် build လုပ်ငန်းစဉ်ထဲသို့ environment variable များကို ထိုးသွင်းပြီး secrets၊ tokens နှင့် runtime configuration များကို hardcoding တန်ဖိုးများမပါဘဲ builds များထဲသို့ ပေးပို့သည်။ မျက်နှာပြင်ပေါ်တွင် ၎င်းသည် ရိုးရှင်းပြီး ဘေးကင်းသော ပုံစံတစ်ခုဟု ထင်ရသည်။
သို့သော် လက်တွေ့တွင် ၎င်းသည် ဆော့ဖ်ဝဲလ် ထောက်ပံ့ရေးကွင်းဆက်တွင် လျှော့တွက်ခံရဆုံး အန္တရာယ်များထဲမှ တစ်ခုဖြစ်လေ့ရှိသည်။
အဘယ်ကြောင့်ဆိုသော် အဖွဲ့များသည် တည်ဆောက်မှုလုပ်ငန်းစဉ်ထဲသို့ ပတ်ဝန်းကျင်ပြောင်းလဲမှုများကို ထည့်သွင်းလိုက်သည်နှင့် ထိုတန်ဖိုးများကို သီးခြားခွဲထားခြင်း ရပ်တန့်သွားသောကြောင့်ဖြစ်သည်။ ၎င်းတို့သည် ၎င်းအတွင်းတွင် လည်ပတ်နေသော အရာအားလုံးအတွက် ဝင်ရောက်အသုံးပြုနိုင်မည်ဖြစ်သည်။ pipeline။ script များ၊ CLI tool များ၊ third-party action များနှင့် dependencies များကိုပင် build လုပ်ခြင်းဖြင့် ၎င်းတို့ကို ဖတ်နိုင်သည်။
ဒီမှာ အရာအားလုံး ပြိုကွဲစပြုလာပြီ။
ဒီလမ်းညွှန်မှာ အဖွဲ့တွေက build process ထဲကို environment variable တွေကို ဘယ်လို inject လုပ်လဲဆိုတာကို လက်တွေ့ကျကျ ရှင်းပြထားပါတယ်။ pipelineယိုစိမ့်မှုများ အမှန်တကယ်ဖြစ်ပွားသည့်နေရာနှင့် ဖွံ့ဖြိုးတိုးတက်မှုကို နှောင့်နှေးခြင်းမရှိဘဲ တည်ဆောက်မှုလုပ်ငန်းစဉ်ကို မည်သို့လုံခြုံအောင်ပြုလုပ်ရမည်နည်း။
Build Process ထဲကို Environment Variables တွေ ထိုးသွင်းခြင်းဆိုတာ ဘာကိုဆိုလိုတာလဲ။
၎င်း၏ အဓိကအချက်မှာ ပတ်ဝန်းကျင် variable များကို ထိုးသွင်းခြင်းဆိုသည်မှာ တန်ဖိုးများကို ထဲသို့ ပေးပို့ခြင်းဖြစ်သည် pipeline runtime မှာ ဖြစ်တဲ့အတွက် job တွေက execution လုပ်နေစဉ်အတွင်း ဝင်ရောက်ကြည့်ရှုနိုင်ပါတယ်။
ဤတန်ဖိုးများတွင် API သော့များ၊ ဒေတာဘေ့စ်အထောက်အထားများ၊ တိုကင်များ သို့မဟုတ် ပတ်ဝန်းကျင်အလိုက် ပြင်ဆင်မှုများ ပါဝင်လေ့ရှိသည်။ ၎င်းတို့ကို ကုဒ်တွင် တိုက်ရိုက်သိမ်းဆည်းမည့်အစား၊ CI/CD တည်ဆောက်မှုစတင်သောအခါ စနစ်သည် ၎င်းတို့ကို တက်ကြွစွာ တင်သည်။
ဒါက တကယ့်ပြဿနာကို ဖြေရှင်းပေးပါတယ်။ ကုဒ်ကို သန့်ရှင်းစွာထားရှိပြီး ထပ်တူကျမှုကို ရှောင်ရှားကာ pipeline staging၊ testing နှင့် production environment များကို ဖြတ်၍ run ရန်။
သို့သော် ဤမော်ဒယ်သည် ယခုအခါ မရှိတော့သော ယူဆချက်တစ်ခုပေါ်တွင် မူတည်သည်- တည်ဆောက်မှုပတ်ဝန်းကျင်ကို ထိန်းချုပ်ထားပြီး ခန့်မှန်းနိုင်သည် ဟူသော ယူဆချက်။
ခေတ်သစ် pipelines တွေက ဘယ်ဟာမှ မဟုတ်ပါဘူး။ သူတို့မှာ အဆင့်များစွာ၊ ပြင်ပပေါင်းစပ်မှုများနှင့် ကုဒ်ကို တက်ကြွစွာ လုပ်ဆောင်သည့် မှီခိုမှုများ ပါဝင်သည်။ ရလဒ်အနေဖြင့် variable တစ်ခုကို ထိုးသွင်းလိုက်သည်နှင့် ၎င်းသည် configuration သက်သက် မဟုတ်တော့ပါ။ ၎င်းသည် execution context ၏ အစိတ်အပိုင်းတစ်ခု ဖြစ်လာသည်။
တည်ဆောက်မှုလုပ်ငန်းစဉ်တွင် ပတ်ဝန်းကျင်ပြောင်းလဲမှုများ ယိုစိမ့်နေသည့်နေရာ
ပေါက်ကြားမှုအများစုဟာ တစ်စုံတစ်ယောက်က လျှို့ဝှက်ချက်ကို ပွင့်ပွင့်လင်းလင်း ဖော်ထုတ်လိုက်လို့ ဖြစ်တာမဟုတ်ပါဘူး။ pipelineဆော့ဖ်ဝဲရေးသားသူများ အပြည့်အဝ မမျှော်လင့်ထားသော နည်းလမ်းများဖြင့် ပြုမူကြသည်။
ဥပမာအားဖြင့်၊ developer သည် ပျက်ကွက်နေသော build တစ်ခုကို debug လုပ်ရန် verbose logging ကိုဖွင့်နိုင်သည်။ CLI tool သည် environment variable များကို ၎င်း၏ output ၏ တစ်စိတ်တစ်ပိုင်းအဖြစ် print ထုတ်နိုင်သည်။ dependency သည် ၎င်း၏ execution ၏ တစ်စိတ်တစ်ပိုင်းအဖြစ် process variable များကို တိတ်တဆိတ်ဝင်ရောက်နိုင်သည်။
ဤလုပ်ဆောင်ချက်များထဲမှ တစ်ခုမျှ သီးခြားစီတွင် သံသယဖြစ်ဖွယ်ပုံမပေါ်ပါ။ သို့သော် ၎င်းတို့အတူတကွ ယိုစိမ့်မှုလမ်းကြောင်းများစွာကို ဖန်တီးပေးပါသည်။
လျှို့ဝှက်ချက်များသည် အောက်ပါအခြေအနေများတွင် အဆုံးသတ်နိုင်သည်-
- သိမ်းဆည်းပြီး အညွှန်းတပ်ထားသော မှတ်တမ်းများကို တည်ဆောက်ပါ
- debug output ကို အဖွဲ့များအကြား မျှဝေထားသည်
- ပြင်ပကုဒ်ကို လုပ်ဆောင်သော ပြင်ပ CI လုပ်ဆောင်ချက်များ
- ထည့်သွင်းခြင်း သို့မဟုတ် လည်ပတ်နေစဉ်အတွင်း လုပ်ဆောင်သော မှီခိုမှုများ
- တည်ဆောက်စဉ်အတွင်း ဖြစ်ပေါ်လာသော ယာယီပစ္စည်းများ
လျှို့ဝှက်ချက်တစ်ခုသည် မှတ်တမ်းများတွင် ပေါ်လာသည်နှင့် ၎င်းသည် သိမ်းဆည်းထားနိုင်ခဲသည်။ မှတ်တမ်းများကို စနစ်များစွာတွင် ကူးယူ၊ သိမ်းဆည်းပြီး ထိန်းသိမ်းထားလေ့ရှိသည်။ ထိုအချိန်တွင် ဖော်ထုတ်မှုသည် မူရင်းထက် များစွာကျော်လွန်သွားပါသည်။ pipeline.
ထို့ကြောင့် ပတ်ဝန်းကျင်ပြောင်းလဲမှုယိုစိမ့်မှုများကို နောက်ကျပြီးမှနှင့် ပျက်စီးမှုဖြစ်ပွားပြီးနောက်တွင် မကြာခဏတွေ့ရှိလေ့ရှိသည်။
ဘာကြောင့် Teams တွေက Build Process ထဲကို Environment Variables တွေ ထိုးသွင်းရတာလဲ။
ဤအန္တရာယ်များရှိနေသော်လည်း အဖွဲ့များသည် ပတ်ဝန်းကျင်ပြောင်းလဲမှုထည့်သွင်းခြင်းအပေါ် များစွာမှီခိုအားထားရသည်။ ကောင်းမွန်သောအကြောင်းပြချက်လည်းရှိသည်။
အဲဒါကိုလုပ်နိုင်ပါတယ် pipelineပြောင်းလွယ်ပြင်လွယ်ရှိစေရန်အတွက် တစ်ခုတည်းသော workflow သည် မတူညီသောပတ်ဝန်းကျင်များနှင့် လိုက်လျောညီထွေဖြစ်အောင် ပြုလုပ်နိုင်ပြီး ဝန်ဆောင်မှုများစွာကို စစ်မှန်ကြောင်းအထောက်အထားပြနိုင်ပြီး ကုဒ်ကို မပြင်ဆင်ဘဲ အပြုအမူကို ပြောင်းလဲနိုင်သည်။
အလျင်အမြန်ပြောင်းလဲနေသော DevOps ပတ်ဝန်းကျင်များတွင် ဤပြောင်းလွယ်ပြင်လွယ်ရှိမှုသည် မရှိမဖြစ်လိုအပ်ပါသည်။ သို့သော် ပြောင်းလွယ်ပြင်လွယ်ရှိမှုသည် အမြဲတမ်း အပေးအယူများနှင့်အတူ တွဲပါလာပါသည်။ ပိုမိုပြောင်းလဲလွယ်သော pipeline ဖြစ်လာလေလေ၊ ၎င်းအတွင်း၌ဖြစ်ပျက်နေသည်များကို ထိန်းချုပ်ရန် ပိုမိုခက်ခဲလေလေဖြစ်သည်။ နောက်ထပ်အဆင့်တိုင်း၊ ပေါင်းစည်းမှု သို့မဟုတ် မှီခိုမှုတိုင်းသည် အရေးကြီးဒေတာများကို ဝင်ရောက်ကြည့်ရှုနိုင်သည့်နေရာအရေအတွက်ကို တိုးစေသည်။
ရလဒ်အနေဖြင့်၊ environment variable injection သည် configuration အသေးစိတ်မှ လုံခြုံရေးဆိုင်ရာ စိုးရိမ်မှုသို့ ပြောင်းလဲသွားသည်။
Build Process ထဲသို့ Environment Variables များ ထိုးသွင်းသည့်အခါ အဖြစ်များသော အန္တရာယ်များ
အန္တရာယ်များသည် သီအိုရီအရ မဟုတ်ပါ။ ၎င်းတို့သည် လက်တွေ့တွင် ပေါ်လာပါသည်။ pipelineနေ့တိုင်း။
လျှို့ဝှက်ချက်များ မှတ်တမ်းများထဲသို့ ပေါက်ကြားခြင်း
မှတ်တမ်းများသည် တစ်ခုအပါအဝင်ဖြစ်သည် ထိတွေ့မှု၏ အဖြစ်အများဆုံးရင်းမြစ်များDebug flags များ၊ CLI tools များနှင့် stack traces များသည် developer များသတိမပြုမိဘဲ sensitive values များကို မကြာခဏဖော်ပြလေ့ရှိသည်။
တစ်ကြိမ်ဖော်ထုတ်လိုက်သည်နှင့် ထိုတန်ဖိုးများသည် စနစ်များတစ်လျှောက် လျင်မြန်စွာ ပျံ့နှံ့သွားသည်။
အလွန်အကျွံဝင်ရောက်ခွင့်
များသော pipelines သည် အလုပ်အားလုံးအတွက် variable အားလုံးကို ဖော်ထုတ်သည်။ ၎င်းသည် မလိုအပ်သော အန္တရာယ်များကို ဖန်တီးပေးသည်။
တစ်ဆင့် ချိုးဖောက်ခံရပါက ၎င်းတွင် အမှန်တကယ် မလိုအပ်သော အထောက်အထားများကို ဝင်ရောက်ကြည့်ရှုနိုင်သည်။
မှီခိုမှုနှင့် လုပ်ဆောင်ချက်အလွဲသုံးစားပြုမှု
ခေတ်သစ် pipelineသည် third-party tools များနှင့် integrations များအပေါ် များစွာမှီခိုနေရသည်။ ဤ components များသည် သင်၏ secrets များနှင့် တူညီသော environment အတွင်းတွင် လည်ပတ်သည်။
၎င်းတို့ထဲမှ တစ်ခုက မကောင်းသောအပြုအမူပြုလုပ်ပါက ၎င်းသည် ထိုးသွင်းထားသော variable များကို တိတ်ဆိတ်စွာ ဝင်ရောက်ကြည့်ရှုနိုင်သည်။
အဆိုအရ OWASPထောက်ပံ့ရေးကွင်းဆက်တိုက်ခိုက်မှုများသည် တည်ဆောက်မှုလုပ်ငန်းစဉ်တွင် ယုံကြည်ရသောအစိတ်အပိုင်းများကို မကြာခဏ အသုံးချလေ့ရှိသည်။ ပတ်ဝန်းကျင်ပြောင်းလဲမှုများသည် မကြာခဏ အလွယ်ကူဆုံးပစ်မှတ်ဖြစ်လာလေ့ရှိသည်။
ကုဒ်ထဲက Fallback လျှို့ဝှက်ချက်များ
variable များ ပျောက်ဆုံးနေခြင်းကြောင့် build များ မအောင်မြင်သောအခါ၊ အဖွဲ့များသည် တစ်ခါတစ်ရံတွင် fallback တန်ဖိုးများကို ထည့်သွင်းလေ့ရှိသည် pipelineပြေးနေသည်။
အချိန်ကြာလာတာနဲ့အမျှ ဒီတန်ဖိုးတွေဟာ commitရေရှည်ထိတွေ့မှုကို ဖန်တီးပေးခြင်း၊ ဖြန့်ကျက်ခြင်း။
Build Process ထဲသို့ Environment Variables များကို လုံခြုံစွာထည့်သွင်းရန် အကောင်းဆုံးလုပ်ဆောင်မှုများ
| အမျိုးအစား | အကောင်းဆုံးလေ့ကျင့်မှု | အဘယ်ကြောင့်ဒါဟာကိစ္စ |
|---|---|---|
| လျှို့ဝှက်ချက်များသိုလှောင်ခြင်း | vault သို့မဟုတ် CI လျှို့ဝှက်ချက်များမန်နေဂျာကို အသုံးပြုပါ | ကုဒ်တွင် ပေါ်လွင်မှုကို ကာကွယ်ပေးသည် |
| အသုံးပြုခွင့်ကိုထိန်းချုပ်မယ် | အလုပ်တစ်ခုစီအတွက် ဝင်ရောက်ခွင့်ကို ကန့်သတ်ပါ | တိုက်ခိုက်မှုမျက်နှာပြင်ကိုလျှော့ချ |
| သစ်ထုတ်လုပ်ရေး | အာရုံခံနိုင်စွမ်းတန်ဖိုးများကို ဖုံးကွယ်ပါ | ပေါက်ကြားမှုကို ကာကွယ်ပေးသည်။ |
| အတိုင်းအတာနှင့် သက်တမ်း | သက်တမ်းတို အထောက်အထားများကို အသုံးပြုပါ | ပေါက်ကွဲမှုအချင်းဝက်ကို ကန့်သတ်ထားသည် |
| validation | variable များ ပျောက်ဆုံးနေပါက fail build များ | မလုံခြုံသော နောက်ပြန်လှည့်မှုများကို ရှောင်ရှားသည် |
ဘာကြောင့် အများအပြား CI/CD လုံခြုံရေးကိရိယာများ Miss Env Var ယိုစိမ့်မှုများ
လုံခြုံရေးကိရိယာအများစုသည် တည်ဆောက်မှုပြီးစီးပြီးနောက် scanning code သို့မဟုတ် dependencies များကို အာရုံစိုက်ကြသည်။
သို့သော်၊ environment variable leak များသည် execution လုပ်နေစဉ်အတွင်း ဖြစ်ပေါ်လေ့ရှိသည်။
A pipeline လျှို့ဝှက်ချက်များကို မှန်ကန်စွာထည့်သွင်းနိုင်ပြီး မှတ်တမ်းများ သို့မဟုတ် runtime အပြုအမူမှတစ်ဆင့် ဖော်ထုတ်နိုင်သည်။ စကင်နာက ပြဿနာကို သိရှိသည့်အချိန်တွင် လျှို့ဝှက်ချက်သည် ခိုးယူခံထားရပြီးဖြစ်နိုင်သည်။
ဤသည်က ရောဂါရှာဖွေခြင်းနှင့် ကာကွယ်ခြင်းကြားတွင် ကွာဟချက်ကို ဖန်တီးပေးသည်။
အဖွဲ့များသည် လုပ်ဆောင်နေစဉ်အတွင်း ထိန်းချုပ်မှုများ လိုအပ်သည် pipeline ပြီးဆုံးပြီးနောက် မဟုတ်ပါ။
ပတ်ဝန်းကျင်ပြောင်းလဲနိုင်သော ထိုးသွင်းခြင်းကို ကျွန်ုပ်တို့ မည်သို့ အကြံပြုသနည်း။
လက်တွေ့တွင် ထိရောက်သောကာကွယ်မှုသည် တသမတ်တည်းရှိသော မူအနည်းငယ်အပေါ် မူတည်ပါသည်။
လျှို့ဝှက်ချက်တွေကို အပြင်မှာ သိမ်းထားပါ pipeline။ ၎င်းတို့ကို runtime တွင်သာ ထိုးသွင်းပါ။ အနည်းဆုံးလိုအပ်သော scope အတွင်း ဝင်ရောက်ခွင့်ကို ကန့်သတ်ပါ။ ဖြစ်နိုင်သည့်အခါတိုင်း ရေတိုအထောက်အထားများကို အသုံးပြုပါ။
တစ်ချိန်တည်းမှာပဲ ဘယ်လိုစောင့်ကြည့်ရမလဲ pipelines ဝင်ရောက်ခွင့် အာရုံခံနိုင်စွမ်း မြင့်မားသော တန်ဖိုးများ။ မမျှော်လင့်ထားသော ဝင်ရောက်ခွင့် ပုံစံများသည် ယိုစိမ့်မှု မမြင်ရမီ အန္တရာယ်ကို မကြာခဏ ညွှန်ပြလေ့ရှိသည်။
ဤချဉ်းကပ်မှုသည် လုံခြုံရေးကို တုံ့ပြန်ထောက်လှမ်းခြင်းမှ တက်ကြွသောထိန်းချုပ်မှုသို့ ပြောင်းလဲပေးသည်။
Xygeni က ဘယ်လိုကာကွယ်ပေးသလဲ CI/CD လျှို့ဝှက်ထိုးဆေး
တည်ဆောက်ပြီးနောက် စကင်ဖတ်ခြင်းကိုသာ အားကိုးမည့်အစား Xygeni သည် မည်သို့ ခွဲခြမ်းစိတ်ဖြာသည် pipelines သည် ၎င်းတို့ run နေစဉ် environment variable များကို အသုံးပြုသည်။ ၎င်းတွင် secret များသည် jobs များတစ်လျှောက် မည်သို့ရွေ့လျားသည်၊ build step များသည် ၎င်းတို့ကို မည်သို့ဝင်ရောက်သည်၊ နှင့် dependencies များသည် execution environment နှင့် မည်သို့အပြန်အလှန် ဆက်သွယ်သည်တို့ ပါဝင်သည်။
ဥပမာအားဖြင့် Xygeni သည် မည်သည့်အချိန်တွင် ထောက်လှမ်းနိုင်သည် pipeline အဆင့်တစ်ခုသည် မှတ်တမ်းများထဲသို့ အရေးကြီးသောတန်ဖိုးများကို ပုံနှိပ်ခြင်းအန္တရာယ်ရှိသည့်အခါ သို့မဟုတ် မှီခိုမှုတစ်ခုသည် မမျှော်လင့်ဘဲ အထောက်အထားများကို ဝင်ရောက်ရန်ကြိုးစားသည့်အခါတွင် variable များကို အလွန်အမင်း ကျယ်ပြန့်စွာ ဖော်ထုတ်သည်။
တစ်ချိန်တည်းမှာပဲ, guardrails မူဝါဒကို တိုက်ရိုက်အကောင်အထည်ဖော်ရန် pipeline။ အဖွဲ့များသည် မလုံခြုံသော တည်ဆောက်မှုများကို ပိတ်ဆို့နိုင်သည်၊ သတ်မှတ်ထားသော အလုပ်များသို့ လျှို့ဝှက်ဝင်ရောက်ခွင့်ကို ကန့်သတ်နိုင်သည်၊ နှင့် ထုတ်လုပ်မှုမရောက်မီ အန္တရာယ်ရှိသော ဖွဲ့စည်းမှုပုံစံများကို ကာကွယ်နိုင်သည်။
ဘာလို့လဲဆိုတော့ ဒါက အတွင်းမှာပဲ ဖြစ်ပျက်နေလို့ပါ CI/CD workflow အရ developer များသည် ၎င်းတို့အလုပ်လုပ်ပုံကို ပြောင်းလဲရန် မလိုအပ်ပါ။ လုံခြုံရေးသည် ၎င်း၏ အစိတ်အပိုင်းတစ်ခု ဖြစ်လာသည် pipelineသီးခြားခြေလှမ်းတစ်ခု မဟုတ်ပါ။
ရလဒ်အနေဖြင့် အဖွဲ့များသည် လျှို့ဝှက်ချက်များကို မည်သို့အသုံးပြုသည်ကို မြင်သာလာကာ ၎င်းတို့ကို မည်သို့ဖော်ထုတ်မည်ကို ထိန်းချုပ်နိုင်ကာ ပို့ဆောင်မှုကို နှောင့်နှေးခြင်းမရှိဘဲ ပေါက်ကြားမှုအန္တရာယ်ကို လျှော့ချပေးပါသည်။
နောက်ဆုံးထင်မြင်ချက်များ
သို့သော်လည်း ၎င်းသည် မကြာခဏ သတိမထားမိသော အန္တရာယ်အလွှာတစ်ခုကိုလည်း မိတ်ဆက်ပေးပါသည်။
ပတ်ဝန်းကျင်ပြောင်းလဲမှုများကို အသုံးပြုရမည်၊ မရမည်ဆိုသည်မှာ စိန်ခေါ်မှုမဟုတ်ဘဲ အကောင်အထည်ဖော်နေစဉ်အတွင်း ၎င်းတို့၏ထိတွေ့မှုကို မည်သို့ထိန်းချုပ်ရမည်ဆိုသည့်အချက်ဖြစ်သည်။
ခေတ်သစ် DevOps ပတ်ဝန်းကျင်များတွင်၊ တည်ဆောက်မှုလုပ်ငန်းစဉ်အတွင်း ယိုစိမ့်မှုများကို ကာကွယ်ခြင်းသည် နောက်ပိုင်းတွင် ရှာဖွေတွေ့ရှိခြင်းထက် များစွာအရေးကြီးပါသည်။




