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
- Pojasnite želeno infrastrukturo. Bodite konkretni kot "en VPC, dve podomrežji, ena varnostna skupina in en t3.micro EC2 na eu-central-1".
- 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.
- Izdelajte osnutek HCL. Zahtevajte tudi spremenljivke in izhode.
- Odstranite Secret. Vrednosti, kot so gesla in ključi, morajo iti v spremenljivko in tajni trezor, ne v kodo.
- Zaženite `init` + `plan`. Preberite izpis načrta vrstico za vrstico; Preverite nepričakovane izbrise.
- 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:
- 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.
- 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.
- 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.