Pelnas:
- Gebėjimas suprasti IaC koncepciją ir Terraform darbo ciklą (initas, planas, taikymas, būsena, modulis) ir dirbtinis intelektas gamina saugius HCL juodraščius
- Galimybė patikrinti kiekvieną pakeitimą pagal planą prieš taikant ir sugauti netikėtas sunaikinimo / pakeitimo linijas
- Gebėjimas taikyti principus, kaip saugoti paslaptį nuo kodo, saugiai išlaikyti būseną ir sumažinti IAM leidimus
Anksčiau serverio nustatymas buvo atliekamas spustelėjus debesies skydelį: sukurkite virtualią mašiną, nustatykite tinklą, pridėkite saugos taisyklę. Šis metodas buvo lėtas, dažnai klaidų ir nepakartojamas – antrą kartą nustatyti tą pačią aplinką buvo beveik neįmanoma. Šiandien infrastruktūra valdoma kaip kodas. IaC (Infrastructure as Code) yra būdas apibūdinti debesies išteklius, tokius kaip serveriai, tinklai ir duomenų bazės, tekstiniuose failuose, o ne rankiniu būdu. Šie failai yra versijos valdiklyje (Git); Galite matyti, kas ką, kada ir ką pakeitė; Tą pačią infrastruktūrą galite nustatyti daug kartų, lygiai taip pat, naudodami vieną komandą.
Labiausiai paplitęs IaC įrankis yra Terraform. „Terraform“ paima jūsų parašytus apibrėžimus skaitoma kalba, vadinama HCL („HashiCorp Configuration Language“ – „Terraform“ konfigūravimo kalba), išverčia juos į debesies teikėjo (AWS, Azure, GCP) API ir sukuria išteklius. AI puikiai pažįsta HCL ir greitai gamina sudėtingus blokus. Tačiau IaC klaidos kaina yra didelė: vienas neteisingas apibrėžimas gali sunaikinti visą gamybos duomenų bazę. Štai kodėl auksinė Terraform taisyklė yra pamatyti kiekvieną pakeitimą su „planu“ prieš jį įgyvendinant.
„Terraform“ veikimo laikas
„Terraform“ veikia su trimis pagrindinėmis komandomis – jų žinojimas yra būtina sąlyga norint valdyti AI išvestį:
- `terraform init`: paleidžiamas projektas, atsisiunčiami būtini tiekėjo papildiniai.
- „Terraform planas“: lygina esamą situaciją su norima situacija ir parodo, ką pridėti, ką keisti, ką ištrinti. Nieko neįgyvendina. Tai pats svarbiausias saugumo žingsnis.
- „Terraform apply“: iš tikrųjų taiko planą, kurdamas / modifikuodamas išteklius.
Be to, dvi sąvokos yra gyvybiškai svarbios. Būsena (būsenos failas): tai failas, kuriame Terraform saugo esamą valdomų išteklių būseną; Paprastai jis laikomas atokiame ir užrakintame sandėlyje, kad du žmonės negalėtų vienu metu jo pakeisti ar sunaikinti. Modulis: Daugkartinio naudojimo konfigūracijos paketas; Pavyzdžiui, daugelyje projektų galite naudoti modulį „Nustatyti tinklą“.
Patarimas: Pavojingiausias ženklas Terraform išvestyje yra sunaikinti arba -/+ (pakeisti) linijos plano išvestyje. Tai reiškia, kad ištekliai bus ištrinti. Jei plane matote netikėtą sunaikinimą, niekada nesikreipkite, pirmiausia supraskite, kodėl jis atsirado.
Žingsnis po žingsnio: IaC rašymas naudojant AI
- Išsiaiškinkite norimą infrastruktūrą. Būkite konkretūs, pavyzdžiui, „vienas VPC, du potinkliai, viena saugos grupė ir vienas t3.micro EC2 eu-central-1“.
- Nurodykite tiekėją ir versiją. Kuris debesis, kuri Terraform ir teikėjo versija? Jei nenurodysite versijos, AI gali grąžinti pasenusią / nesuderinamą sintaksę.
- Pateikite HCL projektą. Taip pat paprašykite kintamųjų ir išvesties.
- Išimk paslaptį. Reikšmės, pvz., slaptažodžiai ir raktai, turėtų patekti į kintamąjį ir slaptąjį saugyklą, o ne į kodą.
- Vykdykite „init“ + „plan“. Perskaitykite plano išvestį eilutę po eilutės; Patikrinkite, ar nėra netikėtų ištrynimų.
- Pradėkite nuo mažo, įgyvendinkite palaipsniui. Pirmiausia taikykite jį atskiroje bandomojoje paskyroje / aplinkoje.
Sauga: IAC būdinga rizika
IaC yra toks pat rizikingas, kaip ir galingas. Trys kritiniai taškai:
- Valstybės byloje yra paslaptis. Terraform būsena kartais išlaiko jautrias reikšmes, pvz., duomenų bazės slaptažodžius, paprastu tekstu. Niekada nedėkite valstybės į viešą saugyklą; Naudokite šifruotą, ribotos prieigos nuotolinę užpakalinę programą.
- Neįterpkite paslapčių į HCL. Tokios eilutės kaip password="prod123" visam laikui įrašomos į Git istoriją. Vietoj to naudokite kintamąjį ir vykdymo metu nurodykite reikšmę iš aplinkos kintamojo (TF_VAR_...) arba slaptojo saugyklos.
- Labai platus IAM leidimas. AI kartais sukuria blokus, tokius kaip Action: „*“ (leisti viską), kad „veiktų“. Tai yra pažeidžiamumas; susiaurinti leidimą iki minimumo.
Dėmesio: kai paslaptis patenka į Git istoriją, ji lieka praeityje ir gali būti pažeista, net jei ištrinate failą. Jei įsipareigojate per klaidą, nedelsdami atšaukite ir pasukite paslaptį; Vien ištrinti neužtenka.
Rizikingo plano ženklų lentelė
Plano spausdinimas
Reikšmė
ką daryti
+kurti
Bus pridėtas naujas šaltinis
Apskritai saugu, tačiau peržiūrėkite
~ atnaujinkite vietoje
Šaltinis pasikeis svetainėje
Patikrinkite poveikį (ar bus gedimas?)
-/+ pakeisti
Bus ištrintas ir sukurtas iš naujo
DĖMESIO: gali būti prarasti duomenys
- sunaikinti
Išteklius bus sunaikintas
STOP: niekada nesikreipkite, jei to nesitikite
trys mini dėklai
1 atvejis – 2 dienų darbas po 3 valandas. Viena komanda ketino parašyti „Terraform“, kad sukurtų naują bandymo aplinką (VPC, potinkliai, RDS duomenų bazė, ECS klasteris), tačiau jie ką tik persikėlė į HCL. Jie apibūdino AI architektūrą ir versijas bei sukūrė modulinį projektą. Jie patikrino kiekvieną modulį pagal planą ir per 3 valandas sukūrė ir pradėjo veikti; Jiems prireiktų dviejų dienų rankinio bandymo ir klaidų.
2 atvejis – planas buvo išbrauktas. Inžinierius įgyvendino planą nepritaikęs AI sukurto atnaujinimo kodo. Išvestyje buvo -/+ pakeitimas gamybos duomenų bazei - AI bandė pakeisti nekeičiamą lauką, o tai reiškė duomenų bazės ištrynimą ir kūrimą iš naujo. Inžinierius sustabdė taikymą ir pakeitė pakeitimą į saugų metodą. Įprotis planuoti užkirto kelią nelaimei.
3 atvejis – palaidotas slaptas nutekėjimas. Jaunesnysis, YZ išduotas db_password = "S3cret!" Jis padarė tokią liniją, kokia yra, ir ją pastūmėjo. Pagautas kodo peržiūroje; Slaptažodis buvo nedelsiant atšauktas ir pakeistas, reikšmė perkelta į kintamąjį ir tiekiama iš slaptosios saugyklos. Pamoka: HCL niekada nebūna paprasto teksto paslapčių.
Keturi kopijuojami šablonai
1) Infrastruktūros projekto sudarymas:
Į [CLOUD: AWS] su Terraform (versija ~> 1.7) parašykite šią infrastruktūrą: [ŠALTINIŲ SĄRAŠAS]. Regionas [X]. Taisyklės:- Padarykite visas jautrias reikšmes kintamomis, neįterpkite jų į HCL.- Pataisykite teikėjo versiją (required_providers).- Sumažinkite IAM leidimus, nenaudokite „*“.- Grąžinkite [X, Y] kaip išvestį. Pateikite kodą moduliškai ir su paaiškinimais.
2) Plano išvesties interpretavimas:
Išanalizuokite toliau pateiktą „terraforminio plano“ išvestį. Išvardykite mane: (1) kokie ištekliai buvo pridėti / pakeisti / IŠTRINTI, (2) eilutės, kuriose gresia duomenų praradimas arba pertraukimas, (3) 3 klausimai, kuriuos turėčiau užduoti prieš pateikdamas paraišką.Planas: [OUTPUT]
3) Patikrinkite esamą HCL dėl saugumo:
Patikrinkite šį „Terraform“ kodą dėl saugumo: įterptoji paslaptis, per platus IAM leidimas, atviro tinklo taisyklė (0.0.0.0/0), nešifruota saugykla? Parašykite kiekvieną radinį svarbos ir pataisymų tvarka. Kodas: [HCL]
4) Konvertuokite pasikartojantį kodą į modulį:
Konvertuokite šį pasikartojantį Terraform kodą į daugkartinį modulį: kokios reikšmės turėtų būti kintamieji, kokia turėtų būti modulio sąsaja? Taip pat parodykite naudojimo pavyzdį. Kodas: [HCL]
Silpnas raginimas / Stiprus raginimas
Silpnas: „Sukurkite duomenų bazę naudodami Terraform“.
Rezultatas: neaišku, kuris debesis, kuris variklis, kuri versija, užšifruota ar ne; Naudodamas senąją sintaksę, AI gali pateikti viešai prieinamą pavyzdį, kuris į kodą įterpia slaptažodį.
Stiprus: "Sukurkite RDS PostgreSQL 15 egzempliorių AWS naudodami Terraform ~> 1.7. Padarykite slaptažodžio kintamąjį, neįdėkite jo į kodą. Saugykla yra užšifruota, pasiekiama tik iš privataus potinklio, ne vieša. Pataisykite teikėjo versiją. Pateikite galinį tašką kaip išvestį."
Skirtumas: antrasis raginimas pateikia variklį, versiją, šifravimą, tinklo apribojimą ir slaptą taisyklę – išvestis yra saugi ir artima prod.
Dažnos klaidos
- „Prašyti“ nedarant „plano“. Brangiausia klaida IaC; visada pirmiausia planuok.
- Paslapties įterpimas į HCL. Sukuria nuolatinį nutekėjimą į Git istoriją.
- Saugoma valstybė nesaugi. Nešifruota, atrakinta, vieša būsena yra nelaimė.
- Netaiso versijos. Teikėjo naudojimas nenurodant versijos ateityje sukels staigius gedimus.
- *`Veiksmas: platus leidimas, pvz., ""`.** Pažeidžia mažiausios privilegijos principą.
- Nepaisydami netikėto "sunaikinimo". Ištrynimo eilučių taikymas Plane be klausimo.
Apibendrinant
IaC infrastruktūrą paverčia kartojamu, versijų ir audituojamu kodu; Labiausiai paplitęs įrankis yra Terraform. Dirbtinis intelektas greitai sukuria HCL stubus, tačiau turite pateikti versiją, konkrečią debesies informaciją ir saugos taisykles. Neklaidinga „Terraform“ taisyklė: matyti kiekvieną plano pakeitimą, užklausti netikėtus ištrynimus, saugoti paslaptis nuo kodo ir saugiai saugoti būseną. Sunaikinti ir pakeisti eilutės plano išvestyje yra vietos, kurias reikėtų perskaityti atidžiau.
Taikymo užduotis
Leiskite AI sugeneruoti nedidelę infrastruktūrą (pvz., saugyklos segmentą ir prieigos politiką) naudodami anksčiau pateiktą šabloną „Generuoti infrastruktūros eskizą“. Tada: (1) patikrinkite, ar „patikrinimo“ šablone nėra slaptų arba į kodą įterptų * leidimų; (2) jei įmanoma, paleiskite „init + plan“ bandomojoje paskyroje ir perskaitykite plano išvestį naudodami „plano interpretacijos“ šabloną; (3) atkreipkite dėmesį į visus netikėtus ištrynimus / pakeitimus.
kontrolinis sąrašas
- [ ] Į savo raginimą pridėjau debesies, Terraform / teikėjo versiją ir šifravimo / tinklo apribojimus.
- [ ] Kode nėra slapto teksto; tikslumo verčių kintamasis.
- [ ] IAM/leidimus susiaurinau iki minimalių leidimų, * nenaudojau.
- [ ] Prieš taikydamas vykdau planą ir perskaičiau išvesties eilutę po eilutės.
- [ ] Patikrinau, kad plane nėra netikėto sunaikinimo/pakeitimo.
- [ ] Esu tikras, kad būsena saugoma šifruotoje, užrakintoje ir apribotoje programoje.