Eenheid 3 / 11

Infrastructuur beheren als code: kunstmatige intelligentie met Terraform en IaC

Winst:

  • Vermogen om het IaC-concept en de werkcyclus van Terraform (init, plan, apply, state, module) te begrijpen en kunstmatige intelligentie veilige HCL-concepten te laten produceren
  • Mogelijkheid om elke wijziging met een plan te controleren voordat u deze toepast en onverwachte vernietigings-/vervanglijnen op te vangen
  • Mogelijkheid om de principes toe te passen van het buiten de code houden van geheimen, het veilig houden van de status en het minimaliseren van IAM-machtigingen

In het verleden was het opzetten van een server een kwestie van door een cloudpaneel klikken: maak een virtuele machine aan, stel het netwerk in, voeg de beveiligingsregel toe. Deze methode was traag, foutgevoelig en onherhaalbaar; het was vrijwel onmogelijk om dezelfde omgeving een tweede keer in te richten. Tegenwoordig wordt infrastructuur beheerd als code. IaC (Infrastructure as Code) is een benadering om cloudbronnen zoals servers, netwerken en databases in tekstbestanden te beschrijven in plaats van handmatig. Deze bestanden bevinden zich in versiebeheer (Git); Je kunt zien wie wat, wanneer en wat heeft gewijzigd; Met één commando kunt u dezelfde infrastructuur vele malen, op precies dezelfde manier, opzetten.

De meest gebruikte IaC-tool is Terraform. Terraform neemt de definities die u schrijft in een leesbare taal genaamd HCL (HashiCorp Configuration Language – de configuratietaal van Terraform), vertaalt ze naar de API van de cloudprovider (AWS, Azure, GCP) en creëert de bronnen. De AI kent HCL zeer goed en produceert snel complexe blokken. Maar bij IaC zijn de kosten van een fout hoog: één verkeerde definitie kan een hele productiedatabase wegvagen. Daarom is de gouden regel in Terraform om elke verandering te zien met een 'plan' voordat je deze doorvoert.

De looptijd van Terraform

Terraform werkt met drie basiscommando’s – het weten dat dit een voorwaarde is voor het controleren van de AI-uitvoer:

  • `terraform init`: Start het project, downloadt de benodigde providerplug-ins.
  • `terraformplan`: Vergelijkt de huidige situatie met de gewenste situatie en laat zien wat toe te voegen, wat te veranderen, wat te verwijderen. Implementeert niets. Het is de meest kritische beveiligingsstap.
  • `terraform apply`: past het plan feitelijk toe, waarbij hulpbronnen worden gemaakt/aangepast.

Daarnaast zijn twee concepten van cruciaal belang. State (statusbestand): Dit is het bestand waarin Terraform de huidige status bijhoudt van de bronnen die het beheert; Het wordt meestal opgeslagen in een afgelegen en afgesloten magazijn, zodat twee mensen het niet tegelijkertijd kunnen veranderen of vernietigen. Module: Herbruikbaar configuratiepakket; Zo kunt u in veel projecten gebruik maken van de module ‘een netwerk opzetten’.

Tip: Het gevaarlijkste teken in een Terraform-uitvoer is het vernietigen of -/+ (vervangen) van regels in de planuitvoer. Dit betekent dat de bron wordt verwijderd. Als je een onverwachte vernietiging in een plan ziet, solliciteer dan nooit, maar begrijp eerst waarom het verscheen.

Stap voor stap: IaC schrijven met AI

  1. Maak de gewenste infrastructuur inzichtelijk. Wees concreet als "één VPC, twee subnetten, één beveiligingsgroep en één t3.micro EC2 op eu-central-1".
  2. Geef provider en versie op. Welke cloud, welke Terraform en providerversie? Als u geen versie opgeeft, retourneert AI mogelijk een verouderde/incompatibele syntaxis.
  3. Laat het HCL-concept maken. Vraag ook variabelen en outputs op.
  4. Haal Geheim eruit. Waarden zoals wachtwoorden en sleutels moeten naar de variabele en geheime kluis gaan, niet naar de code.
  5. Voer 'init' + 'plan' uit. Lees de planuitvoer regel voor regel; Controleer op onverwachte verwijderingen.
  6. Begin klein, voer het geleidelijk uit. Pas het eerst toe in een geïsoleerd testaccount/omgeving.

Beveiliging: IaC-specifieke risico's

IaC is even riskant als krachtig. Drie kritische punten:

  1. Er zit een geheim in het staatsdossier. De Terraform-status bewaart soms gevoelige waarden, zoals databasewachtwoorden, in leesbare tekst. Plaats State nooit in een openbare repository; Gebruik een gecodeerde externe backend met beperkte toegang.
  2. Sluit geen geheimen in HCL in. Regels zoals wachtwoord = "prod123" worden permanent naar de Git-geschiedenis geschreven. Gebruik in plaats daarvan een variabele en geef de waarde tijdens runtime op uit de omgevingsvariabele (TF_VAR_...) of de geheime kluis.
  3. Zeer brede IAM-toestemming. AI produceert soms blokken zoals Action: "*" (alles toestaan) om "het te laten werken". Dit is een kwetsbaarheid; beperk de toestemming tot het minimaal vereiste.
Let op: zodra een geheim in de Git-geschiedenis terechtkomt, blijft het in het verleden en kan het in gevaar worden gebracht, zelfs als je het bestand verwijdert. Als u per ongeluk een commit maakt, annuleer dan onmiddellijk en roteer het geheim; Alleen verwijderen is niet voldoende.

Riskant plan tekent tafel

Planafdruk

Betekenis

wat te doen

+ creëren

Er zal een nieuwe bron worden toegevoegd

Over het algemeen veilig, maar wel een beoordeling

~ update ter plaatse

De bron zal ter plaatse veranderen

Impact verifiëren (is er sprake van een storing?)

-/+ vervangen

Wordt verwijderd en opnieuw aangemaakt

LET OP: er kan gegevensverlies optreden

- vernietigen

De hulpbron zal worden vernietigd

STOP: solliciteer nooit als je het niet verwacht

drie minikoffers

Geval 1 – 2 dagen werken in 3 uur. Eén team ging Terraform schrijven om een ​​nieuwe testomgeving (VPC, subnetten, RDS-database, ECS-cluster) op te zetten, maar ze waren net overgestapt naar HCL. Ze beschreven de architectuur en versies aan de AI en maakten een modulaire blauwdruk. Ze controleerden elke module volgens het plan en hadden deze binnen 3 uur operationeel; Het zou hen twee dagen van handmatig vallen en opstaan ​​kosten.

Geval 2: het plan is verwijderd. Een ingenieur voerde een plan uit zonder een door AI gegenereerde updatecode toe te passen. De uitvoer bevatte -/+ vervangen voor de productiedatabase – de AI probeerde een niet-vervangbaar veld te vervangen, wat betekende dat de database moest worden verwijderd en opnieuw moest worden gemaakt. De ingenieur stopte met toepassen en veranderde de wijziging in de veilige methode. De gewoonte om te plannen voorkwam een ​​ramp.

Geval 3 – verborgen geheim lek. Een junior, YZ heeft db_password = "S3cret!" Hij legde de lijn vast zoals hij was en duwde erop. Gevangen in codebeoordeling; Het wachtwoord werd onmiddellijk geannuleerd en gewijzigd, de waarde werd naar een variabele verplaatst en vanuit de geheime kluis ingevoerd. Les: Er zijn nooit leesbare geheimen in HCL.

Vier kopieerbare sjablonen

1) Genereren van infrastructuurconcept:

Schrijf de volgende infrastructuur op [CLOUD: AWS] met Terraform (versie ~> 1.7): [BRONNENLIJST]. Regio [X]. Regels: - Maak alle gevoelige waarden variabel, sluit ze niet in HCL in. - Repareer de providerversie (required_providers). - Minimaliseer IAM-rechten, gebruik geen "*". - Retourneer [X, Y] als uitvoer. Geef code modulair en met uitleg.

2) Interpretatie van de planuitvoer:

Analyseer hieronder de output van het 'terraformplan'. Lijst mij:(1) welke bronnen zijn toegevoegd/gewijzigd/VERWIJDERD,(2) rijen die risico lopen op gegevensverlies of onderbreking,(3) 3 vragen die ik moet stellen voordat ik me aanmeld.Plan: [OUTPUT]

3) Onderzoek bestaande HCL op beveiliging:

Controleer de volgende Terraform-code op beveiliging: ingesloten geheim, te brede IAM-toestemming, open netwerkregel (0.0.0.0/0), niet-versleutelde opslag? Schrijf elke bevinding in volgorde van belangrijkheid en correctie. Code: [HCL]

4) Converteer de repetitieve code naar de module:

Converteer de volgende repetitieve Terraform-code naar een herbruikbare module: welke waarden moeten variabelen zijn, wat moet de module-interface zijn? Toon ook voorbeeldgebruik. Code: [HCL]

Zwakke prompt/sterke prompt

Zwak: "Maak een database met Terraform."

Resultaat: onduidelijk welke cloud, welke engine, welke versie, versleuteld of niet; Met verouderde syntaxis kan AI een openbaar beschikbaar voorbeeld bieden waarin het wachtwoord in de code wordt ingesloten.

Sterk: "Maak een RDS PostgreSQL 15-instantie op AWS met Terraform ~> 1.7. Maak het wachtwoord variabel, sluit het niet in de code in. De opslag is gecodeerd, alleen toegankelijk vanuit een privé-subnet, niet openbaar. Repareer de providerversie. Retourneer het eindpunt als uitvoer."

Verschil: de tweede prompt geeft de engine, versie, encryptie, netwerkbeperking en geheime regel weer: de uitvoer is veilig en bijna prod.

Veel voorkomende fouten

  • Om te ‘solliciteren’ zonder een ‘plan’ te maken. De duurste fout in IaC; plan altijd eerst.
  • Geheim in HCL inbedden. Creëert permanente lekkage in de Git-geschiedenis.
  • Staat onzeker opslaan. Een niet-versleutelde, ontgrendelde publieke staat is een ramp.
  • De versie wordt niet gerepareerd. Het gebruik van de provider zonder een versie op te geven zal in de toekomst tot plotselinge fouten leiden.
  • *`Actie: Brede toestemming zoals ""`.** Schendt het principe van de minste privileges.
  • Het negeren van onverwachte `vernietiging`. Zonder vragen de verwijderregels in het Plan toepassen.

Samengevat

IaC verandert infrastructuur in herhaalbare, versiebare en controleerbare code; Het meest gebruikte hulpmiddel is Terraform. AI produceert snel HCL-stubs, maar u moet de versie, cloudspecifieke details en beveiligingsregels opgeven. De onfeilbare regel in Terraform: elke verandering met een plan zien, onverwachte verwijderingen opvragen, geheimen uit de code houden en de staat veilig houden. De regels voor vernietigen en vervangen in een planuitvoer zijn de plaatsen die het meest zorgvuldig moeten worden gelezen.

Applicatie taak

Laat de AI een kleine infrastructuur genereren (bijvoorbeeld een opslagbucket en een toegangsbeleid) met behulp van de bovenstaande sjabloon 'Infrastructuurschets genereren'. Vervolgens: (1) laat de "vetting"-sjabloon controleren op geheime of * permissies ingebed in de code; (2) voer indien mogelijk init + plan uit in een testaccount en lees de planuitvoer met de sjabloon "planinterpretatie"; (3) noteer eventuele onverwachte verwijderingen/wijzigingen.

controlelijst

  • [ ] Ik heb cloud-, Terraform/provider-versie en encryptie/netwerkbeperkingen toegevoegd aan mijn prompt.
  • [ ] Er zit geen geheim in de code; precisiewaarden variabel.
  • [ ] Ik heb IAM/permissies beperkt tot minimale permissies, * Ik heb het niet gebruikt.
  • [ ] Ik heb het plan vóór het toepassen uitgevoerd en de uitvoer regel voor regel gelezen.
  • [ ] Ik heb geverifieerd dat er geen onverwachte vernietiging/vervanging in het plan voorkomt.
  • [ ] Ik ben er zeker van dat de staat in een gecodeerde, vergrendelde en beperkte backend wordt bewaard.