Melhores práticas de back-end - AWS Orientação prescritiva

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Melhores práticas de back-end

Usar um back-end remoto adequado para armazenar seu arquivo de estado é fundamental para permitir a colaboração, garantir a integridade do arquivo de estado por meio de bloqueio, fornecer backup e recuperação confiáveis, integrar-se aos fluxos de trabalho de CI/CD e aproveitar os recursos avançados de segurança, governança e gerenciamento oferecidos por serviços gerenciados, como o HCP Terraform.

O Terraform oferece suporte a vários tipos de back-end, como Kubernetes, HashiCorp Consul e HTTP. No entanto, este guia se concentra no Amazon S3, que é uma solução de back-end ideal para a maioria dos usuários. AWS

Como um serviço de armazenamento de objetos totalmente gerenciado que oferece alta durabilidade e disponibilidade, o Amazon S3 fornece um back-end seguro, escalável e de baixo custo para gerenciar o estado do Terraform on. AWS A presença global e a resiliência do Amazon S3 excedem o que a maioria das equipes pode alcançar com o autogerenciamento do armazenamento estadual. Além disso, a integração nativa com controles de AWS acesso, opções de criptografia, recursos de controle de versão e outros serviços torna o Amazon S3 uma opção conveniente de back-end.

Este guia não fornece orientação de back-end para outras soluções, como Kubernetes ou Consul, porque o público-alvo principal são os clientes. AWS Para equipes que estão totalmente envolvidas Nuvem AWS, o Amazon S3 geralmente é a escolha ideal em relação aos clusters Kubernetes ou Consul. HashiCorp A simplicidade, a resiliência e a forte AWS integração do armazenamento estadual do Amazon S3 fornecem uma base ideal para a maioria dos usuários que AWS seguem as melhores práticas. As equipes podem aproveitar a durabilidade, as proteções de backup e a disponibilidade dos AWS serviços para manter o estado remoto do Terraform altamente resiliente.

Seguir as recomendações de back-end nesta seção resultará em bases de código mais colaborativas do Terraform, limitando o impacto de erros ou modificações não autorizadas. Ao implementar um back-end remoto bem arquitetado, as equipes podem otimizar os fluxos de trabalho do Terraform.

Use o Amazon S3 para armazenamento remoto

Armazenar o estado do Terraform remotamente no Amazon S3 e implementar o bloqueio de estado e a verificação de consistência usando o Amazon DynamoDB oferecem grandes benefícios em relação ao armazenamento local de arquivos. O estado remoto permite colaboração em equipe, rastreamento de alterações, proteções de backup e bloqueio remoto para maior segurança.

Usar o Amazon S3 com a classe de armazenamento S3 Standard (padrão) em vez de armazenamento local efêmero ou soluções autogerenciadas fornece 99,999999999% de durabilidade e proteções de disponibilidade de 99,99% para evitar perda acidental de dados estaduais. AWS serviços gerenciados, como Amazon S3 e DynamoDB, fornecem acordos de nível de serviço (SLAs) que excedem o que a maioria das organizações pode alcançar ao autogerenciar o armazenamento. Confie nessas proteções para manter os back-ends remotos acessíveis.

Ativar bloqueio remoto de estado

O bloqueio do DynamoDB restringe o acesso ao estado para evitar operações de gravação simultâneas. Isso evita modificações simultâneas de vários usuários e reduz os erros.

Exemplo de configuração de back-end com bloqueio de estado:

terraform { backend "s3" { bucket = "myorg-terraform-states" key = "myapp/production/tfstate" region = "us-east-1" dynamodb_table = "TerraformStateLocking" } }

Ative o controle de versão e os backups automáticos

Para proteção adicional, habilite o controle de versão e os backups automáticos usando os back-ends do Amazon AWS Backup S3. O controle de versão preserva todas as versões anteriores do estado sempre que alterações são feitas. Também permite restaurar instantâneos anteriores do estado de funcionamento, se necessário, para reverter alterações indesejadas ou se recuperar de acidentes.

Restaure versões anteriores, se necessário

Os buckets de estado versionados do Amazon S3 facilitam a reversão de alterações restaurando um snapshot anterior de estado válido. Isso ajuda a proteger contra alterações acidentais e fornece recursos adicionais de backup.

Use o HCP Terraform

O HCP Terraform fornece uma alternativa de back-end totalmente gerenciada para configurar seu próprio armazenamento de estado. O HCP Terraform gerencia automaticamente o armazenamento seguro de estado e criptografia enquanto desbloqueia recursos adicionais.

Quando você usa o HCP Terraform, o estado é armazenado remotamente por padrão, o que permite o compartilhamento e o bloqueio de estados em toda a sua organização. Controles detalhados de políticas ajudam você a restringir o acesso e as mudanças de estado.

Recursos adicionais incluem integrações de controle de versão, proteções de políticas, automação de fluxo de trabalho, gerenciamento de variáveis e integrações de login único com SAML. Você também pode usar a política do Sentinel como código para implementar controles de governança.

Embora o HCP Terraform exija o uso de uma plataforma de software como serviço (SaaS), para muitas equipes, os benefícios de segurança, controles de acesso, verificações automatizadas de políticas e recursos de colaboração o tornam a escolha ideal em relação ao armazenamento de estado autogerenciado com o Amazon S3 ou o DynamoDB.

A fácil integração com serviços como GitHub e GitLab com configurações menores também atrai usuários que adotam totalmente as ferramentas de nuvem e SaaS para melhorar os fluxos de trabalho da equipe.

Facilite a colaboração em equipe

Use back-ends remotos para compartilhar dados de estado com todos os membros da sua equipe do Terraform. Isso facilita a colaboração porque dá a toda a equipe visibilidade das mudanças na infraestrutura. Protocolos de back-end compartilhados combinados com a transparência do histórico de estados simplificam o gerenciamento interno de mudanças. Todas as mudanças na infraestrutura passam pelo pipeline estabelecido, o que aumenta a agilidade dos negócios em toda a empresa.

Melhore a responsabilidade usando AWS CloudTrail

AWS CloudTrail Integre-se ao bucket do Amazon S3 para capturar chamadas de API feitas ao bucket estadual. Filtre CloudTrail eventos para rastrear PutObject DeleteObject, e outras chamadas relevantes.

CloudTrail os registros mostram a AWS identidade do principal que fez cada chamada de API para mudança de estado. A identidade do usuário pode ser associada a uma conta de máquina ou a membros da equipe que interagem com o armazenamento de back-end.

Combine CloudTrail os registros com o controle de versão estadual do Amazon S3 para vincular as alterações de infraestrutura ao principal que as aplicou. Ao analisar várias revisões, você pode atribuir qualquer atualização à conta da máquina ou ao membro responsável da equipe.

Se ocorrer uma alteração não intencional ou disruptiva, o controle de versão de estado fornece recursos de reversão. CloudTrail rastreia a alteração até o usuário para que você possa discutir melhorias preventivas.

Também recomendamos que você aplique as permissões do IAM para limitar o acesso ao bucket estadual. No geral, o controle de versão e o CloudTrail monitoramento do S3 oferecem suporte à auditoria em todas as mudanças na infraestrutura. As equipes obtêm melhores recursos de responsabilidade, transparência e auditoria no histórico estadual do Terraform.

Separe os back-ends para cada ambiente

Use back-ends Terraform distintos para cada ambiente de aplicativo. Backends separados isolam o estado entre desenvolvimento, teste e produção.

Reduza o escopo do impacto

O estado de isolamento ajuda a garantir que as mudanças em ambientes inferiores não afetem a infraestrutura de produção. Acidentes ou experimentos em ambientes de desenvolvimento e teste têm impacto limitado.

Restringir acesso à produção

Bloqueie as permissões do back-end do estado de produção para acesso somente leitura para a maioria dos usuários. Limite quem pode modificar a infraestrutura de produção no pipeline de CI/CD e nas funções de quebra de vidro.

Simplifique os controles de acesso

O gerenciamento de permissões no nível do back-end simplifica o controle de acesso entre ambientes. Usar buckets S3 distintos para cada aplicativo e ambiente significa que amplas permissões de leitura ou gravação podem ser concedidas em buckets de back-end inteiros.

Evite espaços de trabalho compartilhados

Embora você possa usar os espaços de trabalho do Terraform para separar estados entre ambientes, back-ends distintos fornecem um isolamento mais forte. Se você tiver espaços de trabalho compartilhados, os acidentes ainda podem afetar vários ambientes.

Manter os back-ends do ambiente totalmente isolados minimiza o impacto de qualquer falha ou violação. Backends separados também alinham os controles de acesso ao nível de sensibilidade do ambiente. Por exemplo, você pode fornecer proteção de gravação para o ambiente de produção e acesso mais amplo para ambientes de desenvolvimento e teste.

Monitore ativamente a atividade do estado remoto

O monitoramento contínuo da atividade do estado remoto é fundamental para detectar possíveis problemas precocemente. Procure desbloqueios, alterações ou tentativas de acesso anômalos.

Receba alertas sobre desbloqueios suspeitos

A maioria das mudanças de estado deve ser executada por meio de pipelines de CI/CD. Gere alertas se os desbloqueios de estado ocorrerem diretamente nas estações de trabalho do desenvolvedor, o que pode sinalizar alterações não autorizadas ou não testadas.

Monitore as tentativas de acesso

Falhas de autenticação em compartimentos de estado podem indicar atividade de reconhecimento. Observe se várias contas estão tentando acessar o estado ou se aparecem endereços IP incomuns, o que indica credenciais comprometidas.