Câștiguri:
- Capacitatea de a înțelege conceptul IaC și ciclul de lucru al Terraform (inițial, planifică, aplică, stare, modul) și are inteligența artificială să producă proiecte HCL sigure
- Abilitatea de a verifica fiecare modificare cu un plan înainte de a aplica și de a prinde linii de distrugere/înlocuire neașteptate
- Abilitatea de a aplica principiile de a păstra secretele în afara codului, de a păstra starea în siguranță și de a minimiza permisiunile IAM
În trecut, configurarea unui server era o chestiune de a face clic printr-un panou cloud: creați o mașină virtuală, configurați rețeaua, adăugați regula de securitate. Această metodă a fost lentă, predispusă la erori și irepetabilă - era aproape imposibil să configurați același mediu a doua oară. Astăzi, infrastructura este gestionată ca cod. IaC (Infrastructure as Code) este o abordare pentru a descrie resursele cloud, cum ar fi servere, rețele și baze de date, în fișiere text, mai degrabă decât manual. Aceste fișiere se află în controlul versiunilor (Git); Puteți vedea cine a schimbat ce, când și ce; Puteți configura aceeași infrastructură de mai multe ori, exact în același mod, cu o singură comandă.
Cel mai comun instrument IaC este Terraform. Terraform preia definițiile pe care le scrieți într-un limbaj lizibil numit HCL (HashiCorp Configuration Language — limbajul de configurare Terraform), le traduce în API-ul furnizorului de cloud (AWS, Azure, GCP) și creează resursele. AI cunoaște foarte bine HCL și produce rapid blocuri complexe. Dar în IaC, costul unei greșeli este mare: o definiție greșită poate șterge o întreagă bază de date de producție. De aceea, regula de aur în Terraform este să vezi fiecare schimbare cu un „plan” înainte de a o implementa.
Timpul de rulare al lui Terraform
Terraform funcționează cu trei comenzi de bază - cunoașterea acestora este o condiție prealabilă pentru controlul ieșirii AI:
- `terraform init`: Pornește proiectul, descarcă pluginurile necesare furnizorului.
- `plan terraform`: compară situația actuală cu situația dorită și arată ce să adaugi, ce să schimbi, ce să ștergi. Nu implementează nimic. Este cel mai critic pas de securitate.
- `terraform apply`: De fapt aplică Planul, creând/modificând resurse.
În plus, două concepte sunt vitale. State (fișier de stare): Acesta este fișierul în care Terraform păstrează starea curentă a resurselor pe care le gestionează; De obicei, este depozitat într-un depozit îndepărtat și încuiat, astfel încât două persoane să nu îl poată schimba sau distruge în același timp. Modul: Pachet de configurare reutilizabil; De exemplu, puteți utiliza modulul „configurați o rețea” în multe proiecte.
Sfat: Cel mai periculos semn dintr-o ieșire Terraform este liniile de distrugere sau -/+ (înlocuire) din ieșirea planului. Acestea înseamnă că resursa va fi ștearsă. Dacă vedeți o distrugere neașteptată într-un plan, nu aplicați niciodată, mai întâi înțelegeți de ce a apărut.
Pas cu pas: Scrierea IaC cu AI
- Clarificați infrastructura dorită. Fiți concret ca „un VPC, două subrețele, un grup de securitate și un t3.micro EC2 pe eu-central-1”.
- Specificați furnizorul și versiunea. Ce nor, ce Terraform și versiunea furnizorului? Dacă nu specificați o versiune, AI poate returna o sintaxă învechită/incompatibilă.
- Produceți proiectul HCL. De asemenea, solicitați variabile și ieșiri.
- Scoateți Secretul. Valori precum parolele și cheile ar trebui să meargă la variabile și seif secret, nu la cod.
- Rulați `init` + `plan`. Citiți ieșirea planului linie cu linie; Verificați dacă există ștergeri neașteptate.
- Începeți mic, implementați treptat. Aplicați-l mai întâi într-un cont/mediu de testare izolat.
Securitate: riscuri specifice IaC
IaC este pe cât de riscant, pe atât de puternic. Trei puncte critice:
- Există un secret în dosarul de stat. Starea Terraform păstrează uneori valorile sensibile, cum ar fi parolele bazei de date, în text simplu. Nu pune niciodată Statul într-un depozit public; Utilizați un backend la distanță criptat, cu acces restricționat.
- Nu încorporați secrete în HCL. Liniile precum password="prod123" sunt scrise permanent în istoricul Git. În schimb, utilizați o variabilă și dați valoarea în timpul execuției din variabila de mediu (TF_VAR_...) sau seif secret.
- Permisiune IAM foarte largă. AI produce uneori blocuri precum Acțiune: „*” (permite totul) pentru a „fa să funcționeze”. Aceasta este o vulnerabilitate; restrânge permisiunea la minimul necesar.
Atenție: Odată ce un secret intră în istoricul Git, acesta rămâne în trecut și poate fi compromis, chiar dacă ștergeți fișierul. Dacă comiteți din greșeală, anulați imediat și rotiți secretul; Doar ștergerea nu este suficientă.
Tabel de semne de plan riscant
Imprimarea planului
Înțeles
ce să faci
+creează
O nouă resursă va fi adăugată
În general sigur, revizuiește totuși
~ actualizare in loc
Sursa se va schimba pe site
Verificați impactul (va fi o întrerupere?)
-/+ înlocuiți
Va fi șters și recreat
ATENȚIE: poate apărea pierderea datelor
- distruge
Resursa va fi distrusă
STOP: nu aplica niciodată dacă nu te aștepți
trei mini cutii
Cazul 1 — 2 zile de muncă în 3 ore. O echipă urma să scrie Terraform pentru a configura un nou mediu de testare (VPC, subrețele, baza de date RDS, cluster ECS), dar tocmai se mutaseră la HCL. Ei au descris arhitectura și versiunile AI și au produs un model modular. Au verificat fiecare modul cu planul și l-au pus în funcțiune în 3 ore; Le-ar lua două zile de încercare manuală și eroare.
Cazul 2 — planul a fost șters. Un inginer a rulat un plan fără a aplica un cod de actualizare generat de AI. Ieșirea conținea -/+ înlocuire pentru baza de date de producție — AI a încercat să înlocuiască un câmp care nu poate fi înlocuit, ceea ce a însemnat ștergerea și recrearea bazei de date. Inginerul a oprit aplicarea și a schimbat modificarea la metoda sigură. Obiceiul de a planifica a prevenit un dezastru.
Cazul 3 — scurgere secretă îngropată. Un junior, YZ a emis db_password = "S3cret!" El a comis linia așa cum este și a împins-o. Prins în revizuirea codului; Parola a fost imediat anulată și schimbată, valoarea a fost mutată într-o variabilă și alimentată din seiful secret. Lecție: Nu există niciodată secrete în text clar în HCL.
Patru șabloane copiabile
1) Generarea proiectului de infrastructură:
Scrieți următoarea infrastructură pe [CLOUD: AWS] cu Terraform (versiunea ~> 1.7): [LISTA SURSE]. Regiunea [X]. Reguli:- Faceți toate valorile sensibile variabile, nu le încorporați în HCL.- Remediați versiunea furnizorului (required_providers).- Minimizați permisiunile IAM, nu folosiți „*”.- Returnați [X, Y] ca ieșire. Dați codul modular și cu explicații.
2) Interpretarea rezultatului planului:
Analizați rezultatul „planului de terraformă” de mai jos. Enumerați-mă:(1) ce resurse au fost adăugate/modificate/ȘTERSE,(2) rânduri cu risc de pierdere sau întrerupere a datelor,(3) 3 întrebări pe care ar trebui să le pun înainte de a aplica.Plan: [OUTPUT]
3) Examinați HCL existent pentru securitate:
Verificați următorul cod Terraform pentru securitate: secret încorporat, permisiunea IAM prea largă, regulă de rețea deschisă (0.0.0.0/0), stocare necriptată? Scrieți fiecare constatare în ordinea importanței și a corectării. Cod: [HCL]
4) Convertiți codul repetitiv în modul:
Convertiți următorul cod Terraform repetitiv într-un modul reutilizabil: ce valori ar trebui să fie variabile, care ar trebui să fie interfața modulului? Afișați și exemple de utilizare. Cod: [HCL]
Prompt slab / Prompt puternic
Slab: „Creează o bază de date cu Terraform”.
Rezultat: nu este clar ce nor, ce motor, ce versiune, criptat sau nu; Cu sintaxa moștenită, AI poate oferi un exemplu disponibil public care încorporează parola în cod.
Puternic: „Creați o instanță RDS PostgreSQL 15 pe AWS cu Terraform ~> 1.7. Faceți variabila parolei, nu o încorporați în cod. Stocarea este criptată, accesibilă numai din subrețeaua privată, nu publică. Remediați versiunea furnizorului. Returnați punctul final ca rezultat.”
Diferență: al doilea prompt oferă motorul, versiunea, criptarea, constrângerea rețelei și regula secretă - ieșirea este sigură și aproape de produs.
Greșeli comune
- A „aplica” fără a face un „plan”. Cea mai scumpă greșeală în IaC; întotdeauna planifică primul.
- Încorporarea secretului în HCL. Creează scurgeri permanente în istoricul Git.
- Statul de stocare nesigur. Un stat public necriptat, deblocat, este un dezastru.
- Nu se remediază versiunea. Utilizarea furnizorului fără a specifica o versiune va duce la eșecuri bruște în viitor.
- *`Acțiune: Permisiune largă, cum ar fi „"`.*** Încalcă principiul privilegiului minim.
- Ignorând „distrugerea” neașteptată. Aplicarea liniilor de ștergere în Plan fără a pune întrebări.
Pe scurt
IaC transformă infrastructura în cod repetabil, versionabil și auditabil; Cel mai comun instrument este Terraform. AI produce rapid stub-uri HCL, dar trebuie să furnizați versiunea, detaliile specifice norului și regulile de securitate. Regula infailibilă în Terraform: pentru a vedea fiecare schimbare cu un plan, pentru a interoga ștergerile neașteptate, pentru a păstra secretele departe de cod și pentru a menține starea în siguranță. Liniile de distrugere și înlocuire dintr-un plan de ieșire sunt locurile care ar trebui citite cu cea mai mare atenție.
Sarcina de aplicare
Cereți AI să genereze o infrastructură mică (de exemplu, o găleată de stocare și o politică de acces) folosind șablonul „Generează schița infrastructurii” de mai sus. Apoi: (1) verificați șablonul de „vetting” pentru permisiuni secrete sau * încorporate în cod; (2) dacă este posibil, rulați init + plan într-un cont de test și citiți rezultatul planului cu șablonul „interpretare plan”; (3) notați orice ștergere/modificări neașteptate.
lista de verificare
- [ ] Am adăugat cloud, versiunea Terraform/furnizor și constrângeri de criptare/rețea la promptul meu.
- [ ] Nu există un secret de text simplu în cod; valori de precizie variabile.
- [ ] Am restrâns IAM/permisiunile la permisiuni minime, * Nu le-am folosit.
- [ ] Am rulat planul înainte de a aplica și am citit rezultatul linie cu linie.
- [ ] Am verificat că nu există nicio distrugere/înlocuire neașteptată în Plan.
- [ ] Sunt sigur că starea este păstrată într-un backend criptat, blocat și restricționat.