Unidade 3 / 11

Gerenciando Infraestrutura como Código: Inteligência Artificial com Terraform e IaC

Ganhos:

  • Capacidade de compreender o conceito IaC e o ciclo de trabalho do Terraform (init, plan, apply, state, module) e fazer com que a inteligência artificial produza rascunhos HCL seguros
  • Capacidade de verificar cada alteração com um plano antes de aplicar e detectar linhas inesperadas de destruição/substituição
  • Capacidade de aplicar os princípios de manter segredos fora do código, manter o estado seguro e minimizar as permissões do IAM

Antigamente, configurar um servidor era uma questão de clicar em um painel da nuvem: criar uma máquina virtual, configurar a rede, adicionar a regra de segurança. Esse método era lento, sujeito a erros e irrepetível — era quase impossível configurar o mesmo ambiente uma segunda vez. Hoje, a infraestrutura é gerenciada como código. IaC (Infraestrutura como Código) é uma abordagem para descrever recursos de nuvem, como servidores, redes e bancos de dados em arquivos de texto, em vez de manualmente. Esses arquivos ficam no controle de versão (Git); Você pode ver quem mudou o quê, quando e o quê; Você pode configurar a mesma infraestrutura muitas vezes, exatamente da mesma maneira, com um único comando.

A ferramenta IaC mais comum é o Terraform. O Terraform pega as definições que você escreve em uma linguagem legível chamada HCL (HashiCorp Configuration Language — linguagem de configuração do Terraform), traduz-as na API do provedor de nuvem (AWS, Azure, GCP) e cria os recursos. A IA conhece muito bem a HCL e produz blocos complexos rapidamente. Mas no IaC, o custo de um erro é alto: uma definição errada pode destruir todo um banco de dados de produção. É por isso que a regra de ouro no Terraform é ver cada mudança com um “plano” antes de implementá-la.

Tempo de execução do Terraform

O Terraform funciona com três comandos básicos – conhecê-los é um pré-requisito para controlar a saída de IA:

  • `terraform init`: Inicia o projeto, baixa os plugins do provedor necessários.
  • `terraform plan`: Compara a situação atual com a situação desejada e mostra o que adicionar, o que alterar, o que excluir. Não implementa nada. É a etapa de segurança mais crítica.
  • `terraform apply`: Na verdade aplica o Plano, criando/modificando recursos.

Além disso, dois conceitos são vitais. State (arquivo de estado): É o arquivo onde o Terraform mantém o estado atual dos recursos que gerencia; Geralmente é armazenado em um armazém remoto e trancado para que duas pessoas não possam alterá-lo ou destruí-lo ao mesmo tempo. Módulo: Pacote de configuração reutilizável; Por exemplo, você pode usar o módulo “configurar uma rede” em muitos projetos.

Dica: O sinal mais perigoso em uma saída do Terraform são as linhas destruir ou -/+ (substituir) na saída do plano. Isso significa que o recurso será excluído. Se você perceber uma destruição inesperada em um plano, nunca aplique, primeiro entenda por que ela apareceu.

Passo a passo: Escrevendo IaC com IA

  1. Esclareça a infraestrutura desejada. Seja concreto como "um VPC, duas sub-redes, um grupo de segurança e um t3.micro EC2 no eu-central-1".
  2. Especifique o provedor e a versão. Qual nuvem, qual Terraform e versão do provedor? Se você não especificar uma versão, a IA poderá retornar uma sintaxe desatualizada/incompatível.
  3. Produza o rascunho da HCL. Solicite também variáveis ​​e saídas.
  4. Retire o segredo. Valores como senhas e chaves devem ir para o cofre variável e secreto, e não para o código.
  5. Execute `init` + `plan`. Leia o resultado do plano linha por linha; Verifique se há exclusões inesperadas.
  6. Comece pequeno, implemente gradualmente. Aplique-o primeiro em uma conta/ambiente de teste isolado.

Segurança: riscos específicos do IaC

IaC é tão arriscado quanto poderoso. Três pontos críticos:

  1. Há um segredo no arquivo do estado. O estado do Terraform às vezes mantém valores confidenciais, como senhas de banco de dados, em texto simples. Nunca coloque o State em um repositório público; Use um back-end remoto criptografado e de acesso restrito.
  2. Não incorpore segredos na HCL. Linhas como password="prod123" são gravadas permanentemente no histórico do Git. Em vez disso, use uma variável e forneça o valor em tempo de execução da variável de ambiente (TF_VAR_...) ou do cofre secreto.
  3. Permissão IAM muito ampla. A IA às vezes produz blocos como Action: "*" (permitir tudo) para "fazer funcionar". Esta é uma vulnerabilidade; restringir a permissão ao mínimo necessário.
Atenção: Depois que um segredo entra no histórico do Git, ele permanece no passado e pode ser comprometido, mesmo se você excluir o arquivo. Se você cometer um erro, cancele e alterne imediatamente o segredo; Apenas excluir não é suficiente.

Tabela de sinais de plano arriscado

Impressão do plano

Significado

o que fazer

+criar

Novo recurso será adicionado

Geralmente seguro, revise embora

~ atualização no local

A fonte mudará no site

Verifique o impacto (haverá uma interrupção?)

-/+ substituir

Será excluído e recriado

CUIDADO: pode ocorrer perda de dados

- destruir

O recurso será destruído

PARE: nunca se inscreva se não estiver esperando

três mini cases

Caso 1 — 2 dias de trabalho em 3 horas. Uma equipe iria escrever o Terraform para configurar um novo ambiente de teste (VPC, sub-redes, banco de dados RDS, cluster ECS), mas eles tinham acabado de migrar para HCL. Eles descreveram a arquitetura e as versões da IA ​​e produziram um projeto modular. Eles verificaram cada módulo com o plano e o colocaram em funcionamento em 3 horas; Eles levariam dois dias de tentativa e erro manual.

Caso 2 – o plano foi excluído. Um engenheiro executou um plano sem aplicar um código de atualização gerado por IA. A saída continha -/+ substituir para o banco de dados de produção — a IA tentou substituir um campo não substituível, o que significava excluir e recriar o banco de dados. O engenheiro parou de aplicar e mudou a mudança para o método seguro. O hábito de planejar evitou um desastre.

Caso 3 – vazamento secreto enterrado. Um júnior, YZ emitiu db_password = "S3cret!" Ele cometeu a linha como está e a empurrou. Pego na revisão de código; A senha foi imediatamente cancelada e alterada, o valor foi movido para uma variável e alimentado no cofre secreto. Lição: Nunca existem segredos de texto simples na HCL.

Quatro modelos copiáveis

1) Geração de projeto de infraestrutura:

Escreva a seguinte infraestrutura em [CLOUD: AWS] com Terraform (versão ~> 1.7): [SOURCE LIST]. Região [X]. Regras:- Torne todos os valores confidenciais variáveis, não os incorpore na HCL.- Corrija a versão do provedor (required_providers).- Minimize as permissões do IAM, não use "*".- Retorne [X, Y] como saída. Forneça o código de forma modular e com explicações.

2) Interpretação do resultado do plano:

Analise a saída do 'plano de terraform' abaixo. Liste-me:(1) quais recursos foram adicionados/alterados/EXCLUÍDOS,(2) linhas com risco de perda ou interrupção de dados,(3) 3 perguntas que devo fazer antes de aplicar.Plano: [SAÍDA]

3) Examine a HCL existente quanto à segurança:

Verifique a segurança do seguinte código Terraform: segredo incorporado, permissão IAM excessivamente ampla, regra de rede aberta (0.0.0.0/0), armazenamento não criptografado? Escreva cada descoberta em ordem de importância e correção. Código: [HCL]

4) Converta o código repetitivo em módulo:

Converta o seguinte código repetitivo do Terraform em um módulo reutilizável: quais valores devem ser variáveis, qual deve ser a interface do módulo? Mostre também um exemplo de uso. Código: [HCL]

Alerta fraco / Alerta forte

Fraco: "Crie um banco de dados com Terraform."

Resultado: não está claro qual nuvem, qual mecanismo, qual versão, criptografada ou não; Com a sintaxe legada, a IA pode fornecer um exemplo publicamente disponível que incorpora a senha ao código.

Forte: "Crie uma instância RDS PostgreSQL 15 na AWS com Terraform ~> 1.7. Torne a senha variável, não a incorpore no código. O armazenamento é criptografado, acessível apenas a partir de uma sub-rede privada, não pública. Corrija a versão do provedor. Retorne o endpoint como saída."

Diferença: o segundo prompt fornece o mecanismo, a versão, a criptografia, a restrição de rede e a regra secreta — a saída é segura e próxima do produto.

Erros comuns

  • `Candidatar-se` sem fazer um `plano`. O erro mais caro do IaC; sempre planeje primeiro.
  • Incorporando segredo na HCL. Cria vazamento permanente no histórico do Git.
  • Armazenar o Estado inseguro. Um estado público não criptografado e desbloqueado é um desastre.
  • Não corrigindo a versão. Usar o provedor sem especificar uma versão levará a falhas repentinas no futuro.
  • *`Ação: Permissão ampla como ""`.** Viola o princípio do privilégio mínimo.
  • Ignorando a `destruição` inesperada. Aplicando as linhas de exclusão do Plano sem questionar.

Em resumo

A IaC transforma a infraestrutura em código repetível, versionável e auditável; A ferramenta mais comum é o Terraform. A IA produz rapidamente stubs HCL, mas você deve fornecer a versão, detalhes específicos da nuvem e regras de segurança. A regra infalível no Terraform: ver cada mudança com um plano, consultar exclusões inesperadas, manter segredos longe do código e manter o estado seguro. As linhas destruir e substituir em uma saída de plano são os locais que devem ser lidos com mais atenção.

Tarefa de aplicativo

Faça com que a IA gere uma pequena infraestrutura (por exemplo, um balde de armazenamento e uma política de acesso) usando o modelo “Gerar esboço de infraestrutura” acima. Então: (1) faça com que o modelo de "avaliação" verifique as permissões secretas ou * incorporadas no código; (2) se possível, execute init + plan em uma conta de teste e leia a saída do plano com o modelo “interpretação do plano”; (3) observe quaisquer exclusões/alterações inesperadas.

lista de verificação

  • [] Adicionei nuvem, versão do Terraform/provedor e restrições de criptografia/rede ao meu prompt.
  • [] Não há segredo de texto simples no código; variável de valores de precisão.
  • [] Reduzi IAM/permissões para permissões mínimas, * não usei.
  • [] Executei o plano antes de aplicar e li a saída linha por linha.
  • [ ] Verifiquei que não há destruição/substituição inesperada no Plano.
  • [] Tenho certeza de que o estado é mantido em um back-end criptografado, bloqueado e restrito.