Nyereség:
- Képes megérteni az IaC koncepciót és a Terraform munkaciklusát (init, terv, alkalmazás, állapot, modul), és képes a mesterséges intelligencia biztonságos HCL-vázlatok előállítására
- Lehetőség minden változás ellenőrzésére egy tervvel az alkalmazás előtt, és elkapja a váratlan megsemmisítés/csere vonalakat
- Képes alkalmazni a titkokat a kódon kívülre, az állapot biztonságos megőrzésére és az IAM-engedélyek minimalizálására vonatkozó elveket.
Régebben a szerver beállítása egy felhőpanelen való kattintásból állt: hozzon létre egy virtuális gépet, állítsa be a hálózatot, adja hozzá a biztonsági szabályt. Ez a módszer lassú, hibára hajlamos és megismételhetetlen volt – szinte lehetetlen volt ugyanazt a környezetet másodszor beállítani. Ma az infrastruktúrát kódként kezelik. Az IaC (Infrastructure as Code) egy megközelítés a felhő-erőforrások, például kiszolgálók, hálózatok és adatbázisok leírására szövegfájlokban, nem pedig manuálisan. Ezek a fájlok a verzióvezérlésben (Git) helyezkednek el; Láthatja, hogy ki mit, mikor és mit változtatott; Ugyanazt az infrastruktúrát többször is beállíthatja, pontosan ugyanúgy, egyetlen paranccsal.
A leggyakoribb IaC eszköz a Terraform. A Terraform átveszi az Ön által írt definíciókat a HCL (HashiCorp Configuration Language – a Terraform konfigurációs nyelve) nevű olvasható nyelven, lefordítja azokat a felhőszolgáltató (AWS, Azure, GCP) API-jába, és létrehozza az erőforrásokat. Az AI nagyon jól ismeri a HCL-t, és gyorsan állít elő összetett blokkokat. De az IaC-ben a hiba ára magas: egy rossz definíció egy teljes termelési adatbázist törölhet ki. Éppen ezért a Terraform aranyszabálya az, hogy minden változást egy „tervvel” kell látni a megvalósítás előtt.
A Terraform futásideje
A Terraform három alapvető paranccsal működik – ezek ismerete az AI kimenet vezérlésének előfeltétele:
- `terraform init`: Elindítja a projektet, letölti a szükséges szolgáltatói bővítményeket.
- `terraform terv`: Összehasonlítja a jelenlegi helyzetet a kívánt helyzettel, és megmutatja, mit kell hozzáadni, mit kell módosítani, mit törölni. Nem valósít meg semmit. Ez a legkritikusabb biztonsági lépés.
- `terraform alkalmazni`: Valójában alkalmazza a tervet, erőforrásokat hoz létre/módosít.
Ezenkívül két fogalom létfontosságú. Állapot (állapotfájl): Ez az a fájl, ahol a Terraform megőrzi az általa kezelt erőforrások aktuális állapotát; Általában egy távoli és zárt raktárban tárolják, hogy két ember ne tudja egyszerre megváltoztatni vagy megsemmisíteni. Modul: Újrafelhasználható konfigurációs csomag; Például sok projektben használhatja a "hálózat beállítása" modult.
Tipp: A Terraform kimenet legveszélyesebb jele a tervkimenetben lévő sorok megsemmisítése vagy -/+ (csere). Ezek azt jelentik, hogy az erőforrás törlésre kerül. Ha váratlan pusztulást lát egy tervben, soha ne jelentkezzen, először értse meg, miért jelent meg.
Lépésről lépésre: IaC írása AI-val
- Tisztázza a kívánt infrastruktúrát. Legyen konkrét, mint "egy VPC, két alhálózat, egy biztonsági csoport és egy t3.micro EC2 az eu-central-1-en".
- Adja meg a szolgáltatót és a verziót. Melyik felhő, melyik Terraform és melyik szolgáltatói verzió? Ha nem ad meg verziót, az AI elavult/inkompatibilis szintaxist adhat vissza.
- Készítse elő a HCL-tervezetet. Kérjen változókat és kimeneteket is.
- Vegye ki a Titkot. Az olyan értékeknek, mint a jelszavak és kulcsok, a változóhoz és a titkos tárolóhoz kell menniük, nem a kódhoz.
- Futtassa az "init" + "plan" parancsot. Olvassa el a terv kimenetét soronként; Ellenőrizze a váratlan törléseket.
- Kezdje kicsiben, és fokozatosan hajtsa végre. Először egy elszigetelt tesztfiókban/-környezetben alkalmazza.
Biztonság: IaC-specifikus kockázatok
Az IaC ugyanolyan kockázatos, mint erős. Három kritikus pont:
- Van egy titok az állami aktában. A Terraform állapot néha az érzékeny értékeket, például az adatbázis jelszavait, egyszerű szövegben tartja. Soha ne helyezze az államot nyilvános adattárba; Használjon titkosított, korlátozott hozzáférésű távoli háttérprogramot.
- Ne ágyazzon be titkokat a HCL-be. A jelszó="prod123"-hoz hasonló sorok véglegesen a Git előzményeibe kerülnek. Ehelyett használjon változót, és futás közben adja meg az értéket a környezeti változóból (TF_VAR_...) vagy titkos tárolóból.
- Nagyon széles IAM-engedély. A mesterséges intelligencia néha olyan blokkokat állít elő, mint az Action: "*" (mindent megenged), hogy "működjön". Ez egy sebezhetőség; szűkítse az engedélyt a szükséges minimumra.
Figyelem: Ha egy titok bekerül a Git előzményei közé, az a múltban marad, és akkor is feltörhet, ha törli a fájlt. Ha tévedésből követi el, azonnal törölje és forgassa el a titkot; Csak a törlés nem elég.
Kockázatos terv jelek táblázat
Tervnyomtatás
Jelentése
mit kell tenni
+ létrehozni
Új erőforrás kerül hozzáadásra
Általában biztonságos, de nézze át
~ frissítés helyben
A forrás a helyszínen változik
A hatás ellenőrzése (lesz-e kimaradás?)
-/+ csere
Törölve és újra létrehozva
FIGYELEM: adatvesztés léphet fel
- elpusztítani
Az erőforrás megsemmisül
STOP: soha ne jelentkezz, ha nem számítasz rá
három mini tok
1. eset — 2 napi munka 3 órában. Az egyik csapat Terraformot készült írni egy új tesztkörnyezet (VPC, alhálózatok, RDS-adatbázis, ECS-fürt) felállításához, de éppen most költöztek át a HCL-re. Leírták az AI architektúráját és verzióit, és moduláris tervezetet készítettek. Minden modult ellenőriztek a tervvel, és 3 óra alatt üzembe helyezték; Két napos kézi próbálkozásba telne.
2. eset – a tervet törölték. Egy mérnök végrehajtott egy tervet mesterséges intelligencia által generált frissítési kód alkalmazása nélkül. A kimenet -/+ helyettesítést tartalmazott az éles adatbázishoz – az AI megkísérelt egy nem cserélhető mezőt lecserélni, ami az adatbázis törlését és újbóli létrehozását jelentette. A mérnök leállította az alkalmazást, és a módosítást biztonságos módszerre változtatta. A tervezés szokása megakadályozta a katasztrófát.
3. eset – eltemetett titkos szivárgás. Egy junior, YZ által kiadott db_password = "S3cret!" Elkövette a vonalat, ahogy van, és megtolta. Elkapták a kód áttekintésén; A jelszót azonnal törölték és megváltoztatták, az értéket áthelyezték egy változóba, és a titkos tárolóból táplálták. Tanulság: A HCL-ben soha nincsenek egyszerű szöveges titkok.
Négy másolható sablon
1) Infrastruktúra-tervezet generálása:
Írja a következő infrastruktúrát a [CLOUD: AWS]-re a Terraform segítségével (verzió ~> 1.7): [FORRÁSLISTA]. [X] régió. Szabályok:- Minden érzékeny értéket tegyen változóvá, ne ágyazza be őket a HCL-be.- Javítsa meg a szolgáltatói verziót (required_providers).- Csökkentse az IAM-engedélyeket, ne használja a "*"-t.- Adja vissza az [X, Y]-t kimenetként. Adja meg a kódot modulárisan és magyarázatokkal.
2) A terv kimenetének értelmezése:
Elemezze az alábbi „terraformterv” kimenetet. Sorolja fel:(1) milyen erőforrásokat adtak hozzá/módosítottak/TÖRÖLTTEK,(2) adatvesztés vagy megszakítás veszélyének kitett sorok,(3) 3 kérdés, amit fel kell tennem jelentkezés előtt.Terv: [OUTPUT]
3) Vizsgálja meg a meglévő HCL-t a biztonság szempontjából:
Ellenőrizze a következő Terraform-kódot a biztonság érdekében: beágyazott titkosság, túlságosan széles IAM-engedély, nyílt hálózati szabály (0.0.0.0/0), titkosítatlan tárhely? Írja le az egyes megállapításokat fontossági és javítási sorrendben! Kód: [HCL]
4) Alakítsa át az ismétlődő kódot a modullá:
Alakítsa át a következő ismétlődő Terraform kódot újrafelhasználható modullá: milyen értékek legyenek változók, mi legyen a modul interfésze? Mutasson használati példát is. Kód: [HCL]
Gyenge felszólítás / Erős felszólítás
Gyenge: "Hozzon létre adatbázist a Terraform segítségével."
Eredmény: nem világos, melyik felhő, melyik motor, melyik verzió, titkosított vagy nem; Az örökölt szintaxissal a mesterséges intelligencia egy nyilvánosan elérhető példával szolgálhat, amely beágyazza a jelszót a kódba.
Erős: "Hozzon létre RDS PostgreSQL 15-példányt AWS-en a Terraform ~> 1.7 segítségével. Állítsa be a jelszót változóként, ne ágyazza be a kódba. A tárhely titkosított, csak privát alhálózatról érhető el, nem nyilvános. Javítsa meg a szolgáltatói verziót. A végpontot adja vissza kimenetként."
Különbség: a második prompt megadja a motort, a verziót, a titkosítást, a hálózati korlátozást és a titkos szabályt – a kimenet biztonságos és közel áll a prod-hoz.
Gyakori hibák
- 'Jelentkezni' anélkül, hogy 'terv' készülne. A legdrágább hiba az IaC-ben; mindig először tervezzen.
- Titok beágyazása a HCL-be. Állandó szivárgást hoz létre a Git előzményeibe.
- A tárolás állapota nem biztonságos. A titkosítatlan, zárolatlan, nyilvános állapot katasztrófa.
- Nem javítja a verziót. A szolgáltató verzió megadása nélkül történő használata a jövőben hirtelen meghibásodásokhoz vezet.
- *`Művelet: Széles körű engedély, például ""`.** Sérti a legkisebb jogosultság elvét.
- A váratlan "megsemmisítés" figyelmen kívül hagyása. A törlési sorok alkalmazása a Tervben kérdés nélkül.
Összefoglalva
Az IaC az infrastruktúrát megismételhető, verziózható és auditálható kóddá alakítja; A leggyakoribb eszköz a Terraform. A mesterséges intelligencia gyorsan létrehozza a HCL csonkokat, de meg kell adnia a verziót, a felhőspecifikus részleteket és a biztonsági szabályokat. A Terraform tévedhetetlen szabálya: minden változást tervben látni, váratlan törléseket lekérdezni, titkokat távol tartani a kódtól és az állapotot biztonságban tartani. A tervkimenetben lévő megsemmisítés és csere sorok azok a helyek, amelyeket a leggondosabban kell elolvasni.
Pályázati feladat
A mesterséges intelligencia generáljon egy kis infrastruktúrát (például egy tárhelyet és egy hozzáférési szabályzatot) a fenti „Infrastruktúravázlat létrehozása” sablon segítségével. Ezután: (1) ellenőrizze a kódba ágyazott titkos vagy * engedélyeket az „ellenőrző” sablonban; (2) ha lehetséges, futtassa az init + plant egy tesztfiókban, és olvassa el a terv kimenetét a "tervértelmezés" sablonnal; (3) jegyezze fel a váratlan törléseket/módosításokat.
ellenőrző lista
- [ ] Felhőt, Terraform/szolgáltatói verziót és titkosítási/hálózati megszorításokat adtam a prompthoz.
- [ ] A kódban nincs egyszerű szöveges titok; precíziós értékek változó.
- [ ] Az IAM/engedélyeket minimálisra szűkítettem, * nem használtam.
- [ ] Lefuttattam a tervet az alkalmazás előtt, és soronként elolvastam a kimenetet.
- [ ] Ellenőriztem, hogy nincs-e váratlan megsemmisítés/csere a tervben.
- [ ] Biztos vagyok benne, hogy az állapot titkosított, zárolt és korlátozott háttérrendszerben van tárolva.