

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Adjunte automáticamente una política gestionada por AWS para Systems Manager a los perfiles de EC2 instancia mediante Cloud Custodian y 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 y Aaron Lennon, Amazon Web Services*

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

Puede integrar las instancias de Amazon Elastic Compute Cloud (Amazon EC2) con AWS Systems Manager para automatizar las tareas operativas y ofrecer más visibilidad y control. Para integrarse con Systems Manager, EC2 las instancias deben tener un [agente de AWS Systems Manager (SSM Agent)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) instalado y una política de `AmazonSSMManagedInstanceCore` AWS Identity and Access Management (IAM) adjunta a sus perfiles de instancia. 

Sin embargo, si quiere asegurarse de que todos los perfiles de EC2 instancia tengan la `AmazonSSMManagedInstanceCore` política adjunta, puede tener dificultades para actualizar nuevas EC2 instancias que no tienen perfiles de instancia o EC2 instancias que tienen un perfil de instancia pero no tienen la `AmazonSSMManagedInstanceCore` política. También puede resultar difícil añadir esta política en varias cuentas de Amazon Web Services (AWS) y regiones de AWS.

Este patrón ayuda a resolver estos desafíos mediante la implementación de tres políticas de [Cloud Custodian](https://cloudcustodian.io/) en sus cuentas de AWS:
+ La primera política de Cloud Custodian comprueba si hay EC2 instancias existentes que tienen un perfil de instancia pero que no cuentan con la `AmazonSSMManagedInstanceCore` política. A continuación, se adjunta la política `AmazonSSMManagedInstanceCore`. 
+ La segunda política de Cloud Custodian comprueba las EC2 instancias existentes sin un perfil de instancia y agrega un perfil de instancia predeterminado que incluye la `AmazonSSMManagedInstanceCore` política adjunta.
+ La tercera política de Cloud Custodian crea funciones de [AWS Lambda](https://cloudcustodian.io/docs/aws/lambda.html) en sus cuentas para supervisar la creación EC2 de instancias y perfiles de instancias. Esto garantiza que la `AmazonSSMManagedInstanceCore` política se adjunte automáticamente al crear una EC2 instancia.

Este patrón utiliza DevOps las herramientas de [AWS](https://aws.amazon.com/devops/) para lograr una implementación continua y a escala de las políticas de Cloud Custodian en un entorno de varias cuentas, sin aprovisionar un entorno informático independiente. 

## Requisitos previos y limitaciones
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-prereqs"></a>

**Requisitos previos **
+ Dos o más cuentas de AWS activas. Una cuenta es la *cuenta de seguridad* y las demás son *cuentas de miembros*.
+ Permisos para aprovisionar recursos de AWS en la cuenta de seguridad. Este patrón utiliza [permisos de administrador](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html), pero usted debe conceder los permisos de acuerdo con los requisitos y las políticas de su organización.
+ Capacidad para asumir un rol de IAM desde la cuenta de seguridad hasta las cuentas de los miembros y crear los roles de IAM necesarios. Para obtener más información al respecto, consulte [Delegar el acceso entre cuentas de AWS utilizando roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) en la documentación de IAM.
+ 
**importante**  
Interfaz de la línea de comandos de AWS (AWS CLI) instalada y configurada. Para realizar pruebas, puede configurar la AWS CLI mediante el comando `aws configure` o configurando variables de entorno. : esto no se recomienda para entornos de producción y recomendamos que a esta cuenta solo se le conceda el acceso con privilegios mínimos. Para obtener más información al respecto, consulte [Conceder privilegios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) en la documentación de IAM.
+ El archivo `devops-cdk-cloudcustodian.zip` (adjunto), descargado en su equipo local.
+ Familiaridad con Python.
+ Las herramientas necesarias (Node.js, AWS Cloud Development Kit (AWS CDK) y Git), instaladas y configuradas. Puede usar el archivo `install-prerequisites.sh` incluido en el archivo `devops-cdk-cloudcustodian.zip` para** **instalar estas herramientas.** **Asegúrese de ejecutar este archivo con privilegios de administrador. 

**Limitaciones**
+ Si bien este patrón se puede utilizar en un entorno de producción, asegúrese de que todos los roles y las políticas de IAM cumplan con los requisitos y las políticas de su organización. 

**Versiones de paquetes**
+ Cloud Custodian, versión 0.9 o posterior
+ TypeScript versión 3.9.7 o posterior
+ Node.js versión 14.15.4 o posterior
+ `npm` versión 7.6.1 o posterior
+ CDK de AWS, versión 1.96.0 o posterior

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

![\[AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/169a7bde-789e-4ebd-b4ca-80eb28ac9927/images/8ec0b6b4-d4b0-42e5-833d-24d1e6098fd9.png)


 

En el diagrama, se muestra el siguiente flujo de trabajo:

1. Las políticas de Cloud Custodian se envían a un CodeCommit repositorio de AWS en la cuenta de seguridad. Una regla de Amazon CloudWatch Events inicia automáticamente la CodePipeline canalización de AWS.

1. La canalización obtiene el código más reciente CodeCommit y lo envía a la parte de integración continua de la canalización de integración continua y entrega continua (CI/CD) gestionada por AWS. CodeBuild

1. CodeBuild realiza todas las DevSecOps acciones, incluida la validación de la sintaxis de las políticas de Cloud Custodian, y ejecuta estas políticas en `--dryrun` modo automático para comprobar qué recursos están identificados.

1. Si no hay errores, la siguiente tarea avisa al administrador para que revise los cambios y apruebe la implementación en las cuentas de los miembros.

**Pila de tecnología**
+ AWS CDK
+ CodeBuild
+ CodeCommit
+ CodePipeline
+ IAM
+ Cloud Custodian 

**Automatizar y escalar**

El módulo AWS CDK Pipelines proporciona una CI/CD canalización que se utiliza CodePipeline para organizar la creación y las pruebas del código fuente CodeBuild, además de la implementación de los recursos de AWS con las pilas de AWS. CloudFormation Puede usar este patrón para todas las cuentas de miembros y regiones de su organización. También puede ampliar la pila `Roles creation` para implementar otros roles de IAM en sus cuentas de miembros. 

## Tools (Herramientas)
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-tools"></a>
+ El [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) es un marco de desarrollo de software para definir la infraestructura de nube en el código y aprovisionarla a través de AWS. CloudFormation
+ La [interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su shell de línea de comandos.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) es un servicio de compilación en la nube totalmente gestionado.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) es un servicio de control de versiones que puede utilizar para almacenar y gestionar activos de forma privada.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) es un servicio de entrega continua que puede utilizar para modelar, visualizar y automatizar los pasos necesarios para lanzar el software.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) es un servicio web que le ayuda a controlar de forma segura el acceso a los recursos de AWS.
+ [Cloud Custodian](https://cloudcustodian.io/) es una herramienta que unifica las decenas de herramientas y scripts que la mayoría de las organizaciones utilizan para administrar sus cuentas de nube pública en una sola herramienta de código abierto.
+ [Node.js](https://nodejs.org/en/) es un JavaScript motor de ejecución basado en el JavaScript motor V8 de Google Chrome.

**Código**

Para obtener una lista detallada de los módulos, las funciones de la cuenta, los archivos y los comandos de implementación que se utilizan en este patrón, consulte el archivo `README` en el archivo `devops-cdk-cloudcustodian.zip` (adjunto).

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

### Configure la canalización con AWS CDK
<a name="set-up-the-pipeline-with-aws-cdk"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configura el CodeCommit repositorio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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/es_es/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 obtener más información al respecto, consulte [Creación de un CodeCommit repositorio](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) en la CodeCommit documentación de AWS. | Desarrollador | 
| Instalar las herramientas necesarias. | Utilice el archivo `install-prerequisites.sh` para instalar todas las herramientas necesarias en Amazon Linux. Esto no incluye la AWS CLI porque viene preinstalada.Para obtener más información al respecto, consulte la sección [Requisitos previos](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) de [Introducción a AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) en la documentación de AWS CDK. | Desarrollador | 
| Instalar los paquetes de AWS CDK obligatorios. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)AWD CDK requiere los siguientes paquetes y se incluyen en el archivo `requirements.txt`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Desarrollador | 

### Configuración de su entorno.
<a name="configure-your-environment"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice las variables requeridas. | Abra el `vars.py` archivo en la carpeta raíz del CodeCommit repositorio y actualice las siguientes variables:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Desarrollador | 
| Actualice el archivo account.yml con la información de la cuenta del miembro. | Para ejecutar la herramienta [Cloud Custodian de c7n-org](https://cloudcustodian.io/docs/tools/c7n-org.html) en varias cuentas, debe colocar el archivo de configuración `accounts.yml` en la raíz del repositorio. A continuación, se muestra un ejemplo de archivo de configuración de 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> | Desarrollador | 

### Arrancar las cuentas de AWS
<a name="bootstrap-the-aws-accounts"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Arranque la cuenta de seguridad. | Arranque `deploy_account` con la aplicación `cloudcustodian_stack` ejecutando el siguiente comando:<pre>cdk bootstrap -a 'python3 <br />cloudcustodian/cloudcustodian_stack.py</pre> | Desarrollador | 
| Opción 1: arrancar automáticamente las cuentas de los miembros. | Si la variable `cdk_bootstrap_member_accounts` está establecida en `True` en el archivo `vars.py`, la canalización arranca automáticamente las cuentas especificadas en la variable `member_accounts`.Si es necesario, puede actualizar `*cdk_bootstrap_role*` con un rol de IAM que pueda asumir desde la cuenta de seguridad y que tenga los permisos necesarios para arrancar la AWS CDK.La canalización arranca automáticamente las cuentas nuevas que se agreguen a la variable `member_accounts ` para poder implementar los roles necesarios. | Desarrollador | 
| Opción 2: Inicie manualmente el proceso de arranque de las cuentas de los miembros.  | Aunque no se recomienda utilizar este enfoque, puede establecer el valor de `cdk_bootstrap_member_accounts` y `False`, y realizar este paso manualmente ejecutando el siguiente 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>Asegúrese de actualizar los valores `{security_account_id}` y `{role_name}` con el nombre de un rol de IAM que pueda asumir desde la cuenta de seguridad y que tenga los permisos necesarios para iniciar el proceso de arranque de AWS CDK.También puede utilizar otros enfoques para impulsar las cuentas de los miembros, por ejemplo, con AWS CloudFormation. Para obtener más información al respecto, consulte [Proceso de arranque](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) en la documentación de AWS CDK. | Desarrollador | 

### Implemente la pila de AWD CDK.
<a name="deploy-the-aws-cdk-stacks"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree los roles de IAM en las cuentas de los miembros. | Ejecute el siguiente comando para implementar la pila `member_account_roles_stack` y crear los roles de IAM en las cuentas de miembros:<pre>cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never</pre> | Desarrollador | 
| Implemente la pila de canalizaciones de Cloud Custodian. | Ejecute el siguiente comando para crear la canalización `cloudcustodian_stack.py` de Cloud Custodian que se implementa en la cuenta de seguridad:<pre>cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'</pre> | Desarrollador | 

## 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>
+ [Introducción a los AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)

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

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/169a7bde-789e-4ebd-b4ca-80eb28ac9927/attachments/attachment.zip)