Jedinica 3 / 11

Upravljanje infrastrukturom kao kod: umjetna inteligencija s Terraformom i IaC-om

Dobici:

  • Sposobnost razumijevanja koncepta IaC-a i radnog ciklusa Terraforma (pokretanje, planiranje, primjena, stanje, modul) i posjedovanje umjetne inteligencije za proizvodnju sigurnih HCL nacrta
  • Mogućnost provjere svake promjene planom prije primjene i hvatanja neočekivanih linija za uništavanje/zamjena
  • Sposobnost primjene principa čuvanja tajni izvan koda, bezbednog čuvanja stanja i minimiziranja IAM dozvola

U prošlosti, postavljanje servera je bilo pitanje klikanja kroz cloud panel: kreiranje virtuelne mašine, postavljanje mreže, dodavanje bezbednosnog pravila. Ova metoda je bila spora, sklona greškama i neponovljiva - bilo je gotovo nemoguće podesiti isto okruženje drugi put. Danas se infrastrukturom upravlja kao kod. IaC (Infrastructure as Code) je pristup opisivanju resursa u oblaku kao što su serveri, mreže i baze podataka u tekstualnim datotekama, a ne ručno. Ovi fajlovi se nalaze u kontroli verzija (Git); Možete vidjeti ko je šta promijenio, kada i šta; Možete postaviti istu infrastrukturu više puta, na potpuno isti način, jednom komandom.

Najčešći IaC alat je Terraform. Terraform preuzima definicije koje napišete na čitljivom jeziku koji se zove HCL (HashiCorp Configuration Language — Terraformov konfiguracijski jezik), prevodi ih u API dobavljača oblaka (AWS, Azure, GCP) i kreira resurse. AI vrlo dobro poznaje HCL i brzo proizvodi složene blokove. Ali u IaC-u, cijena greške je visoka: jedna pogrešna definicija može izbrisati cijelu proizvodnu bazu podataka. Zato je zlatno pravilo u Terraformu da se svaka promjena vidi s 'planom' prije nego što je implementira.

Terraform-ovo vrijeme izvođenja

Terraform radi sa tri osnovne komande - poznavanje ovih je preduslov za kontrolu AI izlaza:

  • `terraform init`: Pokreće projekat, preuzima potrebne dodatke dobavljača.
  • `terraform plan`: Upoređuje trenutnu situaciju sa željenom i pokazuje šta dodati, šta promijeniti, šta izbrisati. Ne implementira ništa. To je najkritičniji sigurnosni korak.
  • `terraform apply`: Zapravo primjenjuje Plan, kreirajući/modifikujući resurse.

Osim toga, dva su koncepta od vitalnog značaja. State (datoteka stanja): Ovo je datoteka u kojoj Terraform čuva trenutno stanje resursa kojima upravlja; Obično se čuva u udaljenom i zaključanom skladištu tako da ga dvije osobe ne mogu promijeniti ili uništiti u isto vrijeme. Modul: Konfiguracijski paket za višekratnu upotrebu; Na primjer, možete koristiti modul "postava mreže" u mnogim projektima.

Savjet: Najopasniji znak u Terraform izlazu je uništiti ili -/+ (zamijeniti) linije u izlazu plana. To znači da će resurs biti obrisan. Ako vidite neočekivano uništenje u planu, nikada se ne primjenjujte, prvo shvatite zašto se pojavio.

Korak po korak: Pisanje IaC-a sa AI

  1. Pojasnite željenu infrastrukturu. Budite konkretni kao "jedan VPC, dvije podmreže, jedna sigurnosna grupa i jedan t3.micro EC2 na eu-central-1".
  2. Navedite provajdera i verziju. Koji oblak, koja verzija Terraforma i provajdera? Ako ne navedete verziju, AI može vratiti zastarjelu/nekompatibilnu sintaksu.
  3. Dajte izraditi HCL nacrt. Također zahtijevajte varijable i izlaze.
  4. Izvadite Secret. Vrijednosti kao što su lozinke i ključevi trebaju ići u varijabli i tajni trezor, a ne u kod.
  5. Pokrenite `init` + `plan`. Pročitajte izlaz plana red po red; Provjerite ima li neočekivanih brisanja.
  6. Počnite s malim, implementirajte postepeno. Prvo ga primijenite u izolovanom testnom nalogu/okruženju.

Sigurnost: Rizici specifični za IaC

IaC je rizičan koliko i moćan. Tri kritične tačke:

  1. Postoji tajna u državnom dosijeu. Terraform stanje ponekad čuva osjetljive vrijednosti, kao što su lozinke baze podataka, u otvorenom tekstu. Nikada ne stavljajte State u javno spremište; Koristite šifriranu udaljenu pozadinu s ograničenim pristupom.
  2. Nemojte ugrađivati ​​tajne u HCL. Redovi poput password="prod123" se trajno upisuju u Git historiju. Umjesto toga, koristite varijablu i dajte vrijednost u vrijeme izvođenja iz varijable okruženja (TF_VAR_...) ili tajnog trezora.
  3. Vrlo široka IAM dozvola. AI ponekad proizvodi blokove kao što je Akcija: "*" (dopusti sve) da bi "radio". Ovo je ranjivost; suzite dozvolu na minimum potreban.
Pažnja: Jednom kada tajna uđe u Git historiju, ona ostaje u prošlosti i može biti ugrožena, čak i ako izbrišete datoteku. Ako izvršite greškom, odmah otkažite i rotirajte tajnu; Samo brisanje nije dovoljno.

Tablica sa znakovima rizičnih planova

Ispis plana

Značenje

šta da radim

+create

Novi resurs će biti dodan

Općenito sigurno, ipak pregledajte

~ ažuriranje na mjestu

Izvor će se promijeniti na licu mjesta

Provjeriti utjecaj (hoće li doći do prekida rada?)

-/+ zamijeniti

Biće obrisan i ponovo kreiran

OPREZ: može doći do gubitka podataka

- uništiti

Resurs će biti uništen

STOP: nikada se ne prijavi ako to ne očekuješ

tri mini kofera

Slučaj 1 — 2 dana rada za 3 sata. Jedan tim je nameravao da napiše Terraform da postavi novo testno okruženje (VPC, podmreže, RDS baza podataka, ECS klaster), ali su se upravo preselili na HCL. Opisali su arhitekturu i verzije AI i izradili modularni nacrt. Verificirali su svaki modul sa planom i pokrenuli ga za 3 sata; Trebalo bi im dva dana ručnog pokušaja i grešaka.

Slučaj 2 — plan je zahvaćen brisanjem. Inženjer je pokrenuo plan bez primjene koda za ažuriranje generiranog umjetnom inteligencijom. Izlaz je sadržavao -/+ zamjenu za proizvodnu bazu podataka — AI je pokušao zamijeniti nezamjenjivo polje, što je značilo brisanje i ponovno kreiranje baze podataka. Inženjer je prestao primjenjivati ​​i promijenio promjenu na siguran metod. Navika planiranja spriječila je katastrofu.

Slučaj 3 - zakopano tajno curenje. Junior, YZ je izdao db_password = "S3cret!" Postavio je liniju kakva jeste i gurnuo je. Uhvaćen u pregledu koda; Lozinka je odmah poništena i promijenjena, vrijednost je premještena u varijablu i unesena iz tajnog trezora. Lekcija: U HCL-u nikada ne postoje tajne otvorenog teksta.

Četiri šablona za kopiranje

1) Izrada nacrta infrastrukture:

Napišite sljedeću infrastrukturu na [OBLAK: AWS] sa Terraformom (verzija ~> 1.7): [LISTA IZVORA]. Region [X]. Pravila:- Učinite sve osjetljive vrijednosti promjenjivim, nemojte ih ugrađivati ​​u HCL.- Popravite verziju provajdera (required_providers).- Minimizirajte IAM dozvole, nemojte koristiti "*".- Vratite [X, Y] kao izlaz. Dajte kod modularno i sa objašnjenjima.

2) Tumačenje rezultata plana:

Analizirajte izlaz 'terraformnog plana' u nastavku. Navedite me: (1) koji su resursi dodani/promijenjeni/IZBRISANI, (2) redovi u opasnosti od gubitka ili prekida podataka, (3) 3 pitanja koja bih trebao postaviti prije prijave. Plan: [IZLAZ]

3) Ispitajte postojeći HCL radi sigurnosti:

Provjerite sljedeći Terraform kod za sigurnost: ugrađena tajna, preširoka IAM dozvola, otvoreno mrežno pravilo (0.0.0.0/0), nešifrirano skladište? Zapišite svaki nalaz redoslijedom važnosti i ispravke. Šifra: [HCL]

4) Pretvorite ponavljajući kod u modul:

Konvertujte sledeći Terraform kod koji se ponavlja u modul za višekratnu upotrebu: koje vrednosti treba da budu varijable, šta treba da bude interfejs modula? Također pokažite primjer upotrebe. Šifra: [HCL]

Slaba prompt / Jaka prompt

Slabo: "Kreirajte bazu podataka pomoću Terraforma."

Rezultat: nejasno koji oblak, koji motor, koja verzija, šifrirana ili ne; Uz naslijeđenu sintaksu, AI može pružiti javno dostupan primjer koji ugrađuje lozinku u kod.

Snažno: "Kreirajte RDS PostgreSQL 15 instancu na AWS-u sa Terraform ~> 1.7. Napravite varijablu lozinke, nemojte je ugrađivati ​​u kod. Skladište je šifrirano, dostupno samo iz privatne podmreže, nije javno. Popravite verziju dobavljača. Vratite krajnju tačku kao izlaz."

Razlika: drugi prompt daje motor, verziju, enkripciju, mrežno ograničenje i tajno pravilo — izlaz je siguran i blizak proizvodu.

Uobičajene greške

  • Da se `prijavite` bez izrade `plana`. Najskuplja greška u IaC-u; uvek prvo planiraj.
  • Ugrađivanje tajne u HCL. Stvara trajno curenje u Git historiju.
  • Stanje skladištenja nesigurno. Nešifrirano, otključano, javno stanje je katastrofa.
  • Ne popravljam verziju. Korištenje provajdera bez navođenja verzije će dovesti do iznenadnih kvarova u budućnosti.
  • *`Radnja: Široka dozvola kao što je ""`.** Krši princip najmanje privilegija.
  • Ignoriranje neočekivanog `uništavanja`. Primjena linija za brisanje u Planu bez pitanja.

Ukratko

IaC pretvara infrastrukturu u kod koji se može ponoviti, koji se može verzijama i revidirati; Najčešći alat je Terraform. AI brzo proizvodi HCL stubove, ali morate navesti verziju, detalje specifične za oblak i sigurnosna pravila. Nepogrešivo pravilo u Terraformu: vidjeti svaku promjenu s planom, ispitivati ​​neočekivana brisanja, čuvati tajne dalje od koda i čuvati stanje na sigurnom. Uništavanje i zamjena linija u izlazu plana su mjesta koja treba najpažljivije pročitati.

Zadatak aplikacije

Neka AI generira malu infrastrukturu (npr. spremnik za pohranu i politiku pristupa) koristeći gornji predložak "Generiraj skicu infrastrukture". Zatim: (1) neka predložak "provjere" provjeri ima li tajnih ili * dozvola ugrađenih u kod; (2) ako je moguće, pokrenite init + plan na probnom računu i pročitajte izlaz plana sa šablonom "interpretacija plana"; (3) zabilježiti sva neočekivana brisanja/promjene.

kontrolna lista

  • [ ] Dodao sam oblak, Terraform/verziju dobavljača i šifriranje/mrežna ograničenja u svoj upit.
  • [ ] U kodu nema tajne otvorenog teksta; vrijednosti preciznosti varijabilne.
  • [ ] Suzio sam IAM/dozvole na minimalne dozvole, * Nisam ga koristio.
  • [ ] Pokrenuo sam plan prije primjene i pročitao izlaz red po red.
  • [ ] Provjerio sam da u Planu nema neočekivanog uništenja/zamjene.
  • [ ] Siguran sam da se stanje čuva u šifriranoj, zaključanoj i ograničenoj pozadini.