Ieguvumi:
- Spēja izprast IaC koncepciju un Terraform darba ciklu (iesākt, plānot, lietot, stāvokli, moduli) un likt mākslīgajam intelektam radīt drošus HCL melnrakstus
- Spēja pārbaudīt katru izmaiņu ar plānu pirms pieteikšanās un noķert negaidītas iznīcināšanas/aizvietošanas līnijas
- Spēja piemērot principus, kas paredz neslēpt noslēpumus no koda, droša stāvokļa saglabāšanu un IAM atļauju samazināšanu.
Agrāk servera iestatīšana notika, noklikšķinot caur mākoņa paneli: izveidojiet virtuālo mašīnu, iestatiet tīklu, pievienojiet drošības noteikumu. Šī metode bija lēna, ar kļūdu iespējamību un neatkārtojama — to pašu vidi otrreiz iestatīt bija gandrīz neiespējami. Mūsdienās infrastruktūra tiek pārvaldīta kā kods. IaC (Infrastructure as Code) ir pieeja mākoņa resursu, piemēram, serveru, tīklu un datubāzu aprakstīšanai teksta failos, nevis manuāli. Šie faili atrodas versiju kontrolē (Git); Jūs varat redzēt, kurš ko mainīja, kad un ko; Jūs varat iestatīt vienu un to pašu infrastruktūru vairākas reizes, tieši tādā pašā veidā, ar vienu komandu.
Visizplatītākais IaC rīks ir Terraform. Terraform izmanto jūsu rakstītās definīcijas lasāmā valodā, ko sauc par HCL (HashiCorp konfigurācijas valoda — Terraform konfigurācijas valoda), pārtulko tās mākoņa nodrošinātāja (AWS, Azure, GCP) API un izveido resursus. AI ļoti labi zina HCL un ātri ražo sarežģītus blokus. Bet IaC kļūdas izmaksas ir augstas: viena nepareiza definīcija var iznīcināt visu ražošanas datu bāzi. Tāpēc Terraform zelta likums ir redzēt visas izmaiņas ar "plānu" pirms to ieviešanas.
Terraform izpildlaiks
Terraform darbojas ar trim pamata komandām — to zināšana ir priekšnoteikums AI izvades kontrolei:
- `terraform init`: startē projektu, lejupielādē nepieciešamos nodrošinātāja spraudņus.
- `terraform plan`: salīdzina pašreizējo situāciju ar vēlamo situāciju un parāda, ko pievienot, ko mainīt, ko dzēst. Neko neīsteno. Tas ir vissvarīgākais drošības solis.
- `terraform apply`: faktiski piemēro plānu, veidojot/pārveidojot resursus.
Turklāt svarīgi ir divi jēdzieni. Stāvoklis (stāvokļa fails): šis ir fails, kurā Terraform saglabā savu pārvaldīto resursu pašreizējo stāvokli; Parasti tas tiek glabāts attālā un aizslēgtā noliktavā, lai divi cilvēki to nevarētu vienlaikus mainīt vai iznīcināt. Modulis: atkārtoti lietojama konfigurācijas pakotne; Piemēram, daudzos projektos varat izmantot "tīkla iestatīšanas" moduli.
Padoms: visbīstamākā zīme Terraform izvadē ir iznīcināt vai -/+ (aizstāt) līnijas plāna izvadā. Tas nozīmē, ka resurss tiks dzēsts. Ja plānā redzat negaidītu iznīcināšanu, nekad nepiesakieties, vispirms saprotiet, kāpēc tas parādījās.
Soli pa solim: IaC rakstīšana ar AI
- Noskaidrojiet vēlamo infrastruktūru. Esiet konkrēts, piemēram, "viens VPC, divi apakštīkli, viena drošības grupa un viens t3.micro EC2 uz eu-central-1".
- Norādiet pakalpojumu sniedzēju un versiju. Kurš mākonis, kura Terraform un pakalpojumu sniedzēja versija? Ja nenorādīsiet versiju, AI var atgriezt novecojušu/nesaderīgu sintaksi.
- Lieciet sagatavot HCL projektu. Pieprasiet arī mainīgos un izejas.
- Izņemiet noslēpumu. Tādām vērtībām kā paroles un atslēgas jāiet uz mainīgo un slepeno glabātuvi, nevis uz kodu.
- Palaist "init" + "plan". Izlasiet plāna izvadi pēc rindas; Pārbaudiet, vai nav neparedzētu dzēšanas.
- Sāciet ar mazumiņu, īstenojiet pakāpeniski. Vispirms lietojiet to izolētā testa kontā/vidē.
Drošība: IaC specifiski riski
IaC ir tikpat riskants, cik spēcīgs. Trīs kritiskie punkti:
- Valsts kartotēkā ir noslēpums. Terraform stāvoklis dažkārt saglabā sensitīvas vērtības, piemēram, datu bāzes paroles, vienkāršā tekstā. Nekad neievietojiet valsti publiskā repozitorijā; Izmantojiet šifrētu, ierobežotas piekļuves attālo aizmugursistēmu.
- Neievietojiet noslēpumus HCL. Rindas, piemēram, password="prod123", tiek neatgriezeniski ierakstītas Git vēsturē. Tā vietā izmantojiet mainīgo un ievadiet vērtību izpildlaikā no vides mainīgā (TF_VAR_...) vai slepenās glabātuves.
- Ļoti plaša IAM atļauja. AI dažkārt rada blokus, piemēram, Action: "*" (atļaut visu), lai "darbotos". Tā ir ievainojamība; sašauriniet atļauju līdz nepieciešamajam minimumam.
Uzmanību! Tiklīdz noslēpums tiek ievadīts Git vēsturē, tas paliek pagātnē un var tikt apdraudēts, pat ja izdzēšat failu. Ja esat izdarījis kļūdas dēļ, nekavējoties atceliet un pagrieziet noslēpumu; Ar dzēšanu vien nepietiek.
Riskantu plānu zīmju tabula
Plāna izdruka
Nozīme
ko darīt
+izveidot
Tiks pievienots jauns resurss
Vispār droši, tomēr pārskatiet
~ atjaunināt uz vietas
Avots mainīsies uz vietas
Pārbaudiet ietekmi (vai būs pārtraukums?)
-/+ aizstāt
Tiks dzēsts un izveidots no jauna
UZMANĪBU: var tikt zaudēti dati
- iznīcināt
Resurss tiks iznīcināts
STOP: nekad nepiesakieties, ja jūs to negaidāt
trīs mini futrāļi
1. gadījums — 2 dienu darbs 3 stundās. Viena komanda gatavojās rakstīt Terraform, lai izveidotu jaunu testa vidi (VPC, apakštīkli, RDS datu bāze, ECS klasteris), taču viņi tikko bija pārcēlušies uz HCL. Viņi aprakstīja AI arhitektūru un versijas un izstrādāja modulāru projektu. Viņi pārbaudīja katru moduli ar plānu un lika to izveidot un darboties 3 stundu laikā; Viņiem būtu nepieciešamas divas manuālas izmēģinājuma un kļūdu dienas.
2. gadījums — plāns tika dzēsts. Inženieris veica plānu, neizmantojot AI ģenerētu atjaunināšanas kodu. Izvade saturēja -/+ aizstāšanu ražošanas datubāzei — AI mēģināja aizstāt neaizstājamu lauku, kas nozīmēja datu bāzes dzēšanu un atjaunošanu. Inženieris pārtrauca lietot un mainīja izmaiņas uz drošo metodi. Plānošanas ieradums novērsa katastrofu.
3. gadījums — apglabāta slepena noplūde. Jaunākais, YZ izdots db_password = "S3cret!" Viņš izdarīja līniju tādu, kāda tā ir, un pabīdīja to. Pieķerts koda pārskatā; Parole tika nekavējoties atcelta un mainīta, vērtība tika pārvietota uz mainīgo un ievadīta no slepenās glabātuves. Nodarbība: HCL nekad nav vienkārša teksta noslēpumu.
Četras kopējamas veidnes
1) Infrastruktūras projekta ģenerēšana:
Uzrakstiet šādu infrastruktūru [CLOUD: AWS], izmantojot Terraform (versija ~> 1.7): [AVOTU SARAKSTS]. Reģions [X]. Noteikumi:- Padariet visas sensitīvās vērtības par mainīgām, neievietojiet tās HCL.- Labojiet nodrošinātāja versiju (required_providers).- Samaziniet IAM atļaujas, neizmantojiet “*”.- Atgrieziet [X, Y] kā izvadi. Norādiet kodu modulāri un ar paskaidrojumiem.
2) Plāna rezultātu interpretācija:
Tālāk analizējiet “terraforma plāna” rezultātu. Uzskaitiet mani:(1) kādi resursi tika pievienoti/mainīti/IZDZĒSTI,(2) rindas, kurās pastāv datu zuduma vai pārtraukuma risks,(3) 3 jautājumi, kas man būtu jāuzdod pirms pieteikšanās.Plāns: [OUTPUT]
3) Pārbaudiet esošo HCL drošību:
Pārbaudiet šādu Terraform kodu drošības nolūkos: iegultais noslēpums, pārāk plaša IAM atļauja, atvērtā tīkla kārtula (0.0.0.0/0), nešifrēta krātuve? Uzrakstiet katru atradumu svarīguma un labojumu secībā. Kods: [HCL]
4) Pārveidojiet atkārtoto kodu modulī:
Konvertējiet šādu atkārtotu Terraform kodu atkārtoti lietojamā modulī: kādām vērtībām jābūt mainīgajiem, kādai jābūt moduļa saskarnei? Parādiet arī lietojuma piemērus. Kods: [HCL]
Vāja uzvedne / spēcīga uzvedne
Vāji: "Izveidojiet datu bāzi, izmantojot Terraform."
Rezultāts: nav skaidrs, kurš mākonis, kurš dzinējs, kura versija, šifrēta vai nē; Izmantojot mantoto sintaksi, mākslīgais intelekts var nodrošināt publiski pieejamu piemēru, kas kodā iestrādā paroli.
Spēcīgs: "Izveidojiet RDS PostgreSQL 15 instanci AWS, izmantojot Terraform ~> 1.7. Padariet paroli mainīgu, neievietojiet to kodā. Krātuve ir šifrēta, pieejama tikai no privātā apakštīkla, nav publiska. Labojiet pakalpojumu sniedzēja versiju. Atgrieziet galapunktu kā izvadi."
Atšķirība: otrā uzvedne norāda dzinēju, versiju, šifrēšanu, tīkla ierobežojumu un slepeno noteikumu — izvade ir droša un tuvu prod.
Biežas kļūdas
- Lai `pieteiktos`, neveidojot `plānu`. Dārgākā kļūda IaC; vienmēr vispirms plāno.
- Noslēpuma iegulšana HCL. Izveido neatgriezenisku noplūdi Git vēsturē.
- Uzglabāšanas stāvoklis nav drošs. Nešifrēts, atbloķēts, publisks stāvoklis ir katastrofa.
- Nelabo versiju. Pakalpojumu sniedzēja izmantošana, nenorādot versiju, nākotnē izraisīs pēkšņas kļūmes.
- *`Darbība: plaša atļauja, piemēram, ""`.** Pārkāpj mazāko privilēģiju principu.
- Ignorējot negaidītu "iznīcināšanu". Plāna dzēšanas rindu pielietošana bez apšaubīšanas.
Rezumējot
IaC pārvērš infrastruktūru par atkārtojamu, versējamu un auditējamu kodu; Visizplatītākais rīks ir Terraform. AI ātri izveido HCL stubs, taču jums ir jānorāda versija, mākoņa informācija un drošības noteikumi. Nekļūdīgs Terraform noteikums: redzēt visas izmaiņas plānā, vaicāt negaidītas dzēšanas, neslēpt noslēpumus no koda un saglabāt stāvokli droši. Iznīcināšanas un aizstāšanas līnijas plāna izvadē ir tās vietas, kuras jāizlasa visrūpīgāk.
Lietojumprogrammas uzdevums
Lieciet AI ģenerēt nelielu infrastruktūru (piemēram, krātuves kopu un piekļuves politiku), izmantojot iepriekš norādīto veidni “Infrastruktūras skices ģenerēšana”. Pēc tam veiciet tālāk norādītās darbības. (2) ja iespējams, testa kontā palaidiet init + plan un izlasiet plāna izvadi ar "plāna interpretācijas" veidni; (3) atzīmējiet visus negaidītus svītrojumus/izmaiņas.
kontrolsaraksts
- [ ] Es savai uzvednei pievienoju mākoņa, Terraform/provider versiju un šifrēšanas/tīkla ierobežojumus.
- [ ] Kodā nav vienkārša teksta noslēpuma; precizitātes vērtības mainīgais.
- [ ] Es samazināju IAM/atļaujas līdz minimālajām atļaujām, * Es to neizmantoju.
- [ ] Izpildīju plānu pirms pieteikšanās un izlasīju izvadi pēc rindas.
- [ ] Es pārliecinājos, ka plānā nav neparedzētas iznīcināšanas/aizvietošanas.
- [ ] Esmu pārliecināts, ka stāvoklis tiek saglabāts šifrētā, bloķētā un ierobežotā aizmugursistēmā.