Skip to main content

3 dicas para gerenciar o drift causado por alterações manuais no Terraform

Escrito por
Headshot of Stephane Jourdan

Stephane Jourdan

feature synk iac terraform magenta

22 de maio de 2020

0 minutos de leitura

Nota do editor: Esta publicação foi originalmente publicada em CloudSkiff.com. A CloudSkiff se juntou à Snyk em outubro de 2021.‹

Como gerenciar o drift causado por alterações manuais no Terraform? Se alguém altera algo manualmente na infraestrutura, como você lida com isso no Terraform e executa o Terraform plan da próxima vez? Há diferentes maneiras de gerenciar o drift causado por alterações manuais na sua infraestrutura com Terraform, dependendo da situação.

Veja três opções:

  • Altere o código manualmente para atualizar seu State

  • Recrie o ambiente existente no Terraform usando uma ferramenta

  • Importe partes específicas do novo código usando o subcomando Terraform import

1. Altere o código manualmente para atualizar seu State

É sempre mais fácil começar com um exemplo. Digamos que alguém da sua equipe tenha alterado manualmente um grupo de segurança, por exemplo, abrindo uma porta HTTP para uma sub-rede específica, e você descubra isso no próximo terraform apply. (Este é um caso simples.)

Depois dessa ação, você verá uma diferença no seu terraform output (seja no CI ou no seu laptop). Isso significa que você pode adicionar essa diferença como um trecho diretamente ao seu código Terraform e aplicá-lo. Em outras palavras, você precisará adicionar o código manualmente após a implantação. Na próxima vez que executar um terraform apply, o Terraform perceberá que o estado não inclui esse novo item (no nosso exemplo, a permissão para HTTP em uma sub-rede) e solicitará que seu provedor de nuvem (por exemplo, a AWS) faça isso. A AWS responderá: “Isso já está configurado.”

Nesse caso simples, a diferença aparece apenas no arquivo TFstate, e você resolveu o problema manualmente. É um pouco como resolver um conflito durante um merge do Git.

As etapas principais são:

  • Escreva o código que falta

  • Envie-o

  • Aplique-o

  • O delta desaparece

  • E o estado final é atualizado no arquivo de estado

2. Recrie o ambiente existente no Terraform

Se o caso for bem mais complexo, como uma VM inteira ou, pior ainda, um cluster Kubernetes completo com 10.000 nós criado manualmente, você obviamente não vai tentar escrever o código manualmente como fiz no exemplo simples. Recomendo usar uma ferramenta como Terraformer ou Terraforming.

Esse tipo de ferramenta examina as contas do seu provedor de nuvem em busca de recursos e parâmetros. Depois de coletar todos os parâmetros (por exemplo, em uma VM: disco rígido, endereço IP, tipo de sistema operacional etc.), a ferramenta transforma tudo isso em código Terraform válido e cria um TFState a partir do código.

O Terraformer foi criado pela equipe de SRE do Waze no Google, em Tel Aviv. Ele faz cerca de 80% do trabalho; você só precisa adaptar alguns detalhes aqui e ali.

Ao usar essa ferramenta, você terá três elementos:

  • O código que você acabou de extrair

  • Uma implantação manual existente

  • Um arquivo de estado

O problema agora é que esses elementos ainda não estão realmente integrados ao repositório da sua infraestrutura existente. Esse é o tema do próximo tópico: escolher o que importar.

3. Importe partes específicas do novo código usando o subcomando Terraform import

Depois de ter o código, você pode importá-lo usando o subcomando terraform import para escolher com precisão o que será importado.

Digamos, por exemplo, que você tenha iniciado manualmente um endereço IP específico para um balanceador de carga antigo, mas a produção precise manter esse endereço IP e você queira garantir que ele seja gerenciado pelo Terraform. Você pode escrever o código Terraform correspondente e importar o ID correspondente na AWS.

Isso é bem diferente de simplesmente enviar e aplicar algum código e verificar se “funciona” do outro lado. Você tem esse código e sabe que, se executá-lo agora, ele criará uma duplicata (neste exemplo específico, porque pode haver centenas de endereços IP com um nome; não era o caso do exemplo anterior com o grupo de segurança, em que só pode haver uma porta 80 aberta).

Neste exemplo, eu identificaria esse endereço IP específico usando uma ferramenta de importação, como o Terraformer, e o copiaria para o meu código existente. Em seguida, não aplicaria o código diretamente; faria a importação com o subcomando terraform import.

Veja um exemplo de como é o comando terraform import.

Captura de tela do terminal mostrando o comando `import --help` do Terraform e as opções disponíveis.
Comando `import --help`
Terminal ampliado mostrando o texto de ajuda do comando de importação do Terraform e os comandos para importar a infraestrutura existente para o estado.
Ampliado

Considerações finais sobre como gerenciar o drift causado por alterações manuais no Terraform

Dependendo da situação, estas são as três maneiras que recomendo para gerenciar alterações manuais na sua infraestrutura com Terraform:

  1. Escreva o código e aplique-o para pequenas alterações que não precisam ser importadas novamente, deixando que ele seja reconciliado automaticamente com o arquivo de estado.

  2. Importe o novo ambiente e recrie-o no Terraform com uma ferramenta como o Terraformer.

  3. E/ou importe manualmente componentes muito específicos usando o subcomando Terraform import.

Proteja seu código Terraform

Snyk IaC protege suas configurações do Terraform (e também seus templates de Kubernetes, CloudFormation e ARM!) enquanto você programa, com correções guiadas para você fazer o merge e seguir em frente. Você pode testar enquanto escreve, monitorar alterações nos seus repositórios Git e automatizar testes nos pipelines de build antes da implantação. Leva poucos minutos para começar com um plano gratuito, enquanto uma violação causada por uma configuração incorreta de IaC pode gerar danos permanentes. Cadastre-se abaixo e comece a proteger suas configurações. Acesse este artigo para saber mais sobre como detectar e evitar o drift de configuração.

Proteja a infraestrutura desde a origem

A Snyk automatiza a segurança e a conformidade de IaC nos fluxos de trabalho e detecta recursos com configurações divergentes ou ausentes.

Leia mais

feature insights context
Blog

Os ataques autônomos já chegaram. A defesa precisa acompanhar o ritmo.

Os atacantes autônomos estão reduzindo o tempo disponível para a defesa. Saiba como a descoberta, a correção, a validação e a prevenção contínuas ajudam as equipes de segurança a acompanhar esse ritmo.

Blog

Evo ADS Govern Agent Behavior já está disponível: controle o uso de MCP

Evo ADS Govern Agent Behavior já está disponível, começando por MCP Governance. Descubra, aprove, monitore, registre e bloqueie o uso de servidores MCP nos principais agentes de programação com IA.

illustration hero ai
Blog

O que é Agentic AppSec?

Saiba como Agentic AppSec usa agentes de IA fundamentados, com limites definidos e verificados de forma independente para executar o ciclo de segurança de aplicações.