Gịnị nwere ike ime na-ezighi ezi? CI/CD pipelines?

Njikọta na-aga n'ihu na nnyefe na-aga n'ihu (CI/CD) pipelines bụ ntọala nke nzukọ ngwanrọ ọ bụla nke na-ewulite ngwanrọ n'ụzọ "oge a". Mmepụta akpaaka na-enye ike dị ukwuu, mana ọtụtụ ndị mmepe anaghị eburu ibu ọrụ ọ gụnyere.

Mmepụta: Ee, anyị na-anabata CI/CD security nke ọma ma nwee njikwa siri ike na ndị na-eji koodu, nyochaa commits tupu njikọta; ọrụ na pipelinendị ọrụ dị elu na-elekọta s, ha na-ahụ na ha anaghị ekpughe ihe nzuzo n'ime pipelines. Ndị ọrụ maara ihe ahụ tinyere ngwaọrụ ahụ. Gịnị nwere ike imebi?

Ezigbo onye mmepụta ihe, CI/CD Usoro dị mgbagwoju anya. Mwakpo ya sara mbara dọtara ndị na-eme ihe ọjọọ. Ọ ka mma ịkpachara anya ma ghara inwe obi ike gabiga ókè.

A na-echekwa nhazi ndabara mgbe ụfọdụ ma bụrụ ezigbo enyi maka ndị na-agba ọsọ mbanye anataghị ikike. CI/CD pipeline isi mmalite, na nhazi nke sistemụ ahụ, ma ọ bụ gburugburu usoro na ọnọdụ nke pipeline na otu esi akpalite ya.

N'isiokwu a, anyị ga-etinye onwe anyị n'ọnọdụ ndị na-eme ihe nkiri ọjọọ. Chee echiche na anyị na-agụ echiche nke M3M3N70 (Memento Mori?) na Ọnụma apịtị ebe dị n'ime weebụ gbara ọchịchịrị, ikekwe n'asụsụ na-abụghị nke ọdịda anyanwụ, mana echefula na ihe ọjọọ agbasaala n'ụwa niile.

 

N'oge ochie dị mma, ọ dị nnọọ mfe…

M3M3N70: Laghachi azụ n'oge ochie dị mma, azụmaahịa anyị dị nnọọ mfe… Oge efu bụ ihe na-adịghị mma, ngwa ndị ahụ mepere emepe nke ukwuu, anyị nwekwara ike ịgagharị n'akụkụ ozugbo.

Ọnụma apịtị: Fu#@Hell ! Ụfọdụ ndị mbe na-eche echiche banyere oke bekee, mana ihe agbanweela. Ndị ukwu ahụ tinyere aka nke ukwuu n'ihe gbasara AppSec ahụ.

M3M3N70: Ee. Mana ndị nzuzu ọhụrụ bụ ndị mmepe. Maka anyị, ọ dịrịla anyị mfe ịhọrọ ngwaọrụ ndị a ji. CI, karịsịa, bụ ebe a na-egwupụta ọla edo! Ihe nrịbama ịnweta igwe ojii, SCM nzere, paswọọdụ nchekwa data mmepụta, igodo nzuzo SSH, nzere ndị ọrụ CI ndị ọzọ… Ịwụli elu site na ihe ndị na-agwụ ike gaa n'ezi ihe bụ ihe na-adịghị mkpa.

Akpaaka maka iwuli, nnwale na itinye ngwanrọ na CI/CD Ngwaọrụ ahụ na-achọkarị izipu ihe nzuzo nye iwu n'usoro. Ọtụtụ mgbe, a na-ekpughe ha, nke nwere ihe ọjọọ.

Pipelines chọrọ ihe nzuzo nke a na-agbapụta mgbe ụfọdụ

M3M3N70: The code monkeys slipped their AWS keys in a pipeline on a GitHub commit, later they removed the thing but not changed git history. For our scripts it was trivial to scan the history, grab the key and wreak havoc.

Ikekwe oge ochie dị mma bụ ịchọta na akụkọ ihe mere eme Git .env faịlụ (onye mmepụta ahụ chefuru itinye ya na .gitignore):

AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=wJalrXUtn...
AWS_REGION=us-east-1
APP_FOLDER=...
S3BUCKET=...

nke ejiri mee ihe na usoro ọrụ GitHub .github/deploy.yaml nke nwere ihe dị ka nke a:

jobs:
build:
name: Automated build and deployment into AWS
runs-on: ubuntu-22.04
steps:
# Load environment from .env file
- id: dotenv
uses: falti/dotenv-action@v1.0.2

- name: Configure AWS Credentials
uses:
with:
args: --acl public-read --follow-symlinks --delete
aws-access-key-id: $
aws-secret-access-key: $
aws-region: $

# ... build steps skipped ...

- name: Upload compiled code for deployment
working-directory: $/packaged_app
run: aws s3 cp my-app.zip s3://$

- name: Deploy the app
run: aws deploy create-deployment ...

M3M3N70: wow! Igodo ndị ahụ na-arụ ọrụ! Anyị buru ụzọ nwalee mgbanwe inocuos na ngwa ahụ, wee tinye ihe mgbochi ahụ n'ihi na ndị ahụ yiri ka ha amaghị. Bingo! Lee mkpọsa dị egwu…

Onye ome ihe ọjọọ ahụ ji igodo AWS bulite ngwa agbanwere agbanwe yana malware wee gbaa iwu deployment na asambodo ndị dị otú ahụ. Ihe nzuzo ndị a gbapụtara, yana ozi dị na ya pipeline"Lee mkpọsa a!" o nwere ike ịpụta na Memento tinyere ọdachi n'ahụ onye ogbenye ahụ e gburu.

Ihe Memento gwara anyị ebe a bụ na ozugbo mmịpụta nzuzo mere, dịka igodo nnweta AWS na ihe atụ ahụ, ị ​​ga-akagbu ihe nzuzo ahụ (tụgharịa igodo ndị dị n'elu) ozugboE nwere mgbe niile windo mkpughe n'etiti mmiri na-agbapụta commit na nzuzo nke enweghị ike ime ihe ọjọọ; Ịdegharị akụkọ ihe mere eme Git siri ike (ọbụna steeti aka ike kacha sie ike gbalịrị idegharị akụkọ ihe mere eme dị otu a, mana o nweghị isi) ma eleghị anya ọ naghị arụ ọrụ nke ọma (ndị enyi anyị nwere ike idekọ ihe n'ihu ebe nchekwa ahụ na mkpughe nzuzo ahụ. commit) Tụgharịa igodo ozugbo, ma kpee ekpere mgbe ị na-agụ ndekọ ihe omume maka akaụntụ ezubere iche n'oge windo mkpughe!

O yikarịrị ka òtù kwesịrị mmachibido iji ihe nzuzo ogologo oge na CI/CD pipelines, ma jiri ihe njirimara oge dochie ha. N'ihe atụ gara aga na igodo AWS na ihe omume GitHub, ọ ka mma iji Onye na-eweta OpenID Connect (OIDC) iji nweta asambodo dị mkpirikpi dị mkpa maka ihe omume.

Ọnụma apịtị: I nwere nnukwu ihu ọma! Ịmịpụta edemede nwere igodo siri ike bụ ihe a na-emekarị n'oge ochie, ọbụnadị na bọket S3 nke ọha na eze nwere ike ịnweta. Naanị ihe ị ga-eme bụ ịgafe ihe ndị dị na bọket ahụ ma mee ntakịrị ihe iji chọta ihe ndị na-atọ ụtọ.

Mgbe ụfọdụ, ebe e ji etinye ihe (bọket AWS S3 dị na ihe atụ a) na-emeghe maka ịgụ site n'aka ndị si mba ọzọ, n'ihi ntụpọ nhazi (nke a na-achọpụtaghị). Ọnụma apịtị eji mee ihe dị ka nke a:

aws s3 ls --recursive s3://<bucket_name>/<path>/ | \
awk '{print $4}' | \
xargs -I FNAME sh -c "echo FNAME; \
aws s3 cp s3://<bucket_name>/FNAME - | \
grep '<regex_pattern>'"

O nwere ike ịbụ na e kere bọket ahụ n'ime ihe nlereanya nhazi nke enwere ike inyocha ya ozugbo maka ntụpọ nchekwa.

Nhazi ndabara nke ngwaọrụ ahụ bụ ihe egwuregwu maka anyị

Iji nye ihe atụ doro anya, ka anyị kwuo maka ya Jenkins, otu n'ime ngwaọrụ CI kachasị ewu ewu.

Ọnụma apịtị: Ị chetara igbe "Enable Security" ahụ dị na Jenkins, na ole òtù ndị họọrọ ịghara ime ka ọ rụọ ọrụ maka ọdịmma? Na ndị ahụ "Onye ọ bụla nwere ike ime ihe ọ bụla"Njikọ ikike dị ka ndabara? Na mgbakwunye Jenkins ndị ahụ na-akpasu iwe, dị ka Ngwa mgbakwunye GitHub OAuthOnye haziri ya họọrọ ma "Nye ikike ịgụta ndị ọrụ niile akwadoro" na "Jiri ikike nchekwa GitHub", nke na-enye anyị ohere ịnweta ọrụ ha niile.

(Ndo, Jenkins, maka itinye gị dịka ihe atụ 😉

Mee ka ụkpụrụ nchekwa mara mma (ọbụna ma ọ bụrụ na ọ bụ ihe riri ahụ). Otu n'ime ha bụ Chekwaa na ndabara ụkpụrụ: njikwa kwesịrị ịdị na ntọala kachasị nchebe enwere ike. Nchekwa kwesịrị ịdị na ya CI/CD ngwaọrụ na pipelinesite na mmalite, kama ịbụ echiche mgbe e mesịrị. Mana ịdị mfe na ịdị mfe na-emegidekarị nchekwa.

Maka ikpe Jenkins, nkwenye arụnyere n'ime ya adịghị ike: ejila usoro nyocha arụnyere na Jenkins. Ọ ka mma ịhọrọ usoro nke ndị ọzọ (SAML, LDAP, Google ...), yana ngwa mgbakwunye ikike dabere na ọrụ (“RBAC”). Ma kpachara anya nke ukwuu na admin akaụntụ.

Lezienụ anya otú ọrụ na otu esi arụ ọrụ pipeline A na-ejikwa faịlụ dị na Jenkins. Otu ihe ahụ na Ngwa mgbakwunye nhazi-dị ka Koodu na faịlụ nhazi ya, nke metụtara nhazi Jenkins.

Ịkwaga site na onye na-akwado onwe ya CI/CD sistemụ gaa na ndị SaaS nke dabeere na igwe ojii na-ewepụ ụfọdụ ihe egwu nwere ike ime ka mmegharị n'akụkụ dị n'ime netwọk nzukọ, mana agbakwunyere ndị ọzọ, dị ka imepe njikọ mpụga n'etiti sistemụ dị n'ime na ndị a na-emepụta CI/CD ngwaọrụ.

Òtù kwesịrị ime ihecise kwesịrị ekwesị n'ịkwadosi ike CI/CD sistemụ ahụ, na-amalite site na ntọala kachasị mma ma na-emepe nwayọ nwayọ site na ikike kacha nta achọrọ maka pipeline nzọụkwụ.

Ịhazi nchekwa na CI/CD Ngwaọrụ nwere ike ịdị mgbagwoju anya. Ọtụtụ nwere plugins ma ọ bụ ndọtị ndị nwere ọtụtụ adịghị ike ma chọọ ka emelite ha.

Ihe nyocha nchekwa na-ezighi ezi maka ngwaọrụ dị mgbagwoju anya, ma ọ bụ akara ngosi nwere ike inye aka.

Ịtinye koodu n'ime pipeline iwu maka ntụrụndụ na uru

M3M3N70: Ị jirila nlele koodu a na-atụkwasịghị obi, nke na-egosi na ihe omume na edemede ndị na-adịghị ike nwere ike ịdị mfe ịnweta ntụtụ iwu?

Nkebi a na-egosi na pipeline n'onwe ya nwere ike inwe mmejọ koodu nke na-enye ndị omekome ọjọọ ohere itinye mmejọ koodu aka ike na pipeline na-enweghị na-agbanwe agbanwe pipeline isi mmalite onwe yaDịka ọmụmaatụ iji PR

Ihe atụ mbụ nke otu usoro ọrụ GitHub adịghị mma:

# INSECURE. Provided as an example only.
on:
pull_request_target #1

jobs:
build:
name: Build and test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: $ #2

- uses: actions/setup-node@v1
- run: |
npm install #3
npm build
# ... more steps ...

Ijikọta pull_request_target ihe mkpali ọrụ site na ịlele PR nke a na-atụkwasịghị obi bụ omume dị ize ndụ nke nwere ike ibute nkwekọrịta nchekwa. N'ihe atụ, njikọta adịghị mma nke:

  • pull_request_target ihe omume, nke nwere ikike ide ihe na nzuzo ebe nchekwa ihe na ihe nzuzo ebe nchekwa ihe, ọbụlagodi site na ndụdụ mpụga, ma na-agba ọsọ n'ọnọdụ ebe nchekwa ihe nke PR,
  • lelee koodu PR site na isi mmalite, ebe nchekwa a na-atụkwasịghị obi,
  • kpalite edemede ọ bụla nke nwere ike ịrụ ọrụ na ọdịnaya PR na-achịkwa, dịka ọ dị na npm install, na
  • anaghị eji ọnọdụ eme ihe na-akpalite ihe pull_request_target ihe omume ga-agba ọsọ naanị ma ọ bụrụ na e kenyere ụdị akara 'a nwalere PR a' na PR (ndị ọrụ mpụga enweghị ike ịnye akara na PR).

Ihe atụ nke abụọ na-ewe ntinye a na-atụkwasịghị obi (site na nsogbu, okwu ma ọ bụ pull request) dị ka isi iyi maka arụmụka e zigara na pipeline iwu site na okwu. Nke a bụ pipeline ụdị adịghị ike nke ntụtụ iwu OS.

- name: Check title
run: |
title="$"
if [[ ! $title =~ ^.*:\ .*$ ]]; then
echo "Bad issue title"
exit 1
fi

Ọrụ ọsọ ahụ na-emepụta edemede shei nwa oge dabere na template ahụ, yana $ dochie ya, na-eme ka ọ dịrị mfe ịnweta ọgwụ mgbochi shell. Onye mwakpo nwere akaụntụ GitHub adịgboroja nwere ike ịkpata nsogbu na aha a"; bad_code_goes_here;#, na mmụba! 

Ọnụma apịtị: Oh, ndị ikom ahụ na-emepe ụzọ maka ịgba ọgwụ mgbochi site na imepe nsogbu...

E nwere adịghị ike mmejuputa koodu na omume GitHub, dịka gajira-comment, ugbu a edoziri ya. Biko gụọ "Ntinye a na-atụkwasịghị obi na usoro ọrụ GitHub" maka nkọwa zuru ezu.

Ụkpụrụ omume nke akụkọ ahụ: Echekwala ma ọ bụrụ na ị ga-akwụ ụgwọ ma wulite PR site na isi mmalite ndị a na-atụkwasịghị obi n'ebughị ụzọ lelee PR ahụ. 'Enweghị ntụkwasị obi' ebe a, belụsọ ma ọ bụrụ na ọ bụ n'okpuru nkwenye siri ike nke ebe o si bịa, nwere ike ịpụta akaụntụ onye nrụpụta ọ bụla nwere ike ịpụnara.

 

Mbugharị malware na-amaghị ama ebe a!

Mbunye na-aga n'ihu bụ njedebe akpaaka, mana njedebe ahụ nwere ike ịda mbà n'obi site na enweghị njikwa nkwenye kwesịrị ekwesị na pipeline igbaa.

Ihe egwu nke mbugharị akpaaka zuru oke site na isi mmalite commit na sistemụ mmepụta gụnyere ike itinye koodu ọjọọ na gburugburu mmepụta na-enweghị ịchọpụta ya, yana ike mmejọ na usoro ntinye iji kpata nsogbu ma ọ bụ nkwụsị.

Iji belata ihe egwu ndị a, a na-atụkarị aro ka òtù dị iche iche tinye "nkwụsị siri ike" n'usoro ntinye ha, nke chọrọ ihu mmadu tupu e wepụta ihe ndị a na-ewepụta n'ebe dị iche iche.

Ha na-emechi ụzọ

Ọnụma apịtị: Okwuntughe ndabara ndị ahụ na-enye ọṅụ na CI/CD A na-ehichapụ ngwaọrụ. /var/lib/jenkins/secrets/initialAdminPassword ugbu a bụ ụzọ na-adịghị mma. Ọtụtụ ngwaọrụ na-enye 2FA ugbu a, nke Covid mere ka ọ bụrụ ihe ama ama, ọbụnadị enwe koodu kachasị umengwụ na-eji ya!

M3M3N70Anyị na-alụso 2FA ọgụ, mana ọ dịghị mfe otú ahụ. Ọ na-esiri ike ịkpọ ndị ahụ asị, dịka "Scatter Swine" mere na TwilioSite na igodo WebAuthn, ọ na-esikwu ike karịa. Ma ọ dịkarịa ala, anyị nwere ike ịnwa ime ya zuru kuki iji zere MFA, mana ọ dị mkpa ịbanye n'ime igbe onye nrụpụta.

Nyocha nke Ọtụtụ Ihe bụ ezigbo nzọụkwụ n'ụzọ ziri ezi iji belata ihe egwu nke nzipu ozi nzuzo. Ọtụtụ n'ime ngwaọrụ DevOps nke oge a na-akwado MFA. Na igodo nyocha n'okpuru WebAuthn / U2F (lee Ọrụ FIDO2) bụ ikekwe nhọrọ kacha mma maka MFA na DevOps, ọ bụrụ na ejiri ya nke ọma.

Ọnụma apịtị: Ndị DevOps na-eteta. Ha nwere ihe "kacha nta" n'ọbara ha. Ha abụghịzi enwe koodu. Ndị nyocha na-ejide anyị ugbu a.

N'ezie, pipelines siri ike ugbu a karịa afọ ole na ole gara aga, e wepụrụ ihe omume na edemede adịghị ike, yana usoro nnwale nchekwa ndị ọzọ nke chọpụtara ọbụna ihe ndị na-atụfu anyị zoro ezo na nzuzo. commits na ngwugwu anyị nwụchiri.

Ajụjụ nye onye na-agụ akwụkwọ: usoro iwulite ngwanrọ site na isi mmalite na itinye ya na mmepụta ọ bụ azụmaahịa dị ize ndụ? Ị nwere ike ịhụ DevOps gị n'ọkwa nke oge dị mma maka ndị ọjọọ?

Nkwado Ikpeazụ

Ebee ka ị ga-amalite na CI/CD pipelines?

Ntụnye mbụ dị mfe ebe a: N'ụzọ dị mma review pipelines (ha bụ oké egwu akụrụngwa) maka nsogbu nchekwa. Nyocha dị oke ọnụ mana ọ dị mkpa, a kwesịkwara ime ya nke ọma. Ndị nyocha kwesịrị ịma ihe ha ga-ele anya. A ga-enyocha nzọụkwụ ọ bụla maka ntụpọ.

Ikekwe njikọta nke ndị nyocha ọkachamara nwere ngwa nyocha koodu ọjọọ akpaka nwere ike inye aka.

Ndụmọdụ nke abụọ bụ zụọ ndị mmepe na-ede ihe pipelinema debe ha na nchekwaIhe ndị a ga-atụle:

  • Otu esi ejikwa nkwenye nke ọma site na ọrụ dị n'ime na nke igwe ojii, na-ezere nsogbu nke ijikwa asambodo ogologo oge.
  • Otu esi amachi oke pipelineruo kpọmkwem otu akụrụngwa ọ chọrọ ịnweta. Ụkpụrụ nke ihe ùgwù kacha nta na-enwu ọzọ.
  • Otu esi ede usoro iji mee ya pipelines nwere ike imegharị dịka ịpịnye ụdị, na izere adịghị ike n'ịgbanye iwu.
  • Otu esi akwado mbugharị site n'echiche nchekwa (ha bụ ndị ọzọ!): nchekwa nke standards kwesịrị ịdị ka nke ahụ na otu esi etinye checks/ọnụ ụzọ ámá kwekọrọ na pipelines.

Ndụmọdụ nke atọ bụ hazie ihe CI/CD sistemụ kwesịrị ekwesị. Nnwale siri ike, enweghị paswọọdụ ndabara ma ọ bụ ntọala enweghị nchekwa, obere ikike… Lezie anya maka adịghị ike na plugins na ndọtị arụnyere. Nke a nwere ike ịbụ isi ihe dị na post ndị a, biko na-elele ya.

Ndụmọdụ nke anọ bụ leverage na CI/CD pipelines maka akpaaka nchekwaNyocha koodu isi mmalite (SAST), nyocha nke ihe mejupụtara isi mmalite (SCA), enwere ike ịgba ọsọ nyocha nzuzo, ngwaọrụ mgbochi malware, nyocha nchekwa akpa, ma ọ bụ ihe nchọpụta oge na-agba ọsọ akpaaka (DAST na malware) mgbe niile na pipelineÒtù gị nwekwara ike ime ka e tinye iwu standardgbasara mkpuchi na nyocha nchekwa na CI/CD.

Cheta, ngwaọrụ ndị a anaghị ewepụ nyocha ọkachamara na nhazi ahụ, ma ọ bụghị ya, ị nwere ike inwe mmetụta nke nchekwa na-ezighị ezi.

Ọ bụrụ na ị maara nke ọma maka OWASP top-tens, ọrụ ọhụrụ mara mma bụ OWASP kacha nke 10 CI/CD Ihe ize ndụ nchekwa.

Rịba ama Nkwupụta Nkwupụta

(1) Ihe atụ dị na post a na-eji GitHub dị ka SCM, AWS dị ka onye na-eweta igwe ojii, na GitHub Actions ma ọ bụ Jenkins dị ka CI/CD Ngwa ọrụ. Ha adịghị ike ma dịkwa nchebe karịa nhọrọ ha. Enweghị ebumnuche mgbasa ozi ọjọọ! Ngwaọrụ ndị a dị ike ma kwesịrị iji ha mee ihe nke ọma.

(2) M3M3N70 na Ọnụma apịtị bụ ndị a kọrọ akụkọ ifo. Ihe ọ bụla yiri mmadụ ma ọ bụ otu, ndụ ma ọ bụ ọnwụ, bụ naanị ihe dakọtara... ka ọ̀ bụ ya?

Ịgụkwuo

ngwaọrụ nyocha sca-ngwaọrụ-ngwanrọ-nchịkọta-ngwaọrụ nyocha
Mee ka ihe egwu dị na ngwanrọ gị buo ibu, dozie ya, ma chekwaa ya
Nweta Akaụntụ N'efu gị.
Enweghị kaadị akwụmụgwọ achọrọ.

Chekwaa mmepe na nnyefe ngwanrọ gị

ya na Xygeni Product Suite