

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
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization"></a>

*Aarthi Kannan, Amazon Web Services*

## Resumo
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-summary"></a>

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 ambiente da AWS. GuardDuty Habilitar manualmente várias contas ou organizações, em várias regiões da AWS ou por meio do AWS Management Console pode ser complicado. 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.

A AWS recomenda usar o 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 da 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 contas da AWS que são membros atuais da organização-alvo no 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 AWS GuardDuty Organizations.

## Pré-requisitos e limitações
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Uma organização está configurada no 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 CI/CD pipeline. 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](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_organizations.html#delegated_admin_important) (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 [Criar uma estrutura de conta](https://www.wellarchitectedlabs.com/cost/100_labs/100_1_aws_account_setup/2_account_structure/) (AWS Well-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](https://www.terraform.io/language/settings/backends/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](https://registry.terraform.io/modules/nozaq/remote-state-s3-backend/aws/latest) (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](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) e [Criar uma tabela](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html) (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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html) (documentação do Amazon S3). Se você estiver implantando em uma zona de pouso do AWS Control Tower, poderá reutilizar o bucket do S3 na conta de **arquivamento de log** para essa finalidade. 
+ A versão 0.14.6 ou superior do Terraform está instalada e configurada. Para obter mais informações, consulte [Conceitos básicos – AWS](https://learn.hashicorp.com/collections/terraform/aws-get-started) (documentação do Terraform).
+ A versão 3.9.6 ou superior do Python está instalada e configurada. Para obter mais informações, consulte [Versões de origem](https://www.python.org/downloads/source/) (site da Python).
+ O AWS SDK para Python (Boto3) está instalado. Para obter mais informações, consulte [Instalação](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#installation) (documentação do Boto3).
+ O jq está instalado e configurado. Para obter mais informações, consulte [Baixar o jq](https://stedolan.github.io/jq/download/) (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.
**nota**  
O Amazon Linux 2 está se aproximando do fim do suporte. Para obter mais informações, consulte o [Amazon Linux 2 FAQs](https://aws.amazon.com/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 Zona de Pouso da AWS que segue as seguintes práticas recomendadas:
  + A zona de pouso foi criada usando o AWS Control Tower.
  + Contas separadas da AWS são usadas para segurança e registro em log.

**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
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-architecture"></a>

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, dentro de uma única região da AWS.

![\[Diagrama de arquitetura mostrando recursos em gerenciamento, segurança, registro em log e contas de membros.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/c9b68627-b68e-47a6-9933-d0f36ea10ae2/images/86193749-eef9-4d63-8a7f-daa0cd03fbfe.png)


1. O Terraform cria a função **GuardDutyTerraformOrgRole**AWS Identity and Access Management (IAM) na conta de segurança e na conta de registro.

1. O Terraform cria um bucket do S3 na região padrão da AWS na conta de registro em log. 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 chave do AWS Key Management Service (AWS KMS) na conta de segurança que é usada para criptografar as descobertas no bucket do S3 e configura o arquivamento automático das descobertas do bucket do S3 no armazenamento S3 Glacier Flexible Retrieval.

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

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

1. 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](https://docs.aws.amazon.com/guardduty/latest/ug/s3-protection.html) (GuardDuty documentação).

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

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

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

**Automação e escala**

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

## Ferramentas
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-tools"></a>

**Serviços da AWS**
+ O [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.
+  GuardDutyA [Amazon](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html) é 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 ambiente da AWS.
+ O [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.
+ O [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) ajuda você a criar e controlar chaves criptográficas para proteger seus dados.
+ O [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) é um serviço de gerenciamento de contas que ajuda você a consolidar várias contas AWS em uma organização que você cria e gerencia de maneira centralizada.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+ O [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python aos serviços da AWS.

**Outras ferramentas e serviços**
+ [HashiCorp O Terraform](https://www.terraform.io/docs) é 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](https://www.python.org/) é uma linguagem de programação de uso geral.
+ O [jq](https://stedolan.github.io/jq/download/) é 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-](https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform).

## Épicos
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-epics"></a>

### Habilitar GuardDuty na organização
<a name="enable-guardduty-in-the-organization"></a>


| Tarefa | Description | 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](#use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-additional), você pode copiar o comando completo contendo a URL do GitHub repositório. Isso clona o organizations-with-terraform repositório [amazon-guardduty-for-aws-](https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform) de. GitHub<pre>git clone <github-repository-url></pre> | DevOps engenheiro | 
| Edite o arquivo de configuração do Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps engenheiro, AWS geral, Terraform, Python | 
| Gere CloudFormation modelos para novas funções do IAM.  | Esse padrão inclui uma solução IaC para criar dois CloudFormation modelos. Esses modelos criam dois perfis do IAM 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps engenheiro, General AWS | 
| Criar o perfil do IAM. | Seguindo as instruções em [Criação de uma pilha](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) (CloudFormation documentação), faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps engenheiro, General AWS | 
| Provisione o perfil do IAM na conta de gerenciamento. | Como prática recomendada de segurança, recomendamos que você assuma a nova função **management-account-role**do IAM antes de continuar. Na AWS Command Line Interface (AWS CLI), insira o comando em *Assumir o perfil do IAM da conta de gerenciamento* na seção de[Informações adicionais](#use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-additional). | 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.<pre>bash scripts/full-setup.sh</pre>O script **full-setup.sh** executa as seguintes ações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.html) | DevOps engenheiro, Python | 

### (Opcional) Desativar GuardDuty na organização
<a name="optional-disable-guardduty-in-the-organization"></a>


| Tarefa | Description | 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 `root` pasta do repositório, execute o comando a seguir para iniciar o script **cleanup-gd.sh**.<pre>bash scripts/cleanup-gd.sh</pre>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. GuardDutyEsse 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, AWS geral, Terraform, Python | 
| Remover os perfis do IAM. | **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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) (CloudFormation documentação). | DevOps engenheiro, General AWS | 

## Recursos relacionados
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-resources"></a>

*Documentação da AWS*
+ [Gerenciando várias contas](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_accounts.html) (GuardDuty documentação)
+ [Conceder o privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) (documentação do IAM)

*Marketing da AWS*
+ [Amazon GuardDuty](https://aws.amazon.com/guardduty/)
+ [AWS Organizations](https://aws.amazon.com/organizations/)

*Outros recursos*
+ [Terraforma](https://www.terraform.io/)
+ [Documentação da CLI do Terraform](https://www.terraform.io/cli)

## Mais informações
<a name="use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization-additional"></a>

**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
```

**Assumir o perfil do IAM na conta de gerenciamento**

Para assumir um perfil do IAM na conta de gerenciamento, execute o comando a seguir. Substitua `<IAM role ARN>` pelo ARN do seu perfil do IAM .

```
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')
```