Vienetas 6 / 11

Infrastruktūros valdymas kaip kodas (IAC): Terraform, Ansible ir Plan Control

Pelnas:

  • Gebėjimas kurti IaC (Terraform, Ansible) kodą su dirbtiniu intelektu su siauriausiais leidimais ir saugiais numatytais parametrais bei suprasti deklaratyvų požiūrį
  • Galimybė išvengti duomenų praradimo nuskaitant ir fiksuojant ištrynimo ir priverstinio pakeitimo eilutes prieš taikant plano / patikros išvestį
  • Galimybė užkirsti kelią slaptam nutekėjimui išlaikant būsenos failą užšifruotą, užrakintą nuotolinėje programoje ir suskaidant pakeitimus į mažus, grįžtamus veiksmus

Infrastruktūros valdymas kaip kodas (IAC): Terraform, Ansible ir Plan Control su AI

Anksčiau serverio nustatymas buvo atliekamas rankiniu paspaudimu, komandomis ir asmeninėmis pastabomis; Rezultatas buvo nepakartojami „snaigių“ serveriai, kurių niekas tiksliai nežinojo, kaip nustatyti. Infrastruktūra kaip kodas (IaC) – tai požiūris, kuris užbaigia šį chaosą: serveriai, tinklai, saugos taisyklės apibrėžiamos ne ranka, o versijuojamais tekstiniais failais (kodas). Kai paleidžiate šį kodą, infrastruktūra nustatoma tiksliai taip, kaip jį parašėte – ta pati, dokumentuota ir kartojama kiekvieną kartą. Dažniausiai naudojami „Terraform“ ir „CloudFormation“, skirti debesų infrastruktūrai, ir „Ansible“ serverio konfigūravimui. Čia AI yra labai įgudęs rašyti, paaiškinti ir peržiūrėti šį IaC kodą. Tačiau IaC galia yra ir jo pavojus: viena neteisinga linija gali sunaikinti visą infrastruktūrą; Taigi AI rašo kodą, jūs perskaitote „planą“, patvirtinate jį ir vykdote.

Šiame skyriuje aptarsime deklaratyvų požiūrį, planų/taikymų skirtumą, valstybės saugumą ir idempotenciją; Išmoksite IaC generavimo su AI ir svarbiausio įgūdžio – „plano valdymo“.

Mąstymas deklaratyviai: „kas būtų, jei“, o ne „kaip daryti“

Dauguma IaC įrankių yra deklaratyvūs: aprašote galutinę sistemos būseną ("tarkime, 3 žiniatinklio serveriai, 1 apkrovos balansavimo priemonė"), pats įrankis apskaičiuoja, kaip į tą būseną patekti. Tai skiriasi nuo scenarijaus rašymo („daryk tai, tada daryk aną“ žingsnis po žingsnio). Didelis deklaratyvaus požiūrio privalumas – idempotencija: net ir dešimt kartų paleidus kodą, rezultatas yra tas pats, nes įrankis patikrina, ar norima būsena jau yra, o jei yra, tai jos neliečia. Prisiminkite šį skirtumą, kai rašote IaC į AI: priverčiate pasakyti „leisk šiai infrastruktūrai įjungti“, o ne „vykdyti šias komandas“.

Suplanuokite / pritaikykite: svarbiausi saugos turėklai

IaC gelbėjimo funkcija yra plano žingsnis. Terraformoje Terraform planas, Ansible, --check režimas sukuria peržiūrą "kas pasikeis, jei taikysiu" prieš paleisdamas kodą: "2 ištekliai bus pridėti, 1 pasikeis, 0 bus ištrintas". Tai vienintelis būdas palyginti savo ketinimą su tikrove prieš įgyvendinant. Kritinė taisyklė: niekada netaikykite neperskaitę plano. Ypač ieškokite „sunaikinimo“ linijų; Jei dėl rašybos klaidos matote „12 bus ištrinta“, o ne „1 bus pakeista“, planas išgelbėjo jus nuo nelaimės. Išspausdinę kodą į AI, leiskite jam pasakyti: „Išnagrinėkite plano išvesties eilutę su manimi, pažymėkite kiekvieną eilutę, kurioje yra trynimo / atkūrimo“.

Atsargiai: kai kurie Terraform pakeitimai „sunaikina ir atkuria“ išteklius, o ne „atnaujina vietoje“. Tai reiškia duomenų bazės duomenų praradimą. Ignoravimas -/+ arba "priverčia pakeisti" plano išvestyje yra viena iš brangiausių klaidų.

Valstybės byla: paslapčių ir tiesos įrašas

Tokie įrankiai kaip „Terraform“ saugo esamą infrastruktūros būseną, kurią jie valdo, būsenos faile. Šis failas yra labai svarbus dėl dviejų priežasčių. Pirma, jame gali būti paslapčių (duomenų bazių slaptažodžiai, raktai gali patekti į būseną paprastu tekstu); Todėl niekada neįklijuokite būsenos į viešą saugyklą arba AI, laikykite ją užšifruotoje ir apribotoje nuotolinėje programoje. Antra, sugadinus ar pametus valstybę, transporto priemonė praranda ryšį tarp realios infrastruktūros ir įsivaizduojamos infrastruktūros; Todėl būtina atsarginė būsenos kopija ir spynos mechanizmas (užraktas, neleidžiantis dviem žmonėms vienu metu sulaužyti).

Žingsnis po žingsnio: apsaugokite IaC naudodami AI

  1. Valstybės ketinimas ir teikėjas. „2 AWS serveriai su Terraform šiame regione, tokio dydžio ir saugos grupe. Jei debesis, įrankis ir versija yra aiškūs, AI sukuria teisingą sintaksę.
  2. Prašyti numatytųjų saugos nustatymų. „Atidarykite saugos grupę, įgalinkite šifravimą, išskleiskite paslaptis į kintamąjį, suteikite viešą prieigą“. AI pagal numatytuosius nustatymus gali generuoti laisvus pavyzdžius.
  3. Perskaitykite ir supraskite kodą. Supraskite kiekvieną išteklį, kiekvieną leidimą, eilutę po eilutės. Nenaudokite leidimo, kurio nesuprantate.
  4. Gaukite planą ir patikrinkite jį. Vykdykite planą / patikrinimą, patikrinkite išvestį naudodami AI, pažymėkite ištrynimo ir atkūrimo eilutes.
  5. Taikyti mažą ir grįžtamąjį. Atlikite didelius pokyčius mažomis dalimis, o ne visus iš karto. Žinokite kelią atgal kiekviename žingsnyje.
  6. Apsaugoti valstybę. Naudoti nuotolinę, šifruotą užpakalinę programą ir užrakinti; Niekada nenutekėjimo būsena.

trys mini dėklai

1 atvejis – planas atkūrė duomenų bazę. Inžinierius norėjo padidinti duomenų bazės dydį naudodamas Terraform kodą, kurį sukūrė naudodamas AI. Kol jis tikėjosi „1 pakeisti“ terraforminio plano išvestyje, jis pamatė „1 sunaikinti, 1 pridėti“ – jo pasirinktas parametras suaktyvino atkūrimą, o ne atnaujinimą vietoje, o tai reiškia, kad visi duomenys bus ištrinti. Plano valdymas sustabdė negrįžtamą duomenų praradimą prieš jį įdiegiant.

2 atvejis – grįžimas iš laisvų numatytųjų. Komanda paprašė AI užkardos kodo. Norėdami paleisti pavyzdį, AI sukūrė paprastą taisyklę 0.0.0.0/0, reiškiančią „vieša internete“. Inžinierius tai pastebėjo skaitydamas kodą ir susiaurino prieigą tik iki įmonės IP diapazono. Jei ji būtų įdiegta be audito, duomenų bazė būtų atvira visam internetui.

3 atvejis. Užkirstas kelias valstybės nutekėjimui. Jaunesnysis narys ketino įklijuoti nepažeistą failą terraform.tfstate į viešą įrankį, kad išspręstų Terraform problemą. Vyresnysis inžinierius sustabdytas: būsenoje yra paprasto teksto duomenų bazės slaptažodis. Vietoj to buvo bendrinama iššifruota santrauka, apibūdinanti problemą, o būsena buvo perkelta į nuotolinę šifruotą užpakalinę programą.

Keturi kopijuojami šablonai

1) IaC išteklių generavimas (saugus numatytasis nustatymas):

Jūsų vaidmuo: vyresnysis debesų infrastruktūros inžinierius. [Debesis, pvz. AWS] skirtas [įrankiui, pvz. Terraform] generuoti kodą. Paskirtis: [paskirtis].Saugos taisyklės: vieša (0.0.0.0/0) prieiga ATIDARYTA;pradėkite nuo siauriausio leidimo; įjungti šifravimą; išskleiskite paslaptis į kintamuosius, neįdėkite jų į kodą; Patikrinkite nustatymus, kurie gali būti ištrinti / atkurti. Paaiškinkite kiekvieną šaltinį trumpu komentaru.

2) Suplanuokite rezultatų auditą:

Žemiau yra [Terraform plan / Ansible check] išvestis. Pasakykite man: (1) kiek išteklių bus pridėta / pakeista / ištrinta, (2) taip pat pažymėkite eilutes „sunaikinti“ arba „pakeisti“, kurios kelia duomenų praradimo riziką, (3) išvardyti visus pakeitimus, kurie atrodo netikėti ar pavojingi. Išvestis: [planas]

3) IaC kodo saugumo peržiūra:

Patikrinkite šį IaC kodą dėl saugumo: (1) ar yra per plati prieiga / leidimai, (2) šifravimas išjungtas, (3) ar kode yra paslapčių, (4) ar yra viešai prieinamų išteklių? Siūlykite pataisyti kiekvieną radinį. Kodas: [maskuotas kodas]

4) Padalinkite pakeitimą į saugias dalis:

Nenoriu įgyvendinti šio didelio infrastruktūros pakeitimo [paaiškinimas] iš karto. Padalinkite jį į mažus, nepriklausomus žingsnius, prie kurių lengva grįžti. Kiekvienam žingsniui: kas keičiasi, į ką turėčiau atkreipti dėmesį plane, kaip atšaukti, jei kyla problemų?

Silpnas raginimas / Stiprus raginimas

Silpnas raginimas:

Parašykite Terraform kodą, kuris sukuria serverį AWS.

Regionas, dydis, saugumas, tinklas, šifravimas neaiškūs. Dirbtinis intelektas sukuria laisviausius ir aiškiausius numatytuosius nustatymus – jei jis būtų pradėtas gaminti, tai būtų pažeidžiamumas.

Galingas raginimas:

Jūsų vaidmuo: vyresnysis debesų infrastruktūros inžinierius. AWS eu-central-1 apibrėžkite web serverį su Terraform: t3.small, tik iš firminio IP diapazono (duosiu su kintamuoju), 443 prievadas atidarytas, diskas šifruotas, viešos prieigos nėra, etiketės privalomos. Paslaptys atskleidžiamos kintamajam. Po kodo: prieš jį įgyvendindami nurodykite 3 eilučių tipus, į kuriuos turėčiau atkreipti dėmesį plane, ir paaiškinkite grįžimo kelią.

Scena

Rizika

saugos turėklai

kodo rašymas

Laisvas numatytasis (viešas)

Siauriausias leidimas + skaityti

planuoti/patikrinti

Ištrinama to nesuvokiant

Suplanuokite patikrinimą, sunaikinkite ženklinimą

Taikyti

Esminis vienkartinis pakeitimas

Maži, apverčiami žingsneliai

valstybės administracija

Glazūros nutekėjimas, iškraipymas

Nuotolinis šifruotas užraktas + užraktas

Dažnos klaidos

  • Prašymas neperskaičius plano. Planas numato išbraukimą ir rekonstrukciją; Jei jis praleistas, duomenų praradimas yra neišvengiamas.
  • Nepastebėti laisvo nutylėjimo. AI egzemplioriai dažnai sukuria 0.0.0.0/0; Jei jis perkeliamas į gamybą, tai reiškia atvirą kodą visam internetui.
  • Nutekėjusi valstybė. Eksportuojant būsenos failą į AI arba atvirą saugyklą, atskleidžiamos paprasto teksto paslaptys.
  • Paslapčių įterpimas į kodą. Slaptažodžio įrašymas į IaC kodą yra nuolatinis kodo versijos istorijos nutekėjimas.
  • Atnaujinimas klaidingai atnaujinamas. Jei nepaisysite pajėgų pakeitimo linijos, duomenų bazėse bus prarasti duomenys.
Patarimas: net duodami plano išvestį AI peržiūrėti, priimdami galutinį sprendimą remkitės savo žiniomis, o ne plano tekstu. AI apibendrina planą ir pažymi rizikingas linijas; bet atsakymas į klausimą „ar toks ištrynimas priimtinas“ priklauso nuo jūsų verslo konteksto.

Apibendrinant

IaC suteikia pakartojamumą ir dokumentaciją valdydamas infrastruktūrą su versijų kodu, o ne rankiniu paspaudimu. AI yra galingas partneris rašant šį kodą, jį aprašant ir peržiūrint saugumo sumetimais. Tačiau IaC galia yra jo pavojus: viena linija gali sunaikinti visą infrastruktūrą. Mąstykite deklaratyviai, pradėkite nuo siauriausio leidimo, pataisykite laisvus numatytuosius nustatymus, saugokite paslaptis nuo kodo ir būsenos. Svarbiausias apsauginis turėklas yra planavimo / patikrinimo žingsnis: niekada nevykdykite neperskaitę ištrynimo ir atkūrimo eilučių. Laikykite būseną užšifruotą, užrakintą ir nutolusią. Kodas priklauso dirbtiniam intelektui, sprendimas priklauso nuo jūsų.

Taikymo užduotis

Pasirinkite mažą infrastruktūros tikslą (pavyzdžiui, vieną virtualią mašiną ir saugos taisyklę). Naudodami aukščiau pateiktą šabloną „IaC išteklių generavimas“, paprašykite AI kodo su saugiais numatytais parametrais. Dar kartą patikrinkite kodą naudodami šabloną „IaC kodo saugos peržiūra“ ir pabandykite rasti bent vieną netinkamą nustatymą. Jei įmanoma, paleiskite planą/--tikrinimą bandomojoje paskyroje ir peržiūrėkite išvestį naudodami šabloną „Plano išvesties patikra“; Pažiūrėkite, ar nėra ištrynimo arba iš naujo sukurto eilutės. Savo išvadas ir kaip užsitikrinsite valstybę, surašykite į 6 taškus.

kontrolinis sąrašas

  • [ ] Ar nurodžiau debesį, įrankį ir versiją AI ir paprašiau kodo su siauriausiais leidimais?
  • [ ] Ar patikrinau, ar kode nėra laisvų numatytųjų nustatymų (0.0.0.0/0, uždaras šifravimas)?
  • [ ] Ar ištraukiau kintamojo paslaptis, o ne įterpiau jas į kodą?
  • [ ] Ar prieš taikydamas perskaičiau plano / patikrinimo išvestį ir pažymėjau ištrynimo eilutes?
  • [ ] Ar įvertinau „pajėgų pakeitimo“ / atstatymo linijų duomenų praradimo poveikį?
  • Ar nelaikiau [ ] būsenos failo užšifruotą, užrakintą nuotolinėje programoje ir nutekėjau?