Eenheid 6 / 11

Beheer van infrastructuur als code (IaC): Terraform, Ansible en Plan Control

Winst:

  • Mogelijkheid om IaC-code (Terraform, Ansible) te produceren met kunstmatige intelligentie met de smalste machtigingen en veilige standaardinstellingen en om de declaratieve benadering te begrijpen
  • Mogelijkheid om gegevensverlies te voorkomen door het lezen en vastleggen van verwijder- en geforceerde vervangingsregels voordat de plan-/controle-uitvoer wordt toegepast
  • Mogelijkheid om het lekken van geheimen te voorkomen door het statusbestand versleuteld en vergrendeld te houden in de externe backend en wijzigingen op te splitsen in kleine, omkeerbare stappen

Beheer van infrastructuur als code (IaC): Terraform, Ansible en Plan Control met AI

In het verleden gebeurde het opzetten van een server met handmatige klikken, opdrachten en persoonlijke notities; Het resultaat waren niet-reproduceerbare ‘sneeuwvlok’-servers waarvan niemand precies wist hoe ze moesten worden opgezet. Infrastructure as Code (IaC) is de aanpak die een einde maakt aan deze chaos: servers, netwerken en beveiligingsregels worden niet met de hand gedefinieerd, maar door versiebare tekstbestanden (code). Wanneer u deze code uitvoert, wordt de infrastructuur precies zo opgezet als u deze hebt geschreven: elke keer hetzelfde, gedocumenteerd en herhaalbaar. De meest voorkomende tools zijn Terraform en CloudFormation voor cloudinfrastructuur en Ansible voor serverconfiguratie. Hier is de AI zeer bedreven in het schrijven, uitleggen en beoordelen van deze IaC-code. Maar de kracht van IaC houdt ook het gevaar in: één verkeerde lijn kan een hele infrastructuur wegvagen; dus de AI schrijft code, jij leest het ‘plan’, keurt het goed en voert het uit.

In deze unit bespreken we de declaratieve benadering, het plan/pas-onderscheid, staatsveiligheid en idempotentie; Je leert IaC-generatie met AI en de meest kritische vaardigheid, "plancontrole".

Declaratief denken: ‘wat als’, niet ‘hoe te doen’

De meeste IaC-tools zijn declaratief: je beschrijft de eindstatus van het systeem ("laten we zeggen 3 webservers, 1 load balancer"), de tool berekent zelf hoe je die staat kunt bereiken. Dit is anders dan het schrijven van een script (“doe dit, doe dan dat” stap voor stap). Het grote voordeel van de declaratieve aanpak is idempotentie: zelfs als je de code tien keer uitvoert, is het resultaat hetzelfde, omdat de tool controleert of de gewenste status al bestaat, en als dat zo is, wordt er niets aan gedaan. Onthoud dit verschil wanneer u IaC naar de AI schrijft: u laat het zeggen "laat deze infrastructuurstatus", niet "voer deze opdrachten uit".

Plannen/toepassen: meest vitale veiligheidsleuning

Het levensreddende kenmerk van IaC is de planstap. In Terraform, terraform plan, in Ansible, produceert --check-modus een voorbeeld van "wat er zal veranderen als ik het toepas" voordat de code wordt uitgevoerd: "2 bronnen worden toegevoegd, 1 zal veranderen, 0 zal worden verwijderd". Alleen zo kun je jouw intentie vóór de implementatie vergelijken met de werkelijkheid. Cruciale regel: pas het nooit toe zonder het plan te hebben gelezen. Let vooral op de 'vernietig'-lijnen; Als u vanwege een typfout '12 wordt verwijderd' ziet in plaats van '1 wordt gewijzigd', heeft het plan u van een ramp gered. Nadat u de code naar de AI hebt afgedrukt, laat u zeggen: "Bekijk de uitvoer van het plan regel voor regel met mij, markeer elke regel die verwijdering/recreatie bevat."

Let op: sommige wijzigingen in Terraform "vernietigen en opnieuw creëren" een bron in plaats van "ter plekke bijwerken". Dit betekent gegevensverlies voor een database. Het negeren van -/+ of "forceert vervanging" in de planuitvoer is een van de duurste fouten.

Staatsdossier: record van geheimen en waarheid

Tools als Terraform houden de huidige status van de infrastructuur die ze beheren bij in een statusbestand. Dit bestand is om twee redenen van cruciaal belang. Ten eerste kan het geheimen bevatten (databasewachtwoorden en sleutels kunnen in platte tekst in de juiste staat vallen); Plak de status daarom nooit in een openbare repository of AI, maar bewaar deze in een gecodeerde en toegangsbeperkte externe backend. Ten tweede: als de staat corrupt of verloren is, verliest het voertuig de verbinding tussen de werkelijke infrastructuur en de ingebeelde infrastructuur; Daarom zijn een back-up van de staat en een slotmechanisme (slot dat voorkomt dat twee mensen het tegelijkertijd kapot maken) essentieel.

Stap voor stap: Beveilig IaC met AI

  1. Vermeld de intentie en de aanbieder. “Twee servers op AWS, met Terraform, in deze regio, van deze omvang, en een beveiligingsgroep.” Als de cloud, tool en versie duidelijk zijn, produceert de AI de juiste syntaxis.
  2. Vraag beveiligingsstandaarden aan. "Open beveiligingsgroep, schakel codering in, extraheer geheimen naar variabele, verleen openbare toegang." AI kan standaard losse monsters genereren.
  3. Lees en begrijp de code. Begrijp elke bron, elke toestemming, regel voor regel. Pas geen toestemming toe die u niet begrijpt.
  4. Maak een plan en controleer het. Voer plan/--check uit, onderzoek de uitvoer met AI, markeer de regels voor verwijderen en opnieuw opbouwen.
  5. Klein en omkeerbaar aanbrengen. Implementeer een grote verandering in kleine stukjes, niet in één keer. Ken bij elke stap de weg terug.
  6. Bescherm de staat. Gebruik een externe, gecodeerde backend en vergrendel; Nooit lekstatus.

drie minikoffers

Geval 1 — Het plan herstelde een database. Een ingenieur wilde de omvang van een database vergroten met de Terraform-code die hij met AI produceerde. Terwijl hij verwachtte dat "1 zou veranderen" in de uitvoer van het terraformplan, zag hij "1 om te vernietigen, 1 om toe te voegen" - de parameter die hij koos veroorzaakte een herbouw, geen interne update, wat betekende dat alle gegevens zouden worden verwijderd. Plancontrole stopte onomkeerbaar gegevensverlies voordat het werd geïmplementeerd.

Geval 2 — Terugkeer na losse wanbetaling. Een team vroeg de AI om een ​​firewallcode. Om het voorbeeld uit te voeren, genereerde de AI een eenvoudige regel van 0.0.0.0/0, wat 'openbaar op internet' betekent. De ingenieur merkte dit op tijdens het lezen van de code en beperkte de toegang tot alleen het zakelijke IP-bereik. Als het zonder controle zou worden geïmplementeerd, zou de database toegankelijk zijn voor het hele internet.

Geval 3 — Staatslek voorkomen. Een juniorlid stond op het punt het bestand terraform.tfstate intact in een openbare tool te plakken om een ​​Terraform-probleem op te lossen. Senior engineer gestopt: de status bevatte een databasewachtwoord in leesbare tekst. In plaats daarvan werd een gedecodeerde samenvatting gedeeld waarin het probleem werd beschreven en werd de status verplaatst naar de externe gecodeerde backend.

Vier kopieerbare sjablonen

1) Genereren van IaC-bronnen (veilige standaard):

Jouw rol: senior cloudinfrastructuuringenieur. [Cloud, b.v. AWS] voor[tool, b.v. Terraform] code genereren. Doel: [doel]. Beveiligingsregels: openbare (0.0.0.0/0) toegang OPEN; begin met de smalste toestemming; encryptie inschakelen; extraheer geheimen in variabelen, sluit ze niet in code in; Controleer instellingen die kunnen leiden tot verwijdering/recreatie. Licht elke bron toe met een kort commentaar.

2) Planoutputaudit:

Hieronder ziet u een uitvoer van [Terraform-plan / Ansible-controle]. Vertel me: (1) hoeveel bronnen zullen worden toegevoegd/gewijzigd/verwijderd, (2) markeer ook de regels 'vernietigen' of 'forceert vervanging' die een risico op gegevensverlies vormen, (3) maak een lijst van alle wijzigingen die onverwacht of gevaarlijk lijken. Uitvoer: [plan]

3) Beveiligingsbeoordeling van IaC-code:

Onderzoek de volgende IaC-code voor beveiliging: (1) zijn er overdreven brede toegang/machtigingen, (2) is encryptie uitgeschakeld, (3) zijn er geheimen ingebed in de code, (4) zijn er openbaar beschikbare bronnen? Stel voor elke bevinding een correctie voor. Code: [gemaskeerde code]

4) Splits de verandering op in veilige delen:

Ik wil deze grote infrastructuurverandering [uitleg] niet in één keer doorvoeren. Verdeel het in kleine, onafhankelijke stappen waar u gemakkelijk naar terug kunt keren. Per stap: wat verandert er, waar moet ik op letten in het plan, hoe kan ik het ongedaan maken als er problemen zijn?

Zwakke prompt/sterke prompt

Zwakke prompt:

Schrijf Terraform-code die een server op AWS creëert.

Regio, omvang, beveiliging, netwerk, encryptie zijn onduidelijk. De AI produceert de meest losse, meest expliciete standaardinstellingen om te werken – als het in productie zou worden genomen, zou het een kwetsbaarheid zijn.

Krachtige prompt:

Jouw rol: senior cloudinfrastructuuringenieur. Definieer een webserver met Terraform op AWS eu-central-1: t3.small, alleen vanuit het zakelijke IP-bereik (ik zal het met een variabele geven), poort 443 is open, schijf is gecodeerd, geen openbare toegang, labels zijn verplicht. Geheimen worden onthuld aan de variabele. Na de code: Vertel me, voordat ik deze implementeer, op welke 3 lijntypen ik in het plan moet letten en leg het retourpad uit.

Stadium

Risico

veiligheidsleuning

code schrijven

Losse standaard (openbaar)

Smalste toestemming + lezen

plannen/controleren

Verwijderen zonder het te beseffen

Inspectie plannen, markering vernietigen

Toepassen

Grote eenmalige wijziging

Kleine, omkeerbare stappen

staatsbestuur

Glazuurlekkage, vervorming

Op afstand gecodeerde backend + slot

Veel voorkomende fouten

  • Solliciteren zonder het plan te lezen. Het plan voorspelt verwijdering en reconstructie; Als dit wordt overgeslagen, is gegevensverlies onvermijdelijk.
  • Ik heb de losse standaard niet opgemerkt. AI-instanties produceren vaak 0.0.0.0/0; Als het naar productie wordt verplaatst, betekent dit open source voor het hele internet.
  • Lekkende staat. Door het statusbestand naar de AI of open repository te exporteren, worden leesbare tekstgeheimen blootgelegd.
  • Geheimen in code inbedden. Het schrijven van het wachtwoord in IaC-code is een aanhoudend lek in de codeversiegeschiedenis.
  • Een herbouw aangezien voor een update. Het negeren van de regel voor gedwongen vervanging zal resulteren in gegevensverlies in databases.
Tip: Zelfs als u de uitvoer van het plan ter beoordeling aan een AI geeft, moet u de uiteindelijke beslissing baseren op uw eigen kennis en niet op de plantekst. AI vat het plan samen en markeert risicovolle lijnen; maar het antwoord op de vraag "is deze verwijdering acceptabel" hangt af van uw zakelijke context.

Samengevat

IaC zorgt voor herhaalbaarheid en documentatie door de infrastructuur te beheren met versiebare code in plaats van met handmatige klikken. AI is een krachtige partner bij het schrijven van deze code, het beschrijven ervan en het beoordelen ervan op veiligheid. Maar de kracht van IaC schuilt in het gevaar ervan: één lijn kan de hele infrastructuur wegvagen. Denk declaratief, begin met de kleinste toestemming, repareer losse standaardwaarden, houd geheimen buiten de code en status. De meest essentiële vangrail is de plan-/controlestap: voer nooit uit zonder de regels voor verwijderen en opnieuw opbouwen te lezen. Houd State versleuteld, vergrendeld en op afstand. De code is van AI, de beslissing is aan jou.

Applicatie taak

Kies een klein infrastructuurdoel (bijvoorbeeld één virtuele machine en een beveiligingsregel). Met het bovenstaande sjabloon 'IaC-resourcegeneratie' vraagt ​​u de AI om een ​​code met veilige standaardwaarden. Controleer de code nogmaals met de sjabloon 'IaC code security review' en probeer ten minste één losse instelling te vinden. Voer indien mogelijk plan/--check uit op een testaccount en bekijk de uitvoer met de sjabloon "Plan output check"; Kijk of er een verwijder- of opnieuwmaakregel is. Schrijf uw bevindingen op en hoe u de staat gaat veiligstellen in 6 punten.

controlelijst

  • [ ] Heb ik de cloud, tool en versie opgegeven voor AI en heb ik code aangevraagd met de smalste machtigingen?
  • [ ] Heb ik de code gecontroleerd op losse standaardwaarden (0.0.0.0/0, gesloten codering)?
  • [ ] Heb ik de geheimen van de variabele geëxtraheerd in plaats van ze in de code in te sluiten?
  • [ ] Heb ik het plan/de controleuitvoer gelezen en de verwijderregels gemarkeerd voordat ik de aanvraag indiende?
  • [ ] Heb ik de impact op gegevensverlies van "forces replacement"/rebuild lijnen geëvalueerd?
  • Heb ik het [ ] State-bestand niet versleuteld en vergrendeld in de externe backend bewaard en uitgelekt?