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.](images/pattern-img/c9b68627-b68e-47a6-9933-d0f36ea10ae2/images/86193749-eef9-4d63-8a7f-daa0cd03fbfe.png)
O Terraform cria a função GuardDutyTerraformOrgRoleAWSIdentity and Access Management (IAM) na conta de segurança e na conta de registro.
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.
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.
O Terraform cria o GuardDuty detector na conta de segurança, para o administrador GuardDuty delegado.
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).
O Terraform inscreve todas as contas de membros atuais e ativas na organização como GuardDuty membros.
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.
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
Tarefa | Descrição | Habilidades 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-
| DevOps engenheiro |
Edite o arquivo de configuração do Terraform. |
| 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.
| 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:
| 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
O script full-setup.sh executa as seguintes ações:
| DevOps engenheiro, Python |
Tarefa | Descrição | Habilidades 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
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
Gerenciando várias contas (GuardDuty documentaçã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')