Enota 3 / 11

Upravljanje infrastrukture kot koda: umetna inteligenca s Terraform in IaC

Dobički:

  • Sposobnost razumevanja koncepta IaC in delovnega cikla Terraform (init, načrt, uporaba, stanje, modul) in imeti umetno inteligenco za izdelavo varnih osnutkov HCL
  • Sposobnost preveriti vsako spremembo z načrtom pred uporabo in ujeti nepričakovane vrstice za uničenje/zamenjavo
  • Sposobnost uporabe načel ohranjanja skrivnosti iz kode, varnega ohranjanja stanja in minimiziranja dovoljenj IAM

V preteklosti je bila nastavitev strežnika stvar klikanja po plošči v oblaku: ustvarite virtualni stroj, nastavite omrežje, dodajte varnostno pravilo. Ta metoda je bila počasna, nagnjena k napakam in neponovljiva - skoraj nemogoče je bilo drugič nastaviti isto okolje. Danes se infrastruktura upravlja kot koda. IaC (infrastruktura kot koda) je pristop za opis virov v oblaku, kot so strežniki, omrežja in podatkovne baze, v besedilnih datotekah in ne ročno. Te datoteke so v nadzoru različic (Git); Vidite lahko, kdo je kaj spremenil, kdaj in kaj; Isto infrastrukturo lahko nastavite večkrat, na povsem enak način, z enim ukazom.

Najpogostejše orodje IaC je Terraform. Terraform prevzame definicije, ki jih napišete v berljivem jeziku, imenovanem HCL (HashiCorp Configuration Language — Terraformov konfiguracijski jezik), jih prevede v API ponudnika oblaka (AWS, Azure, GCP) in ustvari vire. AI zelo dobro pozna HCL in hitro proizvaja zapletene bloke. Toda v IaC je cena napake visoka: ena napačna definicija lahko izbriše celotno proizvodno bazo podatkov. Zato je zlato pravilo v Terraformu videti vsako spremembo z 'načrtom', preden jo uvedemo.

Čas izvajanja Terraform

Terraform deluje s tremi osnovnimi ukazi – poznavanje teh je predpogoj za nadzor izhoda AI:

  • `terraform init`: Zažene projekt, prenese potrebne vtičnike ponudnika.
  • `terraform plan`: Primerja trenutno stanje z želenim stanjem in pokaže, kaj dodati, kaj spremeniti, kaj izbrisati. Ne izvaja ničesar. To je najbolj kritičen varnostni korak.
  • `terraform apply`: dejansko uporabi načrt, ustvari/spremeni vire.

Poleg tega sta pomembna dva koncepta. Stanje (datoteka stanja): To je datoteka, v kateri Terraform hrani trenutno stanje virov, ki jih upravlja; Običajno je shranjen v oddaljenem in zaklenjenem skladišču, tako da ga dve osebi ne moreta zamenjati ali uničiti hkrati. Modul: konfiguracijski paket za večkratno uporabo; Na primer, lahko uporabite modul "nastavitev omrežja" v številnih projektih.

Nasvet: Najnevarnejši znak v izhodu Terraform je uničenje ali -/+ (zamenjaj) vrstice v izhodu načrta. To pomeni, da bo vir izbrisan. Če v načrtu vidite nepričakovano uničenje, ga nikoli ne uporabite, najprej razumejte, zakaj se je pojavilo.

Korak za korakom: Pisanje IaC z AI

  1. Pojasnite želeno infrastrukturo. Bodite konkretni kot "en VPC, dve podomrežji, ena varnostna skupina in en t3.micro EC2 na eu-central-1".
  2. Določite ponudnika in različico. Kateri oblak, kateri Terraform in različica ponudnika? Če ne navedete različice, lahko AI vrne zastarelo/nezdružljivo sintakso.
  3. Izdelajte osnutek HCL. Zahtevajte tudi spremenljivke in izhode.
  4. Odstranite Secret. Vrednosti, kot so gesla in ključi, morajo iti v spremenljivko in tajni trezor, ne v kodo.
  5. Zaženite `init` + `plan`. Preberite izpis načrta vrstico za vrstico; Preverite nepričakovane izbrise.
  6. Začnite z majhnim, izvajajte postopoma. Najprej ga uporabite v izoliranem testnem računu/okolju.

Varnost: Tveganja, specifična za IAC

IaC je tako tvegan kot močan. Tri kritične točke:

  1. V državni datoteki je skrivnost. Stanje Terraform včasih hrani občutljive vrednosti, kot so gesla baze podatkov, v navadnem besedilu. Nikoli ne postavljajte stanja v javno skladišče; Uporabite šifrirano oddaljeno zaledje z omejenim dostopom.
  2. Ne vdelajte skrivnosti v HCL. Vrstice, kot je password="prod123", so trajno zapisane v zgodovino Git. Namesto tega uporabite spremenljivko in podajte vrednost med izvajanjem iz spremenljivke okolja (TF_VAR_...) ali skrivnega trezorja.
  3. Zelo široko dovoljenje IAM. AI včasih ustvari bloke, kot je Action: "*" (dovoli vse), da "zagotovi, da deluje". To je ranljivost; zožite dovoljenje na najmanjšo potrebno.
Pozor: Ko skrivnost enkrat vstopi v zgodovino Git, ostane v preteklosti in je lahko ogrožena, tudi če izbrišete datoteko. Če se zavežete po pomoti, takoj prekličite in obrnite skrivnost; Samo brisanje ni dovolj.

Tabela z znaki za tvegan načrt

Izpis načrta

Pomen

kaj narediti

+ustvariti

Dodan bo nov vir

Na splošno varno, vendar preglejte

~ posodobitev na mestu

Vir se bo spremenil na mestu

Preverite vpliv (ali bo prišlo do izpada?)

-/+ zamenjaj

Bo izbrisano in ponovno ustvarjeno

POZOR: lahko pride do izgube podatkov

- uničiti

Vir bo uničen

STOP: nikoli se ne prijavi, če tega ne pričakuješ

trije mini kovčki

Primer 1 — 2 dni dela v 3 urah. Ena ekipa je nameravala napisati Terraform za postavitev novega preskusnega okolja (VPC, podomrežja, baza podatkov RDS, gruča ECS), vendar so se pravkar preselili v HCL. Opisali so arhitekturo in različice AI in izdelali modularni načrt. Vsak modul so preverili z načrtom in ga zagnali v 3 urah; Potrebovali bi dva dni ročnih poskusov in napak.

Primer 2 — načrt je ujel izbris. Inženir je izvedel načrt, ne da bi uporabil posodobitveno kodo, ki jo je ustvaril AI. Izhod je vseboval -/+ zamenjavo za produkcijsko bazo podatkov — AI je poskušal zamenjati nezamenljivo polje, kar je pomenilo brisanje in ponovno ustvarjanje baze podatkov. Inženir je prenehal uporabljati in spremenil spremembo v varno metodo. Navada načrtovanja je preprečila katastrofo.

Primer 3 — zakrito skrivno uhajanje. Junior, YZ je izdal db_password = "S3cret!" Postavil je vrstico, kot je, in jo potisnil. Ujet pri pregledu kode; Geslo je bilo takoj preklicano in spremenjeno, vrednost je bila premaknjena v spremenljivko in dovedena iz tajnega trezorja. Lekcija: V HCL nikoli ni skrivnosti golega besedila.

Štiri predloge za kopiranje

1) Ustvarjanje osnutka infrastrukture:

Zapišite naslednjo infrastrukturo v [CLOUD: AWS] s Terraform (različica ~> 1.7): [SEZNAM VIROV]. Regija [X]. Pravila:- Vse občutljive vrednosti naj bodo spremenljive, ne vdelajte jih v HCL.- Popravite različico ponudnika (required_providers).- Zmanjšajte dovoljenja IAM, ne uporabljajte "*".- Vrnite [X, Y] kot izhod. Podajte kodo modularno in z razlagami.

2) Razlaga izhoda načrta:

Analizirajte spodnji rezultat 'terraform načrta'. Naštej me: (1) kateri viri so bili dodani/spremenjeni/IZBRISANI, (2) vrstice, pri katerih obstaja tveganje izgube ali prekinitve podatkov, (3) 3 vprašanja, ki jih moram postaviti pred prijavo. Načrt: [IZVID]

3) Preverite varnost obstoječega HCL:

Preverite naslednjo kodo Terraform za varnost: vdelana skrivnost, preširoko dovoljenje IAM, pravilo odprtega omrežja (0.0.0.0/0), nešifrirano shranjevanje? Vsako ugotovitev zapišite po pomembnosti in popravku. Koda: [HCL]

4) Pretvorite ponavljajočo se kodo v modul:

Pretvorite naslednjo ponavljajočo se kodo Terraform v modul za večkratno uporabo: katere vrednosti naj bodo spremenljivke, kakšen naj bo vmesnik modula? Pokaži tudi primer uporabe. Koda: [HCL]

Šibek poziv/močan poziv

Slabost: "Ustvarite bazo podatkov s Terraform."

Rezultat: nejasno, kateri oblak, kateri motor, katera različica, šifrirano ali ne; S podedovano sintakso lahko AI zagotovi javno dostopen primer, ki geslo vdela v kodo.

Močno: "Ustvarite primerek RDS PostgreSQL 15 na AWS s Terraform ~> 1.7. Naredite spremenljivko gesla, ne vdelajte ga v kodo. Shranjevanje je šifrirano, dostopno le iz zasebnega podomrežja, ne iz javnega. Popravite različico ponudnika. Vrnite končno točko kot izhod."

Razlika: drugi poziv poda mehanizem, različico, šifriranje, omrežno omejitev in skrivno pravilo — izhod je varen in blizu izdelku.

Pogoste napake

  • Za `prijavo` brez izdelave `načrta`. Najdražja napaka v IaC; vedno najprej načrtuj.
  • Vdelava Secret v HCL. Ustvari trajno uhajanje v zgodovino Git.
  • Stanje shranjevanja ni varno. Nešifrirano, odklenjeno, javno stanje je katastrofa.
  • Ne popravljam različice. Uporaba ponudnika brez navedbe različice bo povzročila nenadne okvare v prihodnosti.
  • *`Dejanje: široko dovoljenje, kot je ""`.** Krši načelo najmanjših privilegijev.
  • Ignoriranje nepričakovanega `destroy`. Uporaba vrstic za brisanje v načrtu brez vprašanj.

Če povzamem

IaC spremeni infrastrukturo v ponovljivo kodo, različico in revizijo; Najpogostejše orodje je Terraform. AI hitro ustvari škrbine HCL, vendar morate navesti različico, podrobnosti, specifične za oblak, in varnostna pravila. Nezmotljivo pravilo v Terraformu: videti vsako spremembo z načrtom, poizvedovati o nepričakovanih izbrisih, ohraniti skrivnosti stran od kode in ohraniti stanje varno. Vrstici za uničenje in zamenjavo v izhodu načrta sta mesti, ki ju je treba najbolj natančno prebrati.

Aplikacijska naloga

Naj AI ustvari majhno infrastrukturo (npr. vedro za shranjevanje in politiko dostopa) z uporabo zgornje predloge »Ustvari skico infrastrukture«. Nato: (1) preverite, ali so v kodo vdelana skrivna ali * dovoljenja s predlogo "preverjanje"; (2) če je mogoče, zaženite init + načrt v testnem računu in preberite izhod načrta s predlogo "razlaga načrta"; (3) zabeležite vse nepričakovane izbrise/spremembe.

kontrolni seznam

  • [ ] Svojemu pozivu sem dodal omejitve oblaka, Terraform/ponudnika in šifriranje/omrežne omejitve.
  • [ ] V kodi ni skrivnosti golega besedila; spremenljivka vrednosti natančnosti.
  • [ ] IAM/dovoljenja sem zožil na minimalna dovoljenja, * nisem jih uporabljal.
  • [ ] Zagnal sem načrt pred uporabo in prebral izpis vrstico za vrstico.
  • [ ] Preveril sem, da v načrtu ni nepričakovanega uničenja/zamenjave.
  • [ ] Prepričan sem, da se stanje hrani v šifriranem, zaklenjenem in omejenem zaledju.