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á.
Práticas recomendadas de segurança
O gerenciamento adequado da autenticação, dos controles de acesso e da segurança é fundamental para o uso seguro do Terraform AWS Provider. Esta seção descreve as melhores práticas em torno de:
-
Funções e permissões do IAM para acesso com privilégios mínimos
-
Protegendo credenciais para ajudar a impedir o acesso não autorizado a AWS contas e recursos
-
Criptografia de estado remoto para ajudar a proteger dados confidenciais
-
Escaneamento de infraestrutura e código-fonte para identificar configurações incorretas
-
Controles de acesso para armazenamento remoto de estado
-
Aplicação da política do Sentinel para implementar barreiras de governança
Seguir essas melhores práticas ajuda a fortalecer sua postura de segurança ao usar o Terraform para gerenciar AWS a infraestrutura.
Siga o princípio do menor privilégio
O privilégio mínimo é um princípio fundamental de segurança que se refere à concessão somente das permissões mínimas necessárias para que um usuário, processo ou sistema execute as funções pretendidas. É um conceito fundamental em controle de acesso e uma medida preventiva contra acesso não autorizado e possíveis violações de dados.
O princípio do privilégio mínimo é enfatizado várias vezes nesta seção porque está diretamente relacionado à forma como o Terraform autentica e executa ações contra provedores de nuvem, como. AWS
Quando você usa o Terraform para provisionar e gerenciar AWS recursos, ele age em nome de uma entidade (usuário ou função) que exige permissões apropriadas para fazer chamadas de API. Não seguir o menor privilégio abre grandes riscos de segurança:
-
Se o Terraform tiver permissões excessivas além do necessário, uma configuração incorreta não intencional poderá fazer alterações ou exclusões indesejadas.
-
Concessões de acesso excessivamente permissivas aumentam o escopo do impacto se os arquivos ou credenciais do estado do Terraform forem comprometidos.
-
Não seguir o menor privilégio viola as melhores práticas de segurança e os requisitos de conformidade regulatória para conceder o acesso mínimo necessário.
Usar funções do IAM
Use funções do IAM em vez de usuários do IAM sempre que possível para aumentar a segurança com o Terraform AWS Provider. As funções do IAM fornecem credenciais de segurança temporárias que alternam automaticamente, o que elimina a necessidade de gerenciar chaves de acesso de longo prazo. As funções também oferecem controles de acesso precisos por meio de políticas do IAM.
Conceda acesso com privilégios mínimos usando políticas do IAM
Crie cuidadosamente as políticas do IAM para garantir que as funções e os usuários tenham apenas o conjunto mínimo de permissões necessárias para sua carga de trabalho. Comece com uma política vazia e adicione iterativamente serviços e ações permitidos. Para fazer isso:
-
Ative o IAM Access Analyzer para avaliar políticas e destacar permissões não utilizadas que podem ser removidas.
-
Analise manualmente as políticas para remover quaisquer recursos que não sejam essenciais para a responsabilidade pretendida da função.
-
Use variáveis e tags de política do IAM para simplificar o gerenciamento de permissões.
Políticas bem construídas concedem acesso suficiente para cumprir as responsabilidades da carga de trabalho e nada mais. Defina ações no nível da operação e permita chamadas somente para recursos específicos necessários APIs .
Seguir essa prática recomendada reduz o escopo do impacto e segue os princípios fundamentais de segurança de separação de deveres e acesso com privilégios mínimos. Inicie o acesso estrito e aberto gradualmente, conforme necessário, em vez de começar a abrir e tentar restringir o acesso posteriormente.
Assuma funções do IAM para autenticação local
Ao executar o Terraform localmente, evite configurar chaves de acesso estáticas. Em vez disso, use funções do IAM para conceder acesso privilegiado temporariamente sem expor credenciais de longo prazo.
Primeiro, crie uma função do IAM com as permissões mínimas necessárias e adicione uma relação de confiança
Exemplo de política de relacionamento de confiança:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/terraform-execution" }, "Action": "sts:AssumeRole" } ] }
Em seguida, execute o AWS CLI comando aws sts assume-role para recuperar credenciais de curta duração para a função. Essas credenciais normalmente são válidas por uma hora.
AWS CLI exemplo de comando:
aws sts assume-role --role-arn arn:aws:iam::111122223333:role/terraform-execution --role-session-name terraform-session-example
A saída do comando contém uma chave de acesso, uma chave secreta e um token de sessão que você pode usar para se autenticar AWS em:
{ "AssumedRoleUser": { "AssumedRoleId": "AROA3XFRBF535PLBIFPI4:terraform-session-example", "Arn": "arn:aws:sts::111122223333:assumed-role/terraform-execution/terraform-session-example" }, "Credentials": { "SecretAccessKey": " wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": " AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE", "Expiration": "2024-03-15T00:05:07Z", "AccessKeyId": "ASIAIOSFODNN7EXAMPLE" } }
O AWS provedor também pode assumir automaticamente a função
Exemplo de configuração de provedor para assumir uma função do IAM:
provider "aws" { assume_role { role_arn = "arn:aws:iam::111122223333:role/terraform-execution" session_name = "terraform-session-example" } }
Isso concede privilégios elevados estritamente durante a sessão do Terraform. As chaves temporárias não podem ser vazadas porque elas expiram automaticamente após a duração máxima da sessão.
Os principais benefícios dessa prática recomendada incluem maior segurança em comparação com chaves de acesso de longa duração, controles de acesso refinados na função para obter menos privilégios e a capacidade de revogar facilmente o acesso modificando as permissões da função. Ao usar funções do IAM, você também evita ter que armazenar diretamente segredos localmente em scripts ou em disco, o que ajuda a compartilhar a configuração do Terraform com segurança em toda a equipe.
Use funções do IAM para EC2 autenticação da Amazon
Ao executar o Terraform a partir de instâncias do Amazon Elastic Compute Cloud EC2 (Amazon), evite armazenar credenciais de longo prazo localmente. Em vez disso, use funções e perfis de instância do IAM para conceder permissões de privilégios mínimos automaticamente.
Primeiro, crie uma função do IAM com as permissões mínimas e atribua a função ao perfil da instância. O perfil da instância permite que as EC2 instâncias herdem as permissões definidas na função. Em seguida, inicie as instâncias especificando esse perfil de instância. A instância será autenticada por meio da função anexada.
Antes de executar qualquer operação do Terraform, verifique se a função está presente nos metadados da instância para confirmar se as credenciais foram herdadas com sucesso.
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/iam/security-credentials/
Essa abordagem evita codificar AWS chaves permanentes em scripts ou na configuração do Terraform dentro da instância. As credenciais temporárias são disponibilizadas para o Terraform de forma transparente por meio da função e do perfil da instância.
Os principais benefícios dessa prática recomendada incluem maior segurança em relação às credenciais de longo prazo, redução da sobrecarga de gerenciamento de credenciais e consistência entre ambientes de desenvolvimento, teste e produção. A autenticação de função do IAM simplifica as execuções do Terraform a partir de EC2 instâncias e, ao mesmo tempo, impõe o acesso com privilégios mínimos.
Use credenciais dinâmicas para espaços de trabalho do HCP Terraform
O HCP Terraform é um serviço gerenciado fornecido pela HashiCorp que ajuda as equipes a usar o Terraform para provisionar e gerenciar a infraestrutura em vários projetos e ambientes. Ao executar o Terraform no HCP Terraform, use credenciais dinâmicas para simplificar e proteger
Os benefícios incluem rotação de segredos mais fácil, gerenciamento centralizado de credenciais em todos os espaços de trabalho, permissões com privilégios mínimos e eliminação de chaves codificadas. Confiar em chaves efêmeras com hash aumenta a segurança em comparação com chaves de acesso de longa duração.
Use funções do IAM em AWS CodeBuild
Em AWS CodeBuild, execute suas compilações usando uma função do IAM atribuída ao CodeBuild projeto. Isso permite que cada compilação herde automaticamente as credenciais temporárias da função em vez de usar chaves de longo prazo.
Execute GitHub ações remotamente no HCP Terraform
Configure fluxos de trabalho do GitHub Actions para executar o Terraform remotamente nos espaços de trabalho do HCP Terraform. Confie em credenciais dinâmicas e no bloqueio remoto de estados em vez do gerenciamento de GitHub segredos.
Use GitHub ações com o OIDC e configure a ação Credenciais AWS
Use o padrão OpenID Connect (OIDC) para federar GitHub
Use GitLab com o OIDC e o AWS CLI
Use o padrão OIDC para federar GitLab identidades por meio do IAM
Use usuários exclusivos do IAM com ferramentas de automação legadas
Se você tiver ferramentas e scripts de automação que não têm suporte nativo para o uso de funções do IAM, você pode criar usuários individuais do IAM para conceder acesso programático. O princípio do menor privilégio ainda se aplica. Minimize as permissões de políticas e confie em funções separadas para cada pipeline ou script. À medida que você migra para ferramentas ou scripts mais modernos, comece a apoiar funções de forma nativa e faça a transição gradual para elas.
Atenção
Os usuários do IAM têm credenciais de longo prazo, o que representa um risco de segurança. Para ajudar a reduzir esse risco, recomendamos que você forneça a esses usuários somente as permissões necessárias para realizar a tarefa e que você os remova quando não forem mais necessários.
Use o plug-in Jenkins AWS Credentials
Use o plug-in AWS Credentials
Monitore, valide e otimize continuamente o menor privilégio
Com o tempo, podem ser concedidas permissões adicionais que podem exceder as políticas mínimas exigidas. Analise continuamente o acesso para identificar e remover quaisquer direitos desnecessários.
Monitore continuamente o uso da chave de acesso
Se você não puder evitar o uso de chaves de acesso, use os relatórios de credenciais do IAM para encontrar chaves de acesso não utilizadas com mais de 90 dias e revogue as chaves inativas em contas de usuário e funções de máquina. Alerte os administradores para que confirmem manualmente a remoção das chaves dos funcionários e sistemas ativos.
O monitoramento do uso da chave ajuda a otimizar as permissões porque você pode identificar e remover direitos não utilizados. Quando você segue essa prática recomendada com a rotação da chave de acesso, ela limita a vida útil da credencial e impõe o acesso com privilégios mínimos.
AWS fornece vários serviços e recursos que você pode usar para configurar alertas e notificações para administradores. Aqui estão algumas opções:
-
AWS Config
: você pode usar AWS Config regras para avaliar as configurações dos seus AWS recursos, incluindo as chaves de acesso do IAM. Você pode criar regras personalizadas para verificar condições específicas, como chaves de acesso não utilizadas com mais de um número específico de dias. Quando uma regra é violada, AWS Config pode iniciar uma avaliação para remediação ou enviar notificações para um tópico do Amazon Simple Notification Service (Amazon SNS). -
AWS Security Hub
: o Security Hub fornece uma visão abrangente da postura de segurança da sua AWS conta e pode ajudar a detectar e notificar você sobre possíveis problemas de segurança, incluindo chaves de acesso do IAM não utilizadas ou inativas. O Security Hub pode se integrar à Amazon EventBridge e ao Amazon SNS ou ao Amazon Q Developer em aplicativos de bate-papo para enviar notificações aos administradores. -
AWS Lambda
: As funções Lambda podem ser chamadas por vários eventos, incluindo Amazon CloudWatch Events ou AWS Config regras. Você pode escrever funções Lambda personalizadas para avaliar o uso da chave de acesso do IAM, realizar verificações adicionais e enviar notificações usando serviços como o Amazon SNS ou o Amazon Q Developer em aplicativos de bate-papo.
Valide continuamente as políticas do IAM
Use o IAM Access Analyzer para avaliar as políticas associadas às funções e identificar quaisquer serviços não utilizados ou ações em excesso que foram concedidas. Implemente análises de acesso periódicas para verificar manualmente se as políticas atendem aos requisitos atuais.
Compare a política existente com a política gerada pelo IAM Access Analyzer e remova todas as permissões desnecessárias. Você também deve fornecer relatórios aos usuários e revogar automaticamente as permissões não utilizadas após um período de carência. Isso ajuda a garantir que políticas mínimas permaneçam em vigor.
A revogação proativa e frequente do acesso obsoleto minimiza as credenciais que podem estar em risco durante uma violação. A automação fornece higiene de credenciais e otimização de permissões sustentáveis e de longo prazo. Seguir essa prática recomendada limita o escopo do impacto ao aplicar proativamente o menor privilégio entre AWS identidades e recursos.
Armazenamento remoto seguro de estado
O armazenamento de estado remoto
A falha em proteger o estado remoto pode levar a problemas sérios, como perda de dados de estado, incapacidade de gerenciar a infraestrutura, exclusão inadvertida de recursos e exposição de informações confidenciais que possam estar presentes no arquivo de estado. Por esse motivo, proteger o armazenamento remoto de estado é crucial para o uso do Terraform em nível de produção.
Ative a criptografia e os controles de acesso
Use a criptografia do lado do servidor (SSE) do Amazon Simple Storage Service (Amazon S3) para criptografar o estado remoto em repouso.
Limite o acesso direto aos fluxos de trabalho colaborativos
-
Estruture fluxos de trabalho de colaboração no HCP Terraform ou em um pipeline de CI/CD em seu repositório Git para limitar o acesso direto ao estado.
-
Confie em pull requests, execute aprovações, verificações de políticas e notificações para coordenar as mudanças.
Seguir essas diretrizes ajuda a proteger atributos confidenciais dos recursos e evita conflitos com as alterações dos membros da equipe. A criptografia e as proteções rígidas de acesso ajudam a reduzir a superfície de ataque, e os fluxos de trabalho de colaboração permitem a produtividade.
Use AWS Secrets Manager
Há muitos recursos e fontes de dados no Terraform que armazenam valores secretos em texto simples no arquivo de estado. Evite armazenar segredos no estado - use em vez AWS Secrets Managerdisso.
Em vez de tentar criptografar manualmente valores confidenciais
Examine continuamente a infraestrutura e o código-fonte
Examine proativamente a infraestrutura e o código-fonte continuamente em busca de riscos, como credenciais expostas ou configurações incorretas, para fortalecer sua postura de segurança. Resolva as descobertas imediatamente reconfigurando ou corrigindo recursos.
Use AWS serviços para digitalização dinâmica
Use ferramentas AWS nativas, como Amazon Inspector
Realizar análise estática
Incorpore analisadores estáticos, como o Checkov
Garanta uma remediação imediata
Para todas as descobertas do escaneamento, garanta uma correção imediata atualizando a configuração do Terraform, aplicando patches ou reconfigurando os recursos manualmente, conforme apropriado. Reduza os níveis de risco abordando as causas principais.
O uso da varredura de infraestrutura e da varredura de código fornece uma visão em camadas sobre as configurações do Terraform, os recursos provisionados e o código do aplicativo. Isso maximiza a cobertura de risco e conformidade por meio de controles preventivos, de detecção e reativos, ao mesmo tempo em que incorpora a segurança mais cedo ao ciclo de vida de desenvolvimento de software (SDLC).
Imponha verificações de políticas
Use estruturas de código, como as políticas do HashiCorp Sentinel
As políticas do Sentinel podem definir requisitos ou restrições na configuração do Terraform para se alinharem aos padrões organizacionais e às melhores práticas. Por exemplo, você pode usar as políticas do Sentinel para:
-
Exija tags em todos os recursos.
-
Restrinja os tipos de instância a uma lista aprovada.
-
Aplique variáveis obrigatórias.
-
Evite a destruição dos recursos de produção.
A incorporação de verificações de políticas nos ciclos de vida de configuração do Terraform permite a aplicação proativa de padrões e diretrizes de arquitetura. O Sentinel fornece uma lógica política compartilhada que ajuda a acelerar o desenvolvimento e, ao mesmo tempo, evitar práticas não aprovadas.