

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

# Implemente e gerencie AWS Control Tower controles usando o Terraform
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform"></a>

*Iker Reina Fuente e Ivan Girardi, Amazon Web Services*

## Resumo
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-summary"></a>

Esse padrão descreve como usar AWS Control Tower controles, HashiCorp Terraform e infraestrutura como código (IaC) para implementar e administrar controles de segurança preventivos, detectivos e proativos. Um [controle](https://docs.aws.amazon.com/controltower/latest/userguide/controls.html) (também conhecido como *corrimão*) é uma regra de alto nível que fornece governança contínua para seu ambiente geral. AWS Control Tower Por exemplo, você pode usar controles para exigir o registro em log Contas da AWS e, em seguida, configurar notificações automáticas caso ocorram eventos específicos relacionados à segurança.

AWS Control Tower ajuda você a implementar controles preventivos, detectivos e proativos que governam seus AWS recursos e monitoram a conformidade em vários. Contas da AWS Cada controle impõe uma única regra. Neste padrão, você usa um modelo de IaC fornecido para especificar quais controles você deseja implantar em seu ambiente.

AWS Control Tower os controles se aplicam a uma [unidade organizacional (OU)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organizationalunit) inteira, e o controle afeta cada um Conta da AWS dentro da OU. Portanto, quando os usuários realizam qualquer ação em qualquer conta em sua zona de pouso, a ação está sujeita aos controles que governam a UO.

A implementação de AWS Control Tower controles ajuda a estabelecer uma base de segurança sólida para sua AWS landing zone. Ao usar esse padrão para implantar os controles como IaC por meio do Terraform, você pode padronizar os controles em sua zona de pouso e implantá-los e gerenciá-los com mais eficiência.

Para implantar AWS Control Tower controles como IaC, você também pode usar AWS Cloud Development Kit (AWS CDK) em vez do Terraform. Para obter mais informações, consulte [Implantar e gerenciar AWS Control Tower controles usando AWS CDKAWS CloudFormation](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) e.

**Público-alvo**

Esse padrão é recomendado para usuários com experiência com AWS Control Tower Terraform e. AWS Organizations

## Pré-requisitos e limitações
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-prereqs"></a>

**Pré-requisitos **
+ Ativo Contas da AWS gerenciado como uma organização AWS Organizations e uma AWS Control Tower landing zone. Para obter instruções, consulte [Introdução](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html) na AWS Control Tower documentação.
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).
+ Uma função AWS Identity and Access Management (IAM) na conta de gerenciamento que tem permissões para implantar esse padrão. Para obter mais informações sobre as permissões necessárias e um exemplo de política, consulte *Permissões de privilégio mínimo para o perfil do IAM* na seção [Informações adicionais](#deploy-and-manage-aws-control-tower-controls-by-using-terraform-additional) deste padrão.
+ Permissões para assumir o perfil do IAM na conta de gerenciamento.
+ CLI do Terraform, [instalada](https://developer.hashicorp.com/terraform/cli) (documentação do Terraform)
+ Terraform AWS Provider, [configurado](https://hashicorp.github.io/terraform-provider-aws/) (documentação do Terraform).
+ Backend do Terraform, [configurado](https://developer.hashicorp.com/terraform/language/backend) (documentação do Terraform)

**Limitações**
+ Para AWS Control Tower controles, esse padrão requer o uso de [identificadores globais](https://docs.aws.amazon.com/controltower/latest/controlreference/all-global-identifiers.html) que estejam no seguinte formato:

  ```
  arn:<PARTITION>:controlcatalog:::control/<CONTROL_CATALOG_OPAQUE_ID>
  ```

  As versões anteriores deste padrão usavam [identificadores regionais](https://docs.aws.amazon.com/controltower/latest/controlreference/control-metadata-tables.html) que não contam mais com suporte. Recomendamos que você migre de identificadores regionais para identificadores globais. Os identificadores globais ajudam você a gerenciar controles e ampliar o número de controles que podem ser usados.
**nota**  
Na maioria dos casos, o valor para `<PARTITION>` é `aws`.

**Versões do produto**
+ AWS Control Tower versão 3.2 ou posterior
+ Terraform versão 1.5 ou mais recente
+ Terraform AWS Provider versão 4.67 ou posterior

## Arquitetura
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-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 exemplo. O diagrama a seguir mostra os controles implantados nas várias contas na UO.

![\[Diagrama de arquitetura dos controles implantados em todas as contas da AWS na unidade organizacional.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/6e0d6c30-a539-44b7-8415-e669fb2ad26a/images/60407c0e-852e-4d5f-9a7d-8510316063aa.png)


AWS Control Tower os controles são categorizados de acordo com seu *comportamento* e sua *orientação*.

Há três tipos principais de comportamentos de controle:

1. Os *controles preventivos* são projetados para evitar que ações ocorram. Eles são implementados com [políticas de controle de serviço (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) ou [políticas de controle de recursos (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) em AWS Organizations. O status de um controle preventivo é **aplicado** ou **não habilitado**. Os controles preventivos são suportados em todos Regiões da AWS.

1. Os *controles detectivos* são projetados para detectar eventos específicos quando ocorrem e registrar a ação no AWS CloudTrail. Esses controles são implementados com [regras do AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html). O status de um controle detectivo é **limpo**, **em violação**, ou **não habilitado**. Os controles de detetive se aplicam somente àqueles Regiões da AWS suportados pelo. AWS Control Tower

1. *Os controles proativos* examinam os recursos que seriam provisionados AWS CloudFormation e verificam se eles estão em conformidade com as políticas e os objetivos da sua empresa. Os recursos que não estão em conformidade não serão provisionados. Esses controles são implementados com [hooks do AWS CloudFormation](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/hooks.html). O status de um controle proativo é **PASS**, **FAIL** ou **SKIP**.

A *orientação* de controle é a prática recomendada de como aplicar cada controle ao seu OUs. AWS Control Tower fornece três categorias de orientação: *obrigatória*, *altamente recomendada* e *eletiva.* A orientação de um controle é independente do comportamento dele. Para obter mais informações, consulte [Controle de comportamento e orientação](https://docs.aws.amazon.com/controltower/latest/userguide/controls.html#control-behavior).

## Ferramentas
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-tools"></a>

**Serviços da AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los em todo o ciclo de vida em todas Contas da AWS as regiões.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)fornece uma visão detalhada dos recursos em seu computador Conta da AWS e de como eles estão configurados. Ajuda a identificar como os recursos estão relacionados entre si e como suas configurações foram alteradas ao longo do tempo.
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)ajuda você a configurar e administrar um ambiente AWS com várias contas, seguindo as melhores práticas prescritivas.
+ [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 da AWS em uma organização que você cria e gerencia centralmente.

**Outras ferramentas**
+ O [HashiCorp Terraform](https://www.terraform.io/docs) é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [Implantar e gerenciar AWS Control Tower controles usando o repositório Terraform](https://github.com/aws-samples/aws-control-tower-controls-terraform).

## Práticas recomendadas
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-best-practices"></a>
+ O perfil do IAM usado para implantar essa solução devem seguir o [princípio do privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) (documentação do IAM).
+ Siga as [melhores práticas para AWS Control Tower administradores](https://docs.aws.amazon.com/controltower/latest/userguide/best-practices.html) (AWS Control Tower documentação).

## Épicos
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-epics"></a>

### Habilitar controles conta de gerenciamento
<a name="enable-controls-in-the-management-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Em um shell bash, insira o comando a seguir. Isso clona os [AWS Control Tower controles de implantação e gerenciamento usando o repositório Terraform de](https://github.com/aws-samples/aws-control-tower-controls-terraform). GitHub<pre>git clone https://github.com/aws-samples/aws-control-tower-controls-terraform.git</pre> | DevOps engenheiro | 
| Edite o arquivo de configuração do backend do Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html) | DevOps engenheiro, Terraform | 
| Edite o arquivo de configuração de provedor do Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html) | DevOps engenheiro, Terraform | 
| Edite o arquivo de configuração. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html) | DevOps engenheiro, AWS geral, Terraform | 
| Provisione o perfil do IAM na conta de gerenciamento. | Na conta de gerenciamento, assuma o perfil do IAM que tem permissões para implantar o arquivo de configuração do Terraform. Para obter mais informações sobre as permissões necessárias e um exemplo de política, consulte *Permissões de privilégio mínimo para o perfil do IAM* na seção [Informações adicionais](#deploy-and-manage-aws-control-tower-controls-by-using-terraform-additional). Para obter mais informações sobre como assumir uma função do IAM no AWS CLI, consulte [Usar uma função do IAM no AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html). | DevOps engenheiro, General AWS | 
| Implantar o arquivo de configuração | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html) | DevOps engenheiro, AWS geral, Terraform | 

### (Opcional) Desative os controles na conta AWS Control Tower de gerenciamento
<a name="optional-disable-controls-in-the-ctower-management-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute o comando `destroy`. | Digite o comando a seguir para remover os recursos implantados por esse padrão.<pre>$ terraform destroy -var-file="variables.tfvars"</pre> | DevOps engenheiro, AWS geral, Terraform | 

## Solução de problemas
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Erro `Error: creating ControlTower Control ValidationException: Guardrail <control ID> is already enabled on organizational unit <OU ID>` | O controle que você está tentando ativar já está habilitado na OU de destino. Esse erro pode ocorrer se um usuário habilitar manualmente o controle por meio do Console de gerenciamento da AWS, por meio de AWS Control Tower ou por completo AWS Organizations. Para implantar o arquivo de configuração do Terraform, você pode usar uma das opções a seguir.**Opção 1: atualize o arquivo de estado atual do Terraform**Você pode importar o recurso para o arquivo de estado atual do Terraform. Quando você executar o comando `apply` novamente, o Terraform ignorará esse recurso. Faça o seguinte para importar o recurso para o estado atual do Terraform:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html)**Opção 2: desative o controle**Se você estiver trabalhando em um ambiente que não seja de produção, poderá desativar o controle no console. Realize a reativação repetindo as etapas apresentadas em *Implantar a configuração* na seção [Épicos](#deploy-and-manage-aws-control-tower-controls-by-using-terraform-epics). Essa abordagem não é recomendada para ambientes de produção porque há um período em que o controle será desativado. Se você deseja usar essa opção em um ambiente de produção, pode implementar controles temporários, como aplicar temporariamente uma SCP no AWS Organizations. | 

## Recursos relacionados
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-resources"></a>

**AWS documentação**
+ [Sobre controles](https://docs.aws.amazon.com/controltower/latest/userguide/controls.html) (AWS Control Tower documentação)
+ [Biblioteca de controles](https://docs.aws.amazon.com/controltower/latest/userguide/controls-reference.html) (AWS Control Tower documentação)
+ [Implemente e gerencie AWS Control Tower controles usando AWS CDK e AWS CloudFormation](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) (AWS orientação prescritiva)

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

## Mais informações
<a name="deploy-and-manage-aws-control-tower-controls-by-using-terraform-additional"></a>

**Exemplo de arquivo ****variables.tfvars**

Veja a seguir um exemplo de um arquivo **variables.tfvars** atualizado. Este exemplo habilita o controle **AWS-GR\$1ENCRYPTED\$1VOLUMES** (ID global: `503uicglhjkokaajywfpt6ros`) e o controle **AWS-GR\$1SUBNET\$1AUTO\$1ASSIGN\$1PUBLIC\$1IP\$1DISABLED** (ID global: `50z1ot237wl8u1lv5ufau6qqo`). Para obter uma lista de identificadores globais IDs, consulte [Todos os identificadores globais](https://docs.aws.amazon.com/controltower/latest/controlreference/all-global-identifiers.html) na AWS Control Tower documentação.

O exemplo apresentado a seguir também habilita controles com parâmetros como **CT.S3.PV.5** (ID global: `7mo7a2h2ebsq71l8k6uzr96ou`) e **CT.SECRETSMANAGER.PV.1** (ID global: `dvhe47fxg5o6lryqrq9g6sxg4`). Para obter uma lista de controles com parâmetros, consulte [Controles com parâmetros](https://docs.aws.amazon.com/controltower/latest/controlreference/control-parameter-concepts.html) na AWS Control Tower documentação.

```
controls = [
    {
        control_names = [
            "503uicglhjkokaajywfpt6ros", # AWS-GR_ENCRYPTED_VOLUMES
            ...
        ],
        organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...],
    },
    {
        control_names = [
            "50z1ot237wl8u1lv5ufau6qqo", # AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED
            ...
        ],
        organizational_unit_ids = ["ou-1111-11111111"...],
    },
]

controls_with_params = [
  {
    control_names = [
      { "7mo7a2h2ebsq71l8k6uzr96ou" = { # CT.S3.PV.5
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
          "ExemptedResourceArns" : [],
        }
      } },
      { "dvhe47fxg5o6lryqrq9g6sxg4" = { # CT.SECRETSMANAGER.PV.1
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
        }
      } },
      ...
    ],
    organizational_unit_ids = ["ou-1111-11111111"...]
  },
  {
    control_names = [
      { "dvuaav61i5cnfazfelmvn9m6k" = { # AWS-GR_DISALLOW_CROSS_REGION_NETWORKING
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
        }
      } },
      { "41ngl8m5c4eb1myoz0t707n7h" = { # AWS-GR_DISALLOW_VPC_INTERNET_ACCESS
        parameters = {
          "ExemptedPrincipalArns" : ["arn:aws:iam::*:role/RoleName"],
        }
      } },
      ...
    ],
    organizational_unit_ids = ["ou-2222-22222222"...]
  }
]
```

**Permissões de privilégio mínimo para o perfil do IAM**

Este padrão requer que você assuma um perfil do IAM na conta gerencial. A melhor prática é assumir um perfil com permissões temporárias e limitar as permissões de acordo com o princípio do privilégio mínimo. O exemplo de política a seguir permite as ações mínimas necessárias para ativar ou desativar AWS Control Tower os controles.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "controltower:EnableControl",
                "controltower:DisableControl",
                "controltower:GetControlOperation",
                "controltower:ListEnabledControls",
                "organizations:AttachPolicy",
                "organizations:CreatePolicy",
                "organizations:DeletePolicy",
                "organizations:DescribeOrganization",
                "organizations:DetachPolicy",
                "organizations:ListAccounts",
                "organizations:ListAWSServiceAccessForOrganization",
                "organizations:ListChildren",
                "organizations:ListOrganizationalUnitsForParent",
                "organizations:ListParents",
                "organizations:ListPoliciesForTarget",
                "organizations:ListRoots",
                "organizations:UpdatePolicy"
            ],
            "Resource": "*"
        }
    ]
}
```