Vienība 6 / 11

Infrastruktūras pārvaldība kā kods (IaC): Terraform, Ansible un Plan Control

Ieguvumi:

  • Spēja ražot IaC (Terraform, Ansible) kodu ar mākslīgo intelektu ar šaurākajām atļaujām un drošiem noklusējuma iestatījumiem un izprast deklaratīvo pieeju
  • Spēja novērst datu zudumu, nolasot un tverot dzēšanas un piespiedu aizstāšanas līnijas pirms plāna/pārbaudes izvades piemērošanas
  • Spēja novērst slepenu noplūdi, saglabājot stāvokļa failu šifrētu, bloķētu attālajā aizmugursistēmā un sadalot izmaiņas mazās, atgriezeniskās darbībās

Infrastruktūras kā koda pārvaldība (IaC): Terraform, Ansible un Plan Control ar AI

Agrāk servera iestatīšana tika veikta ar manuāliem klikšķiem, komandām un personīgām piezīmēm; Rezultāts bija neatkārtojami "sniegpārsliņu" serveri, kurus neviens precīzi nezināja, kā iestatīt. Infrastruktūra kā kods (IaC) ir pieeja, kas izbeidz šo haosu: serveri, tīkli, drošības noteikumi tiek definēti nevis ar roku, bet gan ar versijas teksta failiem (kodu). Kad palaižat šo kodu, infrastruktūra tiek iestatīta tieši tā, kā jūs to uzrakstījāt — tā pati, dokumentēta un atkārtojama katru reizi. Visizplatītākie rīki ir Terraform un CloudFormation mākoņa infrastruktūrai un Ansible servera konfigurēšanai. Šeit AI ir ļoti prasmīgi rakstīt, izskaidrot un pārskatīt šo IaC kodu. Taču IaC spēks ir arī tās briesmas: viena nepareiza līnija var iznīcināt visu infrastruktūru; tāpēc AI raksta kodu, jūs izlasiet "plānu", apstipriniet to un izpildiet to.

Šajā nodaļā apspriedīsim deklaratīvo pieeju, plānošanas/pielietošanas atšķirību, valsts drošību un idempotenci; Jūs apgūsit IaC ģenerēšanu ar AI un vissvarīgāko prasmi - "plāna kontroli".

Domājot deklaratīvi: "kā būtu, ja būtu", nevis "kā darīt"

Lielākā daļa IaC rīku ir deklaratīvi: jūs aprakstāt sistēmas galīgo stāvokli ("teiksim, 3 tīmekļa serveri, 1 slodzes balansētājs"), pats rīks aprēķina, kā nokļūt šajā stāvoklī. Tas atšķiras no skripta rakstīšanas ("dari tā, tad dari to" soli pa solim). Liela deklaratīvās pieejas priekšrocība ir idempotence: pat palaižot kodu desmit reizes, rezultāts ir vienāds, jo rīks pārbauda, ​​vai vēlamais stāvoklis jau pastāv, un, ja ir, tad tam nepieskaras. Atcerieties šo atšķirību, rakstot IaC AI: lieciet tam teikt "ļaujiet šai infrastruktūrai stāvoklim", nevis "palaist šīs komandas".

Plānojiet/piemērojiet: vissvarīgākās drošības margas

IaC dzīvības glābšanas funkcija ir plāna solis. Terraform, terraform plan, Ansible, --check režīmā pirms koda palaišanas tiek izveidots priekšskatījums "kas mainīsies, ja es to lietošu": "Tiks pievienoti 2 resursi, 1 tiks mainīts, 0 tiks dzēsts". Tas ir vienīgais veids, kā pirms īstenošanas salīdzināt savu nodomu ar realitāti. Kritiskais noteikums: nekad nepiesakieties, neizlasot plānu. Īpaši meklējiet "iznīcināšanas" līnijas; Ja drukas kļūdas dēļ redzat “12 tiks dzēsti”, nevis “tiks mainīts 1”, plāns ir pasargājis jūs no katastrofas. Pēc koda izdrukāšanas AI ļaujiet tam teikt: “Pārbaudiet plāna izvades rindu ar mani, atzīmējiet katru rindiņu, kurā ir ietverta dzēšana/atjaunošana”.

Uzmanību: dažas Terraform izmaiņas "iznīcina un atjauno" resursu, nevis "atjaunina vietā". Tas nozīmē datu zudumu datu bāzei. Ignorēšana -/+ jeb "piespiež nomaiņu" plāna izvadē ir viena no dārgākajām kļūdām.

Valsts lieta: noslēpumu un patiesības ieraksts

Tādi rīki kā Terraform saglabā pašreizējo pārvaldītās infrastruktūras stāvokli stāvokļa failā. Šis fails ir svarīgs divu iemeslu dēļ. Pirmkārt, tas var saturēt noslēpumus (datu bāzes paroles, atslēgas var nonākt stāvoklī vienkāršā tekstā); Tāpēc nekad neielīmējiet statusu publiskā repozitorijā vai AI, saglabājiet to šifrētā un ierobežotas piekļuves attālā aizmugursistēmā. Otrkārt, ja valsts tiek korumpēta vai pazaudēta, transportlīdzeklis zaudē saikni starp reālo infrastruktūru un iedomāto infrastruktūru; Tāpēc valsts rezerves kopija un bloķēšanas mehānisms (slēdzene, kas neļauj diviem cilvēkiem to uzlauzt vienlaikus) ir būtiska.

Soli pa solim: nodrošiniet IaC ar AI

  1. Valsts nolūks un nodrošinātājs. "2 serveri AWS, ar Terraform, šajā reģionā, šāda izmēra un drošības grupa." Ja mākonis, rīks un versija ir skaidri, AI rada pareizu sintaksi.
  2. Pieprasīt drošības noklusējuma iestatījumus. "Atveriet drošības grupu, iespējojiet šifrēšanu, izņemiet noslēpumus mainīgajam, piešķiriet publisku piekļuvi." AI pēc noklusējuma var ģenerēt vaļīgus paraugus.
  3. Izlasiet un saprotiet kodu. Izprotiet katru resursu, katru atļauju, rindiņu pa rindiņai. Neizmantojiet atļauju, kuru nesaprotat.
  4. Saņemiet plānu un pārbaudiet to. Palaidiet plānu/--pārbaudi, pārbaudiet izvadi ar AI, atzīmējiet dzēšanas un atjaunošanas līnijas.
  5. Uzklājiet mazu un atgriezenisku. Ieviesiet lielas izmaiņas mazās daļās, nevis visas uzreiz. Ziniet atpakaļceļu ik uz soļa.
  6. Aizsargāt valsti. Izmantojiet attālo, šifrētu aizmugursistēmu un bloķēšanu; Nekad noplūdes stāvoklī.

trīs mini futrāļi

1. gadījums — plāns atjaunoja datubāzi. Inženieris vēlējās palielināt datubāzes lielumu ar Terraform kodu, ko viņš izveidoja ar AI. Kamēr viņš teraformas plāna izvadē gaidīja “1 mainīsies”, viņš redzēja “1 iznīcināt, 1 pievienot” — viņa izvēlētais parametrs izraisīja pārbūvi, nevis atjaunināšanu vietā, kas nozīmē, ka visi dati tiks dzēsti. Plāna kontrole apturēja neatgriezenisku datu zudumu, pirms tā tika ieviesta.

2. gadījums — atgriešanās no brīvas noklusējuma. Komanda prasīja AI ugunsmūra kodu. Lai palaistu piemēru, AI ģenerēja vienkāršu noteikumu 0.0.0.0/0, kas nozīmē "publisks internetā". Inženieris to pamanīja, lasot kodu, un sašaurināja piekļuvi tikai uzņēmuma IP diapazonam. Ja tas tiktu ieviests bez audita, datubāze būtu atvērta visam internetam.

3. gadījums — novērsta stāvokļa noplūde. Jaunākais dalībnieks grasījās ielīmēt neskartu failu terraform.tfstate publiskā rīkā, lai atrisinātu Terraform problēmu. Vecākais inženieris apturēts: statusā ir ietverta vienkārša teksta datu bāzes parole. Tā vietā tika kopīgots atšifrēts kopsavilkums, kurā aprakstīta problēma, un stāvoklis tika pārvietots uz attālo šifrēto aizmugursistēmu.

Četras kopējamas veidnes

1) IaC resursu ģenerēšana (drošs noklusējums):

Jūsu loma: vecākais mākoņu infrastruktūras inženieris. [Mākonis, piem. AWS] [rīkam, piem. Terraform] ģenerēt kodu. Mērķis: [mērķis].Drošības noteikumi: publiska (0.0.0.0/0) piekļuve OPEN;sākt ar šaurāko atļauju; ieslēgt šifrēšanu; izvelciet noslēpumus mainīgajos lielumos, neiekļaujiet tos kodā; Pārbaudiet iestatījumus, kas var izraisīt dzēšanu/atjaunošanu. Paskaidrojiet katru avotu ar īsu komentāru.

2) Plānot rezultātu auditu:

Zemāk ir [Terraform plan / Ansible check] izvade. Pastāstiet man: (1) cik daudz resursu tiks pievienots/mainīts/dzēsts, (2) atzīmējiet arī rindas "iznīcināt" vai "piespiest nomainīt", kas rada datu zaudēšanas risku, (3) uzskaitīt visas izmaiņas, kas šķiet negaidītas vai bīstamas. Rezultāts: [plāns]

3) IaC koda drošības pārbaude:

Pārbaudiet šādu IaC kodu drošības nolūkos: (1) vai ir pārāk plaša piekļuve/atļaujas, (2) vai šifrēšana ir izslēgta, (3) vai kodā ir iegulti noslēpumi, (4) vai ir publiski pieejami resursi? Iesakiet labojumus katram atradumam. Kods: [maskēts kods]

4) Sadaliet izmaiņas drošās daļās:

Es negribu šīs lielās infrastruktūras izmaiņas [paskaidrojums] īstenot uzreiz. Sadaliet to mazos, neatkarīgos posmos, pie kuriem ir viegli atgriezties. Katram solim: kas mainās, kam vajadzētu pievērst uzmanību plānā, kā to atsaukt, ja ir problēmas?

Vāja uzvedne / spēcīga uzvedne

Vāja uzvedne:

Uzrakstiet Terraform kodu, kas izveido serveri AWS.

Reģions, lielums, drošība, tīkls, šifrēšana nav skaidra. AI rada visnepiemērotākos, visprecīzākos noklusējuma iestatījumus — ja tas tiktu ieviests ražošanā, tas būtu ievainojamība.

Spēcīga uzvedne:

Jūsu loma: vecākais mākoņu infrastruktūras inženieris. Definējiet tīmekļa serveri ar Terraform uz AWS eu-central-1: t3.small, tikai no korporatīvā IP diapazona (es došu ar mainīgo), ports 443 ir atvērts, disks ir šifrēts, nav publiskas piekļuves, etiķetes ir obligātas. Mainīgajam tiek atklāti noslēpumi. Pēc koda: pirms tā ieviešanas, pastāstiet man 3 līniju veidus, kuriem man vajadzētu pievērst uzmanību plānā, un izskaidrojiet atgriešanās ceļu.

Skatuves

Risks

drošības margas

koda rakstīšana

Brīvs noklusējuma (publisks)

Šaurākā atļauja + lasīt

plānot/pārbaudīt

Dzēš nemanot

Plānojiet pārbaudi, iznīciniet marķējumu

Pieteikties

Būtiskas vienreizējas izmaiņas

Mazi, atgriezeniski soļi

valsts pārvalde

Glazūras noplūde, deformācija

Attāli šifrēta aizmugursistēma + bloķēšana

Biežas kļūdas

  • Pieteikšanās, neizlasot plānu. Plāns paredz dzēšanu un rekonstrukciju; Ja tas tiek izlaists, datu zudums ir neizbēgams.
  • Nepamanot vaļīgo noklusējuma. AI gadījumi bieži rada 0.0.0.0/0; Ja tas tiek pārvietots uz ražošanu, tas nozīmē atvērto avotu visam internetam.
  • Noplūdes valsts. Stāvokļa faila eksportēšana uz AI vai atvērtu repozitoriju atklāj vienkārša teksta noslēpumus.
  • Noslēpumu iegulšana kodā. Paroles ierakstīšana IaC kodā ir pastāvīga noplūde koda versiju vēsturē.
  • Kļūdaini pārbūve pret atjauninājumu. Ignorējot spēku nomaiņas līniju, tiks zaudēti dati datu bāzēs.
Padoms. Pat ja nododat plāna izvadi AI pārskatīšanai, galīgo lēmumu pamatojiet ar savām zināšanām, nevis plāna tekstu. AI apkopo plānu un atzīmē riskantas līnijas; bet atbilde uz jautājumu "vai šī dzēšana ir pieņemama" ir atkarīga no jūsu uzņēmējdarbības konteksta.

Rezumējot

IaC nodrošina atkārtojamību un dokumentāciju, pārvaldot infrastruktūru ar versijas kodu, nevis manuāliem klikšķiem. AI ir spēcīgs partneris šī koda rakstīšanā, aprakstīšanā un drošības nolūkos. Bet IaC spēks ir tā bīstamība: viena līnija var iznīcināt visu infrastruktūru. Domājiet par deklaratīviem, sāciet ar šaurāko atļauju, izlabojiet zaudētos noklusējuma iestatījumus, glabājiet noslēpumus ārpus koda un stāvokļa. Vissvarīgākais aizsargmargas ir plānošanas/pārbaudes solis: nekad neizpildiet, neizlasot dzēšanas un atjaunošanas rindas. Saglabājiet statusu šifrētu, bloķētu un attālinātu. Kods ir AI, lēmums ir jūsu.

Lietojumprogrammas uzdevums

Izvēlieties nelielu infrastruktūras mērķi (piemēram, vienu virtuālo mašīnu un drošības noteikumu). Izmantojot iepriekš norādīto veidni “IaC resursu ģenerēšana”, pieprasiet AI kodu ar drošiem noklusējuma iestatījumiem. Vēlreiz pārbaudiet kodu, izmantojot veidni IaC koda drošības pārskats, un mēģiniet atrast vismaz vienu brīvu iestatījumu. Ja iespējams, palaidiet plānu/--pārbaudi testa kontā un pārskatiet rezultātu, izmantojot veidni "Plāna izvades pārbaude"; Skatiet, vai ir izdzēsta vai atkārtoti izveidota rindiņa. Savas atziņas un to, kā nodrošināsi valsti, pieraksti 6 punktos.

kontrolsaraksts

  • [ ] Vai es norādīju mākoni, rīku un versiju AI un pieprasīju kodu ar šaurākajām atļaujām?
  • [ ] Vai esmu pārbaudījis, vai kodā nav vaļīgu noklusējuma vērtību (0.0.0.0/0, slēgta šifrēšana)?
  • [ ] Vai esmu izvilcis mainīgā noslēpumus, nevis iegulējis tos kodā?
  • [ ] Vai es izlasīju plānu/pārbaudes rezultātu un atzīmēju dzēšanas rindas pirms pieteikšanās?
  • [ ] Vai esmu novērtējis "spēku nomaiņas"/pārbūves līniju datu zuduma ietekmi?
  • Vai es neglabāju [ ] State failu šifrētu, bloķētu attālajā aizmugursistēmā un neizpludināju to?