

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

# Anexe automaticamente uma política gerenciada da AWS para Systems Manager aos perfis de EC2 instância usando o Cloud Custodian e o AWS CDK
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk"></a>

*Ali Asfour e Aaron Lennon, Amazon Web Services*

## Resumo
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-summary"></a>

Você pode integrar instâncias do Amazon Elastic Compute Cloud (Amazon EC2) com o AWS Systems Manager para automatizar tarefas operacionais e fornecer mais visibilidade e controle. Para se integrarem ao Systems Manager, EC2 as instâncias devem ter um [AWS Systems Manager Agent (SSM Agent)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) instalado e uma política do `AmazonSSMManagedInstanceCore` AWS Identity and Access Management (IAM) anexada aos seus perfis de instância. 

No entanto, se você quiser garantir que todos os perfis de EC2 instância tenham a `AmazonSSMManagedInstanceCore` política anexada, você pode enfrentar desafios para atualizar novas EC2 instâncias que não tenham perfis de instância ou EC2 instâncias que tenham um perfil de instância, mas não tenham a `AmazonSSMManagedInstanceCore` política. Também pode ser difícil adicionar essa política em várias contas da Amazon Web Services (AWS) e regiões da AWS.

Esse padrão ajuda a resolver esses desafios implantando três políticas de [Cloud Custodian](https://cloudcustodian.io/) em suas contas da AWS:
+ A primeira política do Cloud Custodian verifica as EC2 instâncias existentes que têm um perfil de instância, mas não têm a `AmazonSSMManagedInstanceCore` política. A política `AmazonSSMManagedInstanceCore` é então anexada. 
+ A segunda política do Cloud Custodian verifica as EC2 instâncias existentes sem um perfil de instância e adiciona um perfil de instância padrão que tem a `AmazonSSMManagedInstanceCore` política anexada.
+ A terceira política do Cloud Custodian cria funções do [AWS Lambda](https://cloudcustodian.io/docs/aws/lambda.html) em suas contas para monitorar a criação de instâncias e perfis EC2 de instância. Isso garante que a `AmazonSSMManagedInstanceCore` política seja anexada automaticamente quando uma EC2 instância é criada.

Esse padrão usa [as DevOps ferramentas da AWS](https://aws.amazon.com/devops/) para obter uma implantação contínua e em grande escala das políticas do Cloud Custodian em um ambiente de várias contas, sem provisionar um ambiente computacional separado. 

## Pré-requisitos e limitações
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-prereqs"></a>

**Pré-requisitos **
+ Duas ou mais contas ativas da AWS. Uma conta é a *conta de segurança* e as outras são *contas de membros*.
+ Permissões para provisionar recursos na conta de segurança. Esse padrão usa [permissões de administrador](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html), mas você deve conceder permissões de acordo com os requisitos e as políticas da sua organização.
+ Capacidade de assumir um perfil do IAM da conta de segurança até as contas dos membros e criar os perfis do IAM necessários. Para obter mais informações, consulte [Delegar acesso entre contas da AWS usando perfis do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) na documentação do IAM.
+ 
**Importante**  
AWS Command Line Interface (AWS CLI), instalada e configurada. Para fins de teste, você pode configurar a AWS CLI usando o comando `aws configure` ou definindo variáveis de ambiente. : Isso não é recomendado para ambientes de produção, e recomendamos que esta conta receba somente acesso com privilégio mínimo. Para obter mais informações, consulte [Conceder privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) na documentação do IAM.
+ O arquivo `devops-cdk-cloudcustodian.zip` (anexado), transferido por download para o computador local.
+ Familiaridade com o Python.
+ As ferramentas necessárias (Node.js, AWS Cloud Development Kit (AWS CDK) e Git), instaladas e configuradas. Você pode usar o arquivo `install-prerequisites.sh` no arquivo `devops-cdk-cloudcustodian.zip` para** **instalar essas ferramentas.** **Certifique-se de executar esse arquivo com privilégios de raiz. 

**Limitações**
+ Embora esse padrão possa ser usado em um ambiente de produção, certifique-se de que todas as políticas e perfis do IAM atendam aos requisitos e políticas da sua organização. 

**Versões do pacote**
+ Cloud Custodian versão 0.9 ou mais recente
+ TypeScript versão 3.9.7 ou posterior
+ Node.js versão 14.15.4 ou superior
+ `npm` versão 7.6.1 ou mais recente
+ AWS CDK versão 1.96.0 ou superior

## Arquitetura
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-architecture"></a>

![](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/169a7bde-789e-4ebd-b4ca-80eb28ac9927/images/8ec0b6b4-d4b0-42e5-833d-24d1e6098fd9.png)


 

O diagrama mostra o seguinte fluxo de trabalho:

1. As políticas do Cloud Custodian são enviadas para um CodeCommit repositório da AWS na conta de segurança. Uma regra da Amazon CloudWatch Events inicia automaticamente o CodePipeline pipeline da AWS.

1. O pipeline busca o código mais recente CodeCommit e o envia para a parte de integração contínua do pipeline de integração contínua e entrega contínua (CI/CD) gerenciado pela AWS. CodeBuild

1. CodeBuild executa as DevSecOps ações completas, incluindo a validação da sintaxe da política nas políticas do Cloud Custodian, e executa essas políticas no `--dryrun` modo de verificar quais recursos foram identificados.

1. Se não houver erros, a próxima tarefa alertará o administrador para revisar as alterações e aprovar a implantação nas contas dos membros.

**Pilha de tecnologia**
+ AWS CDK
+ CodeBuild
+ CodeCommit
+ CodePipeline
+ IAM
+ Cloud Custodian 

**Automação e escala**

O módulo de pipelines do AWS CDK provisiona um CI/CD pipeline que é usado CodePipeline para orquestrar a criação e o teste do código-fonte CodeBuild, além da implantação de recursos da AWS com pilhas da AWS. CloudFormation É possível usar esse padrão para todas as contas-membro e regiões da organização. Você também pode estender a pilha `Roles creation` para implantar outros perfis do IAM em suas contas de membros. 

## Ferramentas
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-tools"></a>
+ [O AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) é uma estrutura de desenvolvimento de software para definir a infraestrutura de nuvem em código e provisioná-la por meio da AWS. CloudFormation
+ O [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+  CodeBuildA [AWS](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de construção totalmente gerenciado na nuvem.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que você pode usar para armazenar e gerenciar ativos de forma privada.
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) é um serviço de entrega contínua que você pode usar para modelar, visualizar e automatizar as etapas necessárias para lançar seu software.
+ O [AWS Identity and Access Management  ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)é um serviço da web que ajuda você a controlar o acesso aos recursos da AWS com segurança.
+ O [Cloud Custodian](https://cloudcustodian.io/) é uma ferramenta que unifica dezenas de ferramentas e os scripts que muitas organizações usam para gerenciar suas contas de nuvem pública em uma ferramenta de código aberto.
+ [O Node.js](https://nodejs.org/en/) é um JavaScript tempo de execução criado no JavaScript motor V8 do Google Chrome.

**Código **

Para obter uma lista detalhada dos módulos, perfis da conta, arquivos e comandos de implantação usados nesse padrão, consulte o arquivo `README` no arquivo `devops-cdk-cloudcustodian.zip` (em anexo).

## Épicos
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-epics"></a>

### Configure o pipeline com o AWS CDK
<a name="set-up-the-pipeline-with-aws-cdk"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o CodeCommit repositório. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Para obter mais informações sobre isso, consulte [Criação de um CodeCommit repositório](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) na CodeCommit documentação da AWS. | Desenvolvedor | 
| Instale as ferramentas necessárias | Use o arquivo `install-prerequisites.sh` para instalar todas as ferramentas necessárias no Amazon Linux. Não inclui a AWS CLI porque ela vem pré-instalada.<br />Para obter mais informações, consulte [Pré-requisitos](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) na seção de [Conceitos básicos do AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) na documentação do AWS CDK. | Desenvolvedor | 
| Instale os pacotes AWS CDK obrigatórios. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Os pacotes a seguir são exigidos pelo AWS CDK e estão incluídos no arquivo `requirements.txt`:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Desenvolvedor | 

### Configure o ambiente
<a name="configure-your-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize as variáveis necessárias. | Abra o `vars.py` arquivo na pasta raiz do seu CodeCommit repositório e atualize as seguintes variáveis:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Desenvolvedor | 
| Atualize o arquivo account.yml com as informações da conta do membro. | Para executar a ferramenta [c7n-org Cloud Custodian](https://cloudcustodian.io/docs/tools/c7n-org.html) em várias contas, você deve colocar o arquivo de configuração `accounts.yml` na raiz do repositório. Veja a seguir um exemplo de arquivo de configuração do Cloud Custodian para AWS:<pre>accounts:<br />- account_id: '123123123123'<br />  name: account-1<br />  regions:<br />  - us-east-1<br />  - us-west-2<br />  role: arn:aws:iam::123123123123:role/CloudCustodian<br />  vars:<br />    charge_code: xyz<br />  tags:<br />  - type:prod<br />  - division:some division<br />  - partition:us<br />  - scope:pci</pre> | Desenvolvedor | 

### Inicialize as contas da AWS
<a name="bootstrap-the-aws-accounts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicialize a conta de segurança. | Inicialize `deploy_account` com o aplicativo `cloudcustodian_stack` executando o seguinte comando:<pre>cdk bootstrap -a 'python3 <br />cloudcustodian/cloudcustodian_stack.py</pre> | Desenvolvedor | 
| Opção 1: inicialize automaticamente as contas dos membros. | Se a variável `cdk_bootstrap_member_accounts` for definida como para `True` no arquivo `vars.py`, as contas especificadas na variável `member_accounts` serão automaticamente inicializadas pelo pipeline.<br />Se necessário, é possível atualizar `*cdk_bootstrap_role*` com um perfil do IAM que você pode assumir a partir da conta de segurança e que tem as permissões necessárias para inicializar o AWS CDK.<br />Novas contas adicionadas à variável `member_accounts ` são inicializadas automaticamente pelo pipeline para que os perfis necessários possam ser implantados. | Desenvolvedor | 
| Opção 2: inicialize manualmente as contas dos membros.  | Embora não seja recomendável usar essa abordagem, você pode definir o valor de `cdk_bootstrap_member_accounts` para `False` e executar essa etapa manualmente executando o seguinte comando:<pre>$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \<br /><br />--trust {security_account_id} \<br /><br />--context assume-role-credentials:writeIamRoleName={role_name} \<br /><br />--context assume-role-credentials:readIamRoleName={role_name} \<br /><br />--mode=ForWriting \<br /><br />--context bootstrap=true \<br /><br />--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess</pre>Certifique-se de que os valores de `{security_account_id}` e `{role_name}` sejam atualizados com o nome de um perfil do IAM que possa ser assumido usando a conta de segurança e que tenha as permissões exigidas para inicializar o AWS CDK.<br />Você também pode usar outras abordagens para inicializar as contas dos membros, por exemplo, com a AWS CloudFormation. Para obter mais informações, consulte [Inicialização](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) na documentação do AWS CDK. | Desenvolvedor | 

### Implante as pilhas de AWS CDK
<a name="deploy-the-aws-cdk-stacks"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie os perfis do IAM nas contas dos membros. | Execute o seguinte comando para implantar a pilha `member_account_roles_stack` e criar os perfis do IAM nas contas-membro:<pre>cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never</pre> | Desenvolvedor | 
| Implante a pilha de pipeline do Cloud Custodian. | Execute o seguinte comando para criar o pipeline `cloudcustodian_stack.py` do Cloud Custodian que é implantado na conta de segurança:<pre>cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'</pre> | Desenvolvedor | 

## Recursos relacionados
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-resources"></a>
+ [Conceitos básicos do AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)

## Anexos
<a name="attachments-169a7bde-789e-4ebd-b4ca-80eb28ac9927"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo:[ attachment.zip](samples/p-attach/169a7bde-789e-4ebd-b4ca-80eb28ac9927/attachments/attachment.zip)