Use o Terraform para habilitar automaticamente a Amazon GuardDuty para uma organização - Recomendações da AWS

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á.

Use o Terraform para habilitar automaticamente a Amazon GuardDuty para uma organização

Criado por Aarthi Kannan () AWS

Repositório de código: amazon-guardduty-for-aws - organizations-with-terraform

Ambiente: produção

Tecnologias: Segurança, identidade, conformidade; DevOps

Workload: todas as outras workloads

AWSserviços: Amazon GuardDuty; AWS Organizations

Resumo

A Amazon monitora GuardDuty continuamente suas contas da Amazon Web Services (AWS) e usa inteligência de ameaças para identificar atividades inesperadas e potencialmente maliciosas em seu AWS ambiente. A ativação manual GuardDuty de várias contas ou organizações, em várias AWS regiões ou por meio do AWS Management Console pode ser complicada. Você pode automatizar o processo usando uma ferramenta de infraestrutura como código (IaC), como o Terraform, que pode provisionar e gerenciar serviços e recursos de várias contas e várias regiões na nuvem.

AWSrecomenda usar AWS Organizations para configurar e gerenciar várias contas em GuardDuty. Este padrão segue essa recomendação. Um benefício dessa abordagem é que, quando novas contas são criadas ou adicionadas à organização, elas são ativadas GuardDuty automaticamente nessas contas para todas as regiões suportadas, sem a necessidade de intervenção manual.

Esse padrão demonstra como usar o HashiCorp Terraform para habilitar a Amazon GuardDuty para três ou mais contas Amazon Web Services (AWS) em uma organização. O código de amostra fornecido com esse padrão faz o seguinte:

  • GuardDuty Habilita todas as AWS contas que são membros atuais da organização-alvo em AWS Organizations

  • Ativa o recurso de ativação automática em GuardDuty, que ativa automaticamente todas GuardDuty as contas que serão adicionadas à organização de destino no futuro

  • Permite selecionar as regiões onde você deseja habilitar GuardDuty

  • Usa a conta de segurança da organização como administrador GuardDuty delegado

  • Cria um bucket do Amazon Simple Storage Service (Amazon S3) na conta de registro e GuardDuty configura para publicar as descobertas agregadas de todas as contas nesse bucket

  • Atribui uma política de ciclo de vida que faz a transição das descobertas do bucket S3 para o Amazon S3 Glacier Flexible Retrieval Glacier após 365 dias, por padrão

É possível executar manualmente esse código de amostra ou integrá-lo ao pipeline de integração contínua e implantação contínua (CI/CD).

Público-alvo

Esse padrão é recomendado para usuários com experiência com Terraform, Python e GuardDuty AWS Organizations.

Pré-requisitos e limitações

Pré-requisitos

  • Uma conta da AWS ativa.

  • Uma organização está configurada em AWS Organizations e contém pelo menos as três contas a seguir:

    • Uma conta de gerenciamento: essa é a conta a partir da qual você implanta o código do Terraform, seja de forma independente ou como parte do pipeline de CI/CD. O estado do Terraform também é armazenado nessa conta.

    • Uma conta de segurança — Essa conta é usada como administrador GuardDuty delegado. Para obter mais informações, consulte Considerações importantes para administradores GuardDuty delegados (GuardDuty documentação).

    • Uma conta de registro — Essa conta contém o bucket do S3, onde GuardDuty publica as descobertas agregadas de todas as contas membros.

    Para obter mais informações sobre como configurar a organização com a configuração necessária, consulte Create an account structure (AWSWell-Architected Labs).

  • Um bucket do Amazon S3 e uma tabela do Amazon DynamoDB que servem como backend remoto para armazenar o estado do Terraform na conta de gerenciamento. Para obter mais informações sobre o uso de backends remotos para o estado do Terraform, consulte Backends do S3 (documentação do Terraform). Para obter uma amostra de código que configura o gerenciamento remoto do estado com um back-end S3, consulte remote-state-s3-back-end (Terraform Registry). Observe os seguintes requisitos:

    • As tabelas do DynamoDB e do bucket do S3 devem estar na mesma região.

    • Ao criar a tabela do DynamoDB, a chave de partição deve ser LockID (com distinção entre maiúsculas e minúsculas) e o tipo de chave de partição deve ser String. Todas as outras configurações devem estar em seus valores predefinidos. Para obter mais informações, consulte Sobre chaves primárias e Criar uma tabela (documentação do DynamoDB).

  • Um bucket do S3 que será usado para armazenar registros de acesso do bucket do S3 no qual GuardDuty publicará as descobertas. Para obter mais informações, consulte Habilitar o registro em log de acesso ao servidor Amazon S3 (documentação do Amazon S3). Se você estiver implantando em uma landing zone da AWS Control Tower, poderá reutilizar o bucket do S3 na conta de arquivamento de registros para essa finalidade.

  • A versão 0.14.6 ou superior do Terraform está instalada e configurada. Para obter mais informações, consulte Get Started — AWS (documentação do Terraform).

  • A versão 3.9.6 ou superior está instalada e configurada. Para obter mais informações, consulte Versões de origem (site da Python).

  • AWSSDKpara Python (Boto3) está instalado. Para obter mais informações, consulte Instalação (documentação do Boto3).

  • O jq está instalado e configurado. Para obter mais informações, consulte Baixar o jq (documentação do jq).

Limitações

  • Esse padrão é compatível com os sistemas operacionais macOS e Amazon Linux 2. Esse padrão não foi testado para uso em sistemas operacionais Windows.

    Observação: o Amazon Linux 2 está chegando ao fim do suporte. Para obter mais informações, consulte o Amazon Linux 2 FAQs.

  • GuardDuty ainda não deve estar habilitado em nenhuma das contas, em nenhuma das regiões de destino.

  • A solução IaC nesse padrão não implanta os pré-requisitos.

  • Esse padrão foi projetado para uma AWS landing zone que segue as seguintes melhores práticas:

    • A landing zone foi criada usando a AWS Control Tower.

    • AWSContas separadas são usadas para segurança e registro.

Versões do produto

  • Versão 0.14.6 ou superior do Terraform. O código de amostra foi testado para a versão 1.2.8.

  • Python, versão 3.9.6 ou superior.

Arquitetura

Esta seção fornece uma visão geral de alto nível dessa solução e da arquitetura estabelecida pelo código de amostra. O diagrama a seguir mostra os recursos implantados nas várias contas da organização, em uma única AWS região.

Diagrama de arquitetura mostrando recursos em gerenciamento, segurança, registro em log e contas de membros.
  1. O Terraform cria a função GuardDutyTerraformOrgRoleAWSIdentity and Access Management (IAM) na conta de segurança e na conta de registro.

  2. O Terraform cria um bucket S3 na AWS região padrão na conta de registro. Esse bucket é usado como destino de publicação para agregar todas as GuardDuty descobertas em todas as regiões e de todas as contas da organização. O Terraform também cria uma AWS chave Key Management Service (AWSKMS) na conta de segurança que é usada para criptografar as descobertas no bucket S3 e configura o arquivamento automático das descobertas do bucket S3 no armazenamento S3 Glacier Flexible Retrieval.

  3. Na conta de gerenciamento, o Terraform designa a conta de segurança como administradora delegada da. GuardDuty Isso significa que a conta de segurança agora gerencia o GuardDuty serviço para todas as contas dos membros, incluindo a conta de gerenciamento. As contas de membros individuais não podem ser suspensas ou GuardDuty desativadas sozinhas.

  4. O Terraform cria o GuardDuty detector na conta de segurança, para o administrador GuardDuty delegado.

  5. Se ainda não estiver habilitado, o Terraform habilita a proteção S3. GuardDuty Para obter mais informações, consulte Proteção do Amazon S3 na Amazon GuardDuty (GuardDuty documentação).

  6. O Terraform inscreve todas as contas de membros atuais e ativas na organização como GuardDuty membros.

  7. O Terraform configura o administrador GuardDuty delegado para publicar as descobertas agregadas de todas as contas membros no bucket do S3 na conta de registro.

  8. O Terraform repete as etapas 3 a 7 para cada AWS região que você escolher.

Automação e escala

O código de amostra fornecido é modularizado para que você possa integrá-lo ao seu pipeline de CI/CD para implantação automatizada.

Ferramentas

AWSserviços

  • O Amazon DynamoDB é um serviço SQL sem banco de dados totalmente gerenciado que fornece desempenho rápido, previsível e escalável.

  • GuardDutyA Amazon é um serviço contínuo de monitoramento de segurança que analisa e processa registros para identificar atividades inesperadas e potencialmente não autorizadas em seu AWS ambiente.

  • AWSO Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.

  • AWSO Key Management Service (AWSKMS) ajuda você a criar e controlar chaves criptográficas para proteger seus dados.

  • AWSOrganizations é um serviço de gerenciamento de contas que ajuda você a consolidar várias AWS contas em uma organização que você cria e gerencia centralmente.

  • O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

  • AWSSDKfor Python (Boto3) é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com serviços. AWS

Outras ferramentas e serviços

  • HashiCorp O Terraform é um aplicativo de interface de linha de comando que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem.

  • Python é uma linguagem de programação de uso geral.

  • O jq é um processador de linha de comando que ajuda você a trabalhar com arquivos. JSON

Repositório de código

O código desse padrão está disponível no GitHub organizations-with-terraform repositório amazon-guardduty-for-aws-.

Épicos

TarefaDescriçãoHabilidades necessárias

Clonar o repositório.

Em um shell bash, execute o comando a seguir. Em Clonar o repositório na seção Informações adicionais, você pode copiar o comando completo contendo o URL GitHub do repositório. Isso clona o organizations-with-terraform repositório amazon-guardduty-for-aws- de. GitHub

git clone <github-repository-url>
DevOps engenheiro

Edite o arquivo de configuração do Terraform.

  1. Na pasta root do repositório clonado, replique o arquivo configuration.json.sample executando o comando a seguir.

    cp configuration.json.sample configuration.json
  2. Edite o novo arquivo configuration.json e defina os valores para cada uma das seguintes variáveis:

    • management_acc_id: ID da conta de gerenciamento.

    • delegated_admin_acc_id: ID da conta de segurança.

    • logging_acc_id: ID da conta de registro em log.

    • target_regions— Lista separada por vírgula das AWS regiões onde você deseja ativar. GuardDuty

    • organization_id— AWS ID da organização na qual você está habilitando GuardDuty.

    • default_region: a região em que seu estado do Terraform está armazenado na conta de gerenciamento. Essa é a mesma região em que você implantou o bucket do S3 e a tabela do DynamoDB para o backend do Terraform.

    • role_to_assume_for_role_creation— Nome que você deseja atribuir a uma nova IAM função nas contas de segurança e registro. Você cria esse novo perfil na próxima história. O Terraform assume essa função para criar a GuardDutyTerraformOrgRole IAM função nas contas de segurança e registro.

    • finding_publishing_frequency— Frequência na qual GuardDuty publica as descobertas no bucket do S3.

    • guardduty_findings_bucket_region: região preferencial na qual você deseja criar o bucket do S3 para descobertas publicadas.

    • logging_acc_s3_bucket_name: nome preferido do bucket do S3 para descobertas publicadas.

    • security_acc_kms_key_alias— AWS KMS alias para a chave usada para criptografar as descobertas. GuardDuty

    • s3_access_log_bucket_name— Nome de um bucket S3 preexistente em que você deseja coletar registros de acesso para o bucket S3 usado para descobertas. GuardDuty Esse bucket deve estar na mesma AWS região do bucket de GuardDuty descobertas.

    • tfm_state_backend_s3_bucket: nome do bucket S3 preexistente para armazenar o estado do backend remoto do Terraform.

    • tfm_state_backend_dynamodb_table: nome da tabela preexistente do DynamoDB para bloquear o estado do Terraform.

  3. Salve e feche o arquivo de configuração.

DevOps engenheiro, geralAWS, Terraform, Python

Gere CloudFormation modelos para novas IAM funções.

Esse padrão inclui uma solução IaC para criar dois CloudFormation modelos. Esses modelos criam duas IAM funções que o Terraform usa durante o processo de configuração. Esses modelos seguem as práticas recomendadas de segurança de permissões com privilégios mínimos.

  1. Em um shell do Bash, na pasta root do repositório, navegue até cfn-templates/. Essa pasta contém arquivos CloudFormation de modelos com stubs.

  2. Execute o seguinte comando . Isso substitui os stubs pelos valores fornecidos no arquivo configuration.json.

    bash scripts/replace_config_stubs.sh
  3. Confirme se os seguintes CloudFormation modelos foram criados na cfn-templates/ pasta:

    • management-account-role.yaml — Esse arquivo contém a definição da função e as permissões associadas à IAM função na conta de gerenciamento, que tem as permissões mínimas necessárias para concluir esse padrão.

    • role-to-assume-for-role-creation.yaml — Esse arquivo contém a definição da função e as permissões associadas à IAM função nas contas de segurança e registro. O Terraform assume essa função para criar a GuardDutyTerraformOrgRolefunção nessas contas.

DevOps engenheiro, General AWS

Crie as IAM funções.

Seguindo as instruções em Criação de uma pilha (CloudFormation documentação), faça o seguinte:

  1. Implante a pilha role-to-assume-for-role-creation.yaml nas contas de segurança e de registro.

  2. Implante a pilha management-account-role.yaml na conta de gerenciamento. Quando você criar a pilha com sucesso e ver o status da CREATE_COMPLETE pilha, na saída, anote o Amazon Resource Name (ARN) dessa nova função.

DevOps engenheiro, General AWS

Assuma a IAM função na conta de gerenciamento.

Como prática recomendada de segurança, recomendamos que você assuma a nova management-account-roleIAMfunção antes de continuar. Na Interface da Linha de AWS Comando (AWSCLI), insira o comando em Assumir a IAM função da conta de gerenciamento na seção Informações adicionais.

DevOps engenheiro, General AWS

Execute o script de configuração.

Na pasta root do repositório, execute o comando a seguir para iniciar o script de configuração.

bash scripts/full-setup.sh

O script full-setup.sh executa as seguintes ações:

  • Exporta todos os valores de configuração como variáveis de ambiente

  • Gera os arquivos de código backend.tf e terraform.tfvars para cada módulo do Terraform

  • Permite acesso confiável para GuardDuty a organização por meio do AWSCLI.

  • Importa o estado da organização para o estado do Terraform

  • Cria o bucket do S3 para publicar descobertas na conta de registro em log

  • Cria a AWS KMS chave para criptografar descobertas na conta de segurança

  • Ativa GuardDuty em toda a organização, em todas as regiões selecionadas, conforme descrito na seção Arquitetura

DevOps engenheiro, Python
TarefaDescriçãoHabilidades necessárias

Executar o script de limpeza.

Se você usou esse padrão para habilitar GuardDuty para a organização e quiser desabilitá-lo GuardDuty, na root pasta do repositório, execute o comando a seguir para iniciar o script cleanup-gd.sh.

bash scripts/cleanup-gd.sh

Esse script é desativado GuardDuty na organização de destino, remove todos os recursos implantados e restaura a organização ao estado anterior antes de usar o Terraform para habilitar. GuardDuty

Observação Esse script não remove os arquivos de estado do Terraform nem bloqueia os arquivos dos backends locais e remotos. Se você precisar fazer isso, deverá executar essas ações manualmente. Além disso, esse script não exclui a organização importada nem as contas gerenciadas por ela. O acesso confiável para GuardDuty não está desativado como parte do script de limpeza.

DevOps engenheiro, geralAWS, Terraform, Python

Remova IAM as funções.

Exclua as pilhas que foram criadas com os modelos role-to-assume-for-role-creation.yaml e .yaml. management-account-role CloudFormation Para obter mais informações, consulte Excluindo uma pilha (CloudFormation documentação).

DevOps engenheiro, General AWS

Recursos relacionados

AWSdocumentação

AWSmarketing

Outros recursos

Mais informações

Clonar o repositório

Execute o comando a seguir para clonar o GitHub repositório.

git clone https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform

Assuma a IAM função da conta de gerenciamento

Para assumir a IAM função na conta de gerenciamento, execute o comando a seguir. <IAM role ARN>Substitua pela ARN da IAM função.

export ROLE_CREDENTIALS=$(aws sts assume-role --role-arn <IAM role ARN> --role-session-name AWSCLI-Session --output json) export AWS_ACCESS_KEY_ID=$(echo $ROLE_CREDENTIALS | jq .Credentials.AccessKeyId | sed 's/"//g') export AWS_SECRET_ACCESS_KEY=$(echo $ROLE_CREDENTIALS | jq .Credentials.SecretAccessKey | sed 's/"//g') export AWS_SESSION_TOKEN=$(echo $ROLE_CREDENTIALS | jq .Credentials.SessionToken | sed 's/"//g')