Práticas recomendadas de segurança - 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á.

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 que permita que a função do IAM seja assumida pela sua conta de usuário ou identidade federada. Isso autoriza o uso temporário da função.

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 a autenticação. AWS O Terraform troca automaticamente credenciais temporárias em cada execução sem precisar assumir a função do IAM.

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 a identidade do Actions por meio do IAM. Use a ação Configurar AWS Credenciais para trocar o GitHub token por AWS credenciais temporárias sem precisar de chaves de acesso de longo prazo.

Use GitLab com o OIDC e o AWS CLI

Use o padrão OIDC para federar GitLab identidades por meio do IAM para acesso temporário. Ao confiar no OIDC, você evita ter que gerenciar diretamente as chaves de AWS acesso de longo prazo. GitLab As credenciais são trocadas just-in-time, o que melhora a segurança. Os usuários também obtêm menos privilégios de acesso de acordo com as permissões na função 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 no Jenkins para configurar centralmente e injetar AWS credenciais em compilações dinamicamente. Isso evita a verificação de segredos no controle de origem.

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 se refere ao armazenamento do arquivo de estado do Terraform remotamente, em vez de localmente, na máquina em que o Terraform está sendo executado. O arquivo de estado é crucial porque acompanha os recursos que são provisionados pelo Terraform e seus metadados.

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, confie no suporte integrado do Terraform para gerenciamento de estados confidenciais. Ao exportar valores confidenciais para a saída, verifique se os valores estão marcados como 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, Amazon Detective e AWS Security HubAmazon, GuardDuty para monitorar a infraestrutura provisionada em várias contas e regiões. Agende escaneamentos recorrentes no Security Hub para rastrear a implantação e o desvio de configuração. Examine EC2 instâncias, funções Lambda, contêineres, buckets S3 e outros recursos.

Realizar análise estática

Incorpore analisadores estáticos, como o Checkov, diretamente nos pipelines de CI/CD para escanear o código de configuração do Terraform (HCL) e identificar riscos preventivamente antes da implantação. Isso move as verificações de segurança para um ponto anterior no processo de desenvolvimento (conhecido como deslocamento para a esquerda) e evita a configuração incorreta da infraestrutura.

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, para fornecer proteções de governança e modelos padronizados para provisionamento de infraestrutura com o Terraform.

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.