

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

# Centralização do gerenciamento das chaves de acesso do IAM no AWS Organizations usando o Terraform
<a name="centralize-iam-access-key-management-in-aws-organizations-by-using-terraform"></a>

*Aarti Rajput, Chintamani Aphale, T.V.R.L.Phani Kumar Dadi, Pratap Kumar Nanda, Pradip Kumar Pandey e Mayuri Shinde, Amazon Web Services*

## Resumo
<a name="centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-summary"></a>

Aplicar as regras de segurança para chaves e senhas é uma** **tarefa essencial para qualquer organização. Uma regra fundamental é rotacionar as chaves do AWS Identity and Access Management (IAM) periodicamente para garantir a segurança. As chaves de acesso da AWS geralmente são criadas e configuradas localmente sempre que equipes precisam acessar a AWS por meio da AWS Command Line Interface** **(AWS CLI) ou de aplicações externas à AWS. Para manter uma segurança robusta em toda a organização, as chaves de segurança antigas devem ser alteradas ou excluídas após o cumprimento da exigência ou periodicamente. O processo de gerenciar a rotação de chaves em várias contas de uma organização é demorado e trabalhoso. Esse padrão auxilia na automação do processo de rotação por meio do Account Factory for Terraform (AFT) e dos serviços da AWS.

O padrão fornece os seguintes benefícios:
+ Gerencia sua chave de acesso IDs e chaves de acesso secretas em todas as contas da sua organização a partir de um local central.
+ Rotação automática das variáveis de ambiente `AWS_ACCESS_KEY_ID` e `AWS_SECRET_ACCESS_KEY`.
+ Imposição da renovação se as credenciais do usuário forem comprometidas.

O padrão usa o Terraform para implantar funções do AWS Lambda, regras da EventBridge Amazon e funções do IAM. Uma EventBridge regra é executada em intervalos regulares e chama uma função Lambda que lista todas as chaves de acesso do usuário com base em quando elas foram criadas. As funções do Lambda adicionais criam um novo ID de chave de acesso e uma chave de acesso secreta, caso a chave anterior seja mais antiga do que o período de rotação definido (por exemplo, 45 dias), e notificam um administrador de segurança usando o Amazon Simple Notiﬁcation Service (Amazon SNS) e o Amazon Simple Email Service (Amazon SES). Os segredos são criados no AWS Secrets Manager para o usuário, a chave de acesso secreta anterior é armazenada no Secrets Manager e as permissões para acessar a antiga chave são configuradas. Para garantir que a chave de acesso antiga não seja mais usada, ela é desativada após um período de inatividade (por exemplo, 60 dias, o que ocorreria 15 dias após a rotação das chaves no nosso exemplo). Após um período de buffer de inatividade (por exemplo, 90 dias, ou 45 dias após as chaves serem rotacionadas no nosso exemplo), as chaves de acesso antigas são excluídas do AWS Secrets Manager. Para obter uma arquitetura e um fluxo de trabalho detalhados, consulte a seção [Arquitetura](#centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-architecture).

## Pré-requisitos e limitações
<a name="centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-prereqs"></a>
+ Uma zona de pouso para sua organização criada com o[ AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html) (versão 3.1 ou versões posteriores)
+  O [Account Factory for Terraform (AFT)](https://catalog.workshops.aws/control-tower/en-US/customization/aft) configurado para três contas:
  + A [conta gerencial da organização](https://catalog.workshops.aws/control-tower/en-US/customization/aft/repositories/global-customizations) administra toda a organização a partir de um único local.
  + A [conta gerencial do AFT](https://catalog.workshops.aws/control-tower/en-US/customization/aft/repositories/account-customizations) hospeda o pipeline do Terraform e implanta a infraestrutura na conta de implantação.
  + A [conta de implantação](https://catalog.workshops.aws/control-tower/en-US/customization/aft/repositories/provisioning-customizations) é responsável por implantar a solução completa e gerenciar as chaves do IAM de um local centralizado.
+ O Terraform, na versão 0.15.0 ou em versões posteriores, para provisionar a infraestrutura na conta de implantação.
+ Um endereço de e-mail configurado no [Amazon Simple Email Service (Amazon SES)](https://aws.amazon.com/ses/).
+ (Recomendado) Para aumentar a segurança, implante essa solução em uma [sub-rede privada](https://docs.aws.amazon.com/vpc/latest/userguide/create-subnets.html) (conta de implantação) em uma [nuvem privada virtual (VPC)](https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest). Você pode informar os detalhes da VPC e da sub-rede ao personalizar as variáveis (consulte *Personalização de parâmetros para o pipeline de código* na seção [Épicos](#centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-epics)).

## Arquitetura
<a name="centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-architecture"></a>

**Repositórios do AFT**

Este padrão usa o Account Factory for Terraform (AFT) para criar todos os recursos da AWS necessários e o pipeline de código para implantar esses recursos em uma conta de implantação. O pipeline de código é executado em dois repositórios:
+ A **personalização global** contém código do Terraform que será executado em todas as contas registradas no AFT.
+ As **personalizações da conta** contêm código do Terraform que será executado na conta de implantação.

**Detalhes do recurso**

Os CodePipeline trabalhos da AWS criam os seguintes recursos na conta de implantação:
+  EventBridge Regra da AWS e regra configurada
+ Função do Lambda em `account-inventory`
+ Função do Lambda em `IAM-access-key-rotation`
+ Função do Lambda em `Notification`
+ Bucket do Amazon Simple Storage Service (Amazon S3) que contém um modelo de e-mail
+ Política do IAM necessária

**Arquitetura**

![\[Arquitetura para centralizar o gerenciamento de chaves de acesso do IAM no AWS Organizations\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/0217275c-cb4c-4bdf-b105-ad9abfd4fded/images/844512f0-67b3-4d41-aaaa-fbd9e341c438.png)


O diagrama ilustra o seguinte:

1. Uma EventBridge regra chama a função `account-inventory` Lambda a cada 24 horas.

1. A função `account-inventory` Lambda consulta o AWS Organizations para obter uma lista de todas as contas IDs, nomes de contas e e-mails de contas da AWS. 

1. A função do Lambda `account-inventory` inicia a função do Lambda `IAM-access-key-auto-rotation` para cada conta da AWS e transfere os metadados para processamento adicional.

1. A função do Lambda `IAM-access-key-auto-rotation` usa um perfil do IAM assumido para acessar a conta da AWS. O script do Lambda executa uma auditoria em todos os usuários e suas chaves de acesso do IAM na conta.

1. O limite de rotação da chave do IAM (período de rotação) é configurado como uma variável de ambiente quando a função do Lambda `IAM-access-key-auto-rotation` é implantada. Se o período de rotação for modificado, a função do Lambda `IAM-access-key-auto-rotation` é implantada novamente com a variável de ambiente atualizada. Você pode configurar parâmetros para definir o período de rotação, o período de inatividade das chaves antigas e o buffer de inatividade após o qual as chaves antigas serão excluídas (consulte *Personalização de parâmetros para o pipeline de código* na seção [Épicos](#centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-epics)).

1. A função do Lambda `IAM-access-key-auto-rotation` valida a data de criação da chave de acesso com base em sua configuração. Se a data de criação da chave de acesso do IAM não ultrapassou o período de rotação definido, a função do Lambda não executa nenhuma ação adicional.

1. Se a data de criação da chave de acesso do IAM exceder o período de rotação definido, a função do Lambda `IAM-access-key-auto-rotation` cria uma nova chave e rotaciona a chave existente.

1. A função do Lambda armazena a chave antiga no Secrets Manager e limita as permissões ao usuário cujas chaves de acesso não estão em conformidade com os padrões de segurança. A função do Lambda também cria uma política baseada em recursos que permite que somente a entidade principal especificada do IAM acesse e recupere o segredo.

1. A função do Lambda `IAM-access-key-rotation` chama a função do Lambda `Notification`.

1. A função do Lambda `Notification` consulta o bucket do S3 em busca de um modelo de e-mail e gera dinamicamente mensagens de e-mail com os metadados de atividade relevantes.

1. A função do Lambda `Notification` chama o Amazon SES para a execução de ações subsequentes.

1.  O Amazon SES envia um e-mail para o endereço de e-mail do proprietário da conta com as informações relevantes.

## Ferramentas
<a name="centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-tools"></a>

**Serviços 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. Este padrão requer perfis IAM e permissões.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é um serviço de computação que ajuda você a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.
+ O [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) ajuda você a substituir credenciais codificadas em seu código, incluindo senhas, por uma chamada de API ao Secrets Manager para recuperar o segredo programaticamente.
+ [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html): ajuda você a enviar e receber e-mails usando seus próprios endereços de e-mail e domínios.

**Outras ferramentas**
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

**Repositório de código**

As instruções e o código desse padrão estão disponíveis no repositório de [rotação de chaves de acesso GitHub do IAM](https://github.com/aws-samples/centralized-iam-key-management-aws-organizations-terraform.git). Você pode realizar a implantação do código na conta central de implantação do AWS Control Tower para gerenciar a rotação de chaves a partir de um único local.

## Práticas recomendadas
<a name="centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-best-practices"></a>
+ Para o IAM, consulte as [práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.
+ Para rotação de chaves, consulte as [diretrizes para atualizar as chaves de acesso](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#rotate-credentials) na documentação do IAM.

## Épicos
<a name="centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-epics"></a>

### Configuração dos arquivos de origem
<a name="set-up-source-files"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-iam-access-key-management-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 

### Configurar contas
<a name="configure-accounts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure a conta de inicialização. | Como parte do processo de [inicialização do AFT](https://catalog.workshops.aws/control-tower/en-US/customization/aft/deploy), você deve ter uma pasta chamada `aft-bootstrap` em sua máquina local.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-iam-access-key-management-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 
| Configure as personalizações globais. | Como parte da configuração da [pasta do AFT](https://catalog.workshops.aws/control-tower/en-US/customization/aft/repositories/global-customizations), você deve ter uma pasta chamada `aft-global-customizations` em sua máquina local.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-iam-access-key-management-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 
| Configure as personalizações da conta. | Como parte da [configuração da pasta do AFT](https://catalog.workshops.aws/control-tower/en-US/customization/aft/repositories/account-customizations), você deve ter uma pasta chamada `aft-account-customizations` em sua máquina local.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-iam-access-key-management-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 

### Personalização de parâmetros para o pipeline de código
<a name="customize-parameters-for-the-code-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Personalize os parâmetros do pipeline de código que não são do Terraform para todas as contas. | Crie um arquivo chamado `input.auto.tfvars` na pasta `aft-global-customizations/terraform/`, e forneça os dados de entrada necessários. Consulte [o arquivo no GitHub repositório](https://github.com/aws-samples/centralized-iam-key-management-aws-organizations-terraform/blob/main/global-account-customization/input.auto.tfvars) para ver os valores padrão. | DevOps engenheiro | 
| Personalize os parâmetros do pipeline de código para a conta de implantação. | Crie um arquivo chamado `input.auto.tfvars` na `aft-account-customizations/<AccountName>/terraform/` pasta e envie o código para a AWS CodeCommit. Enviar código para a AWS inicia CodeCommit automaticamente o pipeline de código.Especifique os valores dos parâmetros com base nos requisitos da sua organização, incluindo os seguintes itens (consulte [o arquivo no repositório do GitHub](https://github.com/aws-samples/centralized-iam-key-management-aws-organizations-terraform/blob/main/account-customization/input.auto.tfvars) para conferir os valores padrão): [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-iam-access-key-management-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 

### Validação da rotação de chaves
<a name="validate-key-rotation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide a solução. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-iam-access-key-management-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 

### Ampliação da solução
<a name="extend-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Personalize a data da notificação por e-mail. | Se você deseja enviar notificações por e-mail em um dia específico antes de desabilitar a chave de acesso, pode atualizar a função do Lambda `IAM-access-key-auto-rotation` com essas alterações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-iam-access-key-management-in-aws-organizations-by-using-terraform.html) | DevOps engenheiro | 

## Solução de problemas
<a name="centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| A execução da função do Lambda `account-inventory` falha com o erro `AccessDenied` ao listar contas. | Se você encontrar esse problema, é necessário validar as permissões:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-iam-access-key-management-in-aws-organizations-by-using-terraform.html) | 

## Recursos relacionados
<a name="centralize-iam-access-key-management-in-aws-organizations-by-using-terraform-resources"></a>
+ [Terraform Recommended Practices](https://developer.hashicorp.com/terraform/cloud-docs/recommended-practices) (documentação do Terraform)
+ [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (documentação do IAM)
+ [Práticas recomendadas para a rotação de chaves](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#rotate-credentials) (documentação do IAM)