

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.

# Implemente y gestione AWS Control Tower los controles mediante el uso AWS CDK y CloudFormation
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation"></a>

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

## Resumen
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-summary"></a>

Este patrón describe cómo usar, implementar AWS CloudFormation y AWS Cloud Development Kit (AWS CDK) administrar los AWS Control Tower controles preventivos, de detección y proactivos en forma de infraestructura como código (IaC). Un [control](https://docs.aws.amazon.com/controltower/latest/controlreference/controls.html) (también conocido como barrera de *protección*) es una regla de alto nivel que proporciona un control continuo del entorno general. AWS Control Tower Por ejemplo, puede usar controles para exigir el registro Cuentas de AWS y, a continuación, configurar las notificaciones automáticas si se producen eventos específicos relacionados con la seguridad.

AWS Control Tower le ayuda a implementar controles preventivos, de detección y proactivos que rigen sus AWS recursos y supervisan el cumplimiento en varios de ellos. Cuentas de AWS Cada control aplica una única regla. En este patrón, debe utilizar la plantilla de IaC proporcionada para especificar qué controles desea implementar en su entorno.

AWS Control Tower los controles se aplican a toda una [unidad organizativa (OU)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organizationalunit) y el control afecta a todos los Cuenta de AWS miembros de la OU. Por lo tanto, cuando los usuarios realicen cualquier acción en cualquier cuenta de su zona de aterrizaje, la acción queda sujeta a los controles que rigen la OU.

La implementación de AWS Control Tower controles ayuda a establecer una base de seguridad sólida para tu AWS landing zone. Al utilizar este patrón para desplegar los controles a lo largo CloudFormation y ancho de la IAC AWS CDK, puedes estandarizar los controles en tu landing zone y desplegarlos y gestionarlos de forma más eficiente. Esta solución usa [cdk\_nag](https://github.com/cdklabs/cdk-nag#readme) para escanear la aplicación durante la implementación. AWS CDK Esta herramienta comprueba si la aplicación cumple con las mejores prácticas. AWS 

Para implementar AWS Control Tower controles como iAC, también puedes usar HashiCorp Terraform en lugar de. AWS CDK Para obtener más información, consulte [Implementar y administrar AWS Control Tower controles mediante Terraform](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html).

**Destinatarios previstos**

Este patrón se recomienda para los usuarios que tienen experiencia con AWS Control Tower, CloudFormation AWS CDK, y AWS Organizations.

## Requisitos previos y limitaciones
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-prereqs"></a>

**Requisitos previos **
+ Activa Cuentas de AWS gestionada como una organización en AWS Organizations y una AWS Control Tower landing zone. Para obtener instrucciones, consulte [Primeros pasos](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html) en la AWS Control Tower documentación.
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) y [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).
+ Administrador de paquetes de nodos (npm), [instalado y configurado](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) para AWS CDK.
+ [Requisitos previos](https://docs.aws.amazon.com/cdk/v2/guide/work-with.html#work-with-prerequisites) para. AWS CDK
+ Permisos para asumir un rol existente AWS Identity and Access Management (IAM) en una cuenta de implementación.
+ Permisos para asumir una función de IAM en la cuenta de administración de la organización que se pueden utilizar para arrancar. AWS CDK El rol debe tener permisos para modificar e implementar CloudFormation los recursos. Para obtener más información, consulte [Bootstrapping](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-howto) en la documentación. AWS CDK 
+ Permisos para crear roles y políticas de IAM en la cuenta de administración de la organización. Para obtener más información, consulte [Permisos necesarios para acceder a los recursos de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_permissions-required.html) en la documentación de IAM.

**Limitaciones**
+ Este patrón proporciona instrucciones para implementar esta solución en todas las cuentas Cuentas de AWS, desde una cuenta de implementación hasta la cuenta de administración de la organización. Para realizar pruebas, puede implementar esta solución directamente en la cuenta de administración, pero las instrucciones para esta configuración no se proporcionan de forma explícita.
+ En el caso de AWS Control Tower los controles, este patrón requiere el uso de [identificadores globales](https://docs.aws.amazon.com/controltower/latest/controlreference/all-global-identifiers.html) con el siguiente formato:

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

  Las versiones anteriores de este patrón utilizaban [identificadores regionales](https://docs.aws.amazon.com/controltower/latest/controlreference/control-metadata-tables.html) que ya no son compatibles. Se recomienda que migre de los identificadores regionales a los globales. Los identificadores globales lo ayudan a administrar los controles y a ampliar la cantidad de controles que puede usar.
**nota**  
En la mayoría de los casos, el valor de `<PARTITION>` es `aws`.

**Versiones de producto**
+ AWS Control Tower versión 3.2 o posterior
+ Python, versión 3.9 o posterior
+ npm versión 8.9.0 o posterior

## Arquitectura
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-architecture"></a>

En esta sección se ofrece información general sobre esta solución y la arquitectura establecida en el código de ejemplo. El siguiente diagrama muestra los controles implementados en las distintas cuentas de la OU.

![Diagrama de arquitectura de los controles implementados en todas las cuentas de AWS de la unidad organizativa.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/7d0d5e37-58ac-4621-b6b0-cb8c1c767ab0/images/47264166-3294-4a53-b0a4-5911086d636f.png)


AWS Control Tower los controles se clasifican según su *comportamiento* y su *orientación*.

Existen tres tipos principales de comportamientos de control:

1. Los *controles preventivos* están diseñados para evitar que se produzcan acciones. Se implementan con [las políticas de control de servicios (SCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) o [las políticas de control de recursos (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) en AWS Organizations. El estado de una medida de seguridad preventiva es uno de los siguientes: **aplicado** o **no habilitado**. Los controles preventivos están respaldados en todos Regiones de AWS.

1. Los *controles de detección* están diseñados para detectar eventos específicos cuando se producen y registrar la acción en AWS CloudTrail. Se implementan con [reglas de AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html). El estado de una medida de seguridad de detección es uno de los siguientes: **limpio**, **infracción**o **no habilitado**. Los controles de Detective se aplican solo a los Regiones de AWS compatibles con AWS Control Tower.

1. *Los controles proactivos* analizan los recursos que aprovisionaría AWS CloudFormation y comprueban si cumplen con las políticas y los objetivos de su empresa. Los recursos que no sean conformes no se aprovisionarán. Estos se implementan con [enlaces de AWS CloudFormation](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/hooks.html). El estado de un control proactivo es **PASS**, **FAIL** o **SKIP**.

La *guía* de control se refiere a la práctica recomendada sobre cómo aplicar cada control a su OUs caso. AWS Control Tower proporciona tres categorías de orientación: *obligatoria*, *muy recomendable* y *optativa.* La directriz de un control es independiente de su comportamiento. Para obtener más información, consulte [Directrices y comportamiento de control](https://docs.aws.amazon.com/controltower/latest/userguide/controls.html#control-behavior).

## Tools (Herramientas)
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-tools"></a>

**Servicios de AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)es un marco de desarrollo de software que le ayuda a definir y aprovisionar la Nube de AWS infraestructura en código. El [AWS CDK kit de herramientas](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) es la herramienta principal para interactuar con la AWS CDK aplicación.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida en todo el mundo Cuentas de AWS . Regiones de AWS
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)proporciona una vista detallada de sus recursos Cuenta de AWS y de cómo están configurados. Le ayuda a identificar cómo se relacionan los recursos entre sí y cómo han cambiado sus configuraciones a lo largo del tiempo.
+ [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html)le ayuda a configurar y administrar un entorno de AWS múltiples cuentas, siguiendo las prácticas recomendadas prescriptivas.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)es un servicio de administración de cuentas que le ayuda a consolidar varias cuentas Cuentas de AWS en una organización que puede crear y administrar de forma centralizada.

**Otras herramientas**
+ [cdk\_nag](https://github.com/cdklabs/cdk-nag#readme) es una herramienta de código abierto que utiliza una combinación de paquetes de reglas para comprobar si AWS CDK las solicitudes cumplen las mejores prácticas.
+ [npm](https://docs.npmjs.com/about-npm/) es un registro de software que se ejecuta en un entorno Node.js y se utiliza para compartir o tomar prestados paquetes y administrar la implementación de paquetes privados.
+ [Python](https://www.python.org/) es un lenguaje de programación informático de uso general.

**Repositorio de código**

[El código de este patrón está disponible en el repositorio Deploy controls using. GitHub AWS Control TowerAWS CDK](https://github.com/aws-samples/aws-control-tower-controls-cdk) Se usa el archivo **cdk.json** para interactuar con la AWS CDK aplicación y se usa el archivo **package.json** para instalar los paquetes npm.

## Prácticas recomendadas
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-best-practices"></a>
+ Siga el [principio del privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) (documentación de IAM). Los ejemplos de política de IAM y política de confianza que se proporcionan en este patrón incluyen los permisos mínimos necesarios, y las AWS CDK pilas creadas en la cuenta de gestión están restringidas por estos permisos.
+ Siga las [prácticas recomendadas para AWS Control Tower los administradores](https://docs.aws.amazon.com/controltower/latest/userguide/best-practices.html) (AWS Control Tower documentación).
+ Siga las [prácticas recomendadas para desarrollar e implementar una infraestructura de nube con la AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) (AWS CDK documentación).
+ Al iniciarlo AWS CDK, personalice la plantilla de arranque para definir las políticas y las cuentas de confianza que deberían poder leer y escribir en cualquier recurso de la cuenta de administración. Para obtener más información, consulte [Personalización del proceso de arranque](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-customizing).
+ Utilice herramientas de análisis de código, como [cfn\_nag](https://github.com/stelligent/cfn_nag), para escanear las plantillas generadas. CloudFormation La herramienta cfn-nag busca patrones en las CloudFormation plantillas que puedan indicar que la infraestructura no es segura. [También puedes usar cdk-nag para comprobar tus CloudFormation plantillas mediante el módulo cloudformation-include.](https://docs.aws.amazon.com/cdk/v2/guide/use_cfn_template.html)

## Epics
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-epics"></a>

### Preparación para habilitar los controles
<a name="prepare-to-enable-the-controls"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear el rol de IAM en la cuenta de administración. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) | DevOps ingeniero, AWS general | 
| Bootstrap. AWS CDK | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) | DevOps ingeniero, AWS general, Python | 
| Clonar el repositorio. | En un intérprete de comandos de bash, ingrese el siguiente comando. Esto clona los [AWS Control Tower controles de Deploy utilizando](https://github.com/aws-samples/aws-control-tower-controls-cdk) el AWS CDK repositorio de GitHub.<pre>git clone https://github.com/aws-samples/aws-control-tower-controls-cdk.git</pre> | DevOps ingeniero, AWS general | 
| Edite el archivo AWS CDK de configuración. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) | DevOps ingeniero, AWS general | 

### Página de administración de cuentas en la consola de
<a name="enable-controls-in-the-management-account"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Asumir el rol de IAM en la cuenta de implementación. | En la cuenta de implementación, asuma la función de IAM que tiene permisos para implementar las AWS CDK pilas en la cuenta de administración. Para obtener más información sobre cómo asumir una función de IAM en la AWS CLI, consulte [Usar una función de IAM](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html) en la. AWS CLI | DevOps ingeniero, AWS general | 
| Activar el entorno. | Si utiliza Linux o MacOS:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html)<br />Si utiliza Windows:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation.html) | DevOps ingeniero, AWS general | 
| Instalar las dependencias. | Una vez activado el entorno virtual, introduzca el siguiente comando para ejecutar el script **install\_deps.sh**. Este script instala las dependencias requeridas.<pre>$ ./scripts/install_deps.sh</pre> | DevOps ingeniero, AWS general, Python | 
| Implemente la pila. | Introduzca los siguientes comandos para sintetizar e implementar la CloudFormation pila.<pre>$ npx cdk synth<br />$ npx cdk deploy</pre> | DevOps ingeniero, AWS general, Python | 

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

**AWS documentación**
+ [Acerca de los controles](https://docs.aws.amazon.com/controltower/latest/controlreference/controls.html) (AWS Control Tower documentación)
+ [Biblioteca de controles](https://docs.aws.amazon.com/controltower/latest/controlreference/controls-reference.html) (AWS Control Tower documentación)
+ [AWS CDK Comandos del kit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html#cli-commands) de herramientas (AWS CDK documentación)
+ [Implemente y gestione AWS Control Tower los controles mediante Terraform (guía](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-and-manage-aws-control-tower-controls-by-using-terraform.html)AWS prescriptiva)

**Otros recursos**
+ [Python](https://www.python.org/)

## Información adicional
<a name="deploy-and-manage-aws-control-tower-controls-by-using-aws-cdk-and-aws-cloudformation-additional"></a>

**Ejemplo de archivo constants.py**

El siguiente es un ejemplo de un archivo **constants.py**. Este ejemplo habilita el control **AWS-GR\_DISALLOW\_CROSS\_REGION\_NETWORKING** (ID global: `dvuaav61i5cnfazfelmvn9m6k`) y el control **AWS-GR\_SUBNET\_AUTO\_ASSIGN\_PUBLIC\_IP\_DISABLED** (ID global: `50z1ot237wl8u1lv5ufau6qqo`). Para obtener una lista de los identificadores globales IDs, consulte [Todos los identificadores globales](https://docs.aws.amazon.com/controltower/latest/controlreference/all-global-identifiers.html) en la documentación. AWS Control Tower 

```
ACCOUNT_ID = 111122223333
AWS_CONTROL_TOWER_REGION = us-east-2
ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role"
GUARDRAILS_CONFIGURATION = [
    {
        "Enable-Control": {
            "dvuaav61i5cnfazfelmvn9m6k": {  # AWS-GR_DISALLOW_CROSS_REGION_NETWORKING
                "Parameters": {
                    "ExemptedPrincipalArns": ["arn:aws:iam::111122223333:role/RoleName"]
                },
                "Tags": [{"key": "Environment", "value": "Production"}]
            },
            ...
        },
        "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...],
    },
    {
        "Enable-Control": {
            "50z1ot237wl8u1lv5ufau6qqo",  # AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED
            ...
        },
        "OrganizationalUnitIds": ["ou-2222-22222222"...],
    },
]
```

**Política de IAM**

El siguiente ejemplo de política permite realizar las acciones mínimas necesarias para habilitar o deshabilitar AWS Control Tower los controles al implementar AWS CDK pilas desde una cuenta de implementación a la cuenta de administración.

```
{
    "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:DescribeOrganizationalUnit",
                "organizations:DetachPolicy",
                "organizations:ListAccounts",
                "organizations:ListAWSServiceAccessForOrganization",
                "organizations:ListChildren",
                "organizations:ListOrganizationalUnitsForParent",
                "organizations:ListParents",
                "organizations:ListPoliciesForTarget",
                "organizations:ListRoots",
                "organizations:UpdatePolicy",
                "ssm:GetParameters"
            ],
            "Resource": "*"
        }
    ]
}
```

**Política de confianza**

La siguiente política de confianza personalizada permite que un rol de IAM específico en la cuenta de implementación asuma el rol de IAM en la cuenta de administración. Sustituya lo siguiente:
+ `<DEPLOYMENT-ACCOUNT-ID>` es el ID de la cuenta de implementación
+ `<DEPLOYMENT-ROLE-NAME>` es el nombre del rol en la cuenta de implementación que tiene permitido asumir el rol en la cuenta de administración

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME>"
            },
            "Action": "sts:AssumeRole",
            "Condition": {}
        }
    ]
}
```