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 los controles de la Torre de Control de AWS mediante AWS CDK y AWS CloudFormation
Creado por Iker Reina Fuente (AWS) e Ivan Girardi (AWS)
Entorno: producción | Tecnologías: seguridad, identidad y cumplimiento; infraestructura CloudNative; gestión y gobierno | |
Servicios de AWS: AWS CloudFormation; Torre de Control de AWS; AWS Organizations; AWS CDK |
Resumen
Este patrón describe cómo usar AWS CloudFormation y el AWS Cloud Development Kit (AWS CDK) para implementar y administrar controles preventivos, detectivescos y proactivos de la Torre de Control de AWS como infraestructura como código (IaC). Un control (también conocido como barrera de protección) es una regla de alto nivel que proporciona gobernanza continua para su entorno general de AWS Control Tower. Por ejemplo, puede usar controles para exigir registrarse en sus cuentas de AWS y, a continuación, configurar notificaciones automáticas si se producen eventos específicos relacionados con la seguridad.
AWS Control Tower ayuda a implementar controles preventivos, de detección y proactivos que regulen sus recursos de AWS y supervisen el cumplimiento en varias 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.
Los controles de AWS Control Tower se aplican a toda una unidad organizativa (OU), y el control afecta a todas las cuentas de AWS 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 los controles de AWS Control Tower ayuda a establecer una base de seguridad sólida para su AWS landing zone. Al usar este patrón para implementar los controles como IaC o AWS CDK, puede estandarizar los controles en su landing zone CloudFormation e implementarlos y administrarlos de manera más eficiente. Esta solución utiliza cdk_nag
Para implementar los controles de la Torre de Control de AWS como iAC, también puede usar HashiCorp Terraform en lugar de AWS CDK. Para obtener más información, consulte Implementación y administración de los controles de AWS Control Tower mediante Terraform.
Público objetivo
Este patrón se recomienda para los usuarios que tengan experiencia con AWS Control Tower CloudFormation, AWS CDK y AWS Organizations.
Requisitos previos y limitaciones
Requisitos previos
Cuentas de AWS activas administradas como una organización en AWS Organizations y en una zona de aterrizaje de AWS Control Tower. Para obtener instrucciones, consulte Crear una estructura de cuentas
(AWS Well-Architected Labs). Interfaz de la línea de comandos de AWS (AWS CLI) instalada y configurada.
Administrador de paquetes de nodos (npm), instalado y configurado
para AWS CDK. Requisitos previos para AWS CDK.
Permisos para asumir un rol existente de AWS Identity and Access Management (IAM) en una cuenta de implementación.
Permisos para asumir un rol de IAM en la cuenta de administración de la organización que se pueden utilizar para iniciar AWS CDK. El rol debe tener permisos para modificar e implementar CloudFormation los recursos. Para obtener más información, consulte Proceso de arranque en la documentación de 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 en la documentación de IAM.
Aplique el control basado en la política de control de servicio (SCP) con el identificador CT.CLOUDFORMATION.PR.1. Este SCP debe estar activado para implementar controles proactivos. Para obtener instrucciones, consulte No permitir la administración de tipos de recursos, módulos y enlaces en el CloudFormation registro de AWS.
Limitaciones
Este patrón proporciona instrucciones para implementar esta solución en todas las 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.
Versiones de producto
Python, versión 3.9 o posterior
npm versión 8.9.0 o posterior
Arquitectura
Arquitectura de destino
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 la arquitectura de los controles implementados en todas las cuentas de AWS de la unidad organizativa](images/pattern-img/7d0d5e37-58ac-4621-b6b0-cb8c1c767ab0/images/787b7ca0-9d29-4294-a407-6019e38f08c7.png)
Los controles de AWS Control Tower se clasifican según su comportamiento y sus directrices.
Existen tres tipos principales de comportamientos de control:
Los controles preventivos están diseñados para evitar que se produzcan acciones. Se implementan con políticas de control de servicio (SCP) en AWS Organizations. El estado de una medida de seguridad preventiva es uno de los siguientes: aplicado o no habilitado. Las medidas de seguridad preventivas se admiten en todas las regiones de AWS.
Los controles de Detective están diseñados para detectar eventos específicos cuando se producen y registrar la acción CloudTrail. Se implementan con las reglas AWS Config. El estado de una medida de seguridad de detección es uno de los siguientes: limpio, infraccióno no habilitado. Los controles de detección solo se aplican en las regiones de AWS compatibles con AWS Control Tower.
Los controles proactivos analizan los recursos que AWS aprovisionaría 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. Se implementan con los CloudFormation ganchos de AWS. El estado de un control proactivo es PASS, FAIL o SKIP.
Las directrices de los controles se refieren a la práctica recomendada relativa a cómo aplicar cada control a las unidades organizativas. AWS Control Tower ofrece tres categorías de directrices: obligatorias, altamente recomendadas y opcionales. La directriz de un control es independiente de su comportamiento. Para obtener más información, consulte Directrices y comportamiento de control.
Herramientas
Servicios de AWS
AWS Cloud Development Kit (AWS CDK) es un marco de desarrollo de software que le ayuda a definir y aprovisionar la infraestructura de la nube de AWS en código. El kit de herramientas de AWS CDK es la herramienta principal para interactuar con la aplicación de AWS CDK.
AWS le CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en todas las cuentas y regiones de AWS.
AWS Config proporciona una visión detallada de los recursos de su 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 le ayuda a configurar y regular un entorno de cuentas múltiples de AWS siguiendo las prácticas recomendadas prescriptivas.
AWS Organizations es un servicio de administración de cuentas que le permite agrupar varias cuentas de AWS en una organización que usted crea y administra de manera centralizada.
Otras herramientas
cdk_nag
es una herramienta de código abierto que utiliza una combinación de paquetes de reglas para comprobar si las aplicaciones del AWS Cloud Development Kit (AWS CDK) cumplen las prácticas recomendadas. 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
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 GitHub Implementar controles de la Torre de Control de AWS mediante AWS CDK
Prácticas recomendadas
Siga el principio del privilegio mínimo (documentación de IAM). Los ejemplos de política de IAM y de política de confianza proporcionados en este patrón incluyen los permisos mínimos necesarios, y las pilas de AWS CDK creadas en la cuenta de administración están restringidas por estos permisos.
Siga las Prácticas recomendadas para los administradores de AWS Control Tower (documentación de AWS Control Tower).
Siga las Prácticas recomendadas para desarrollar e implementar una infraestructura de nube con AWS CDK (documentación de AWS CDK).
Al iniciar la AWS CDK, personalice la plantilla de arranque para que defina las políticas y las cuentas de confianza que deben 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.
Utilice herramientas de análisis de código, como 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.
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Crear el rol de IAM en la cuenta de administración. |
| DevOps ingeniero, AWS general |
Arrancar el AWS CDK. |
| DevOps ingeniero, AWS general, Python |
Clonar el repositorio. | En un shell de bash, ingrese el siguiente comando: Esto clona los controles de la Torre de Control de AWS mediante el repositorio CDK
| DevOps ingeniero, AWS general |
Editar el archivo de configuración de AWS CDK. |
|
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Asumir el rol de IAM en la cuenta de implementación. | En la cuenta de implementación, asuma el rol de IAM que tiene permisos para implementar las pilas de AWS CDK en la cuenta de administración. Para obtener más información sobre cómo asumir un rol de IAM en la AWS CLI, consulte Uso de un rol de IAM en la AWS CLI. | DevOps ingeniero, AWS general |
Activar el entorno. | Si utiliza Linux o MacOS:
Si utiliza Windows:
| 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.
| DevOps ingeniero, AWS general, Python |
Implemente la pila. | Introduzca los siguientes comandos para sintetizar e implementar la CloudFormation pila.
| DevOps ingeniero, AWS general, Python |
Recursos relacionados
Documentación de AWS
Acerca de los controles (documentación de AWS Control Tower)
Biblioteca de controles (documentación de AWS Control Tower)
Comandos del kit de herramientas de AWS CDK (documentación de AWS CDK)
Implementación y administración de los controles de AWS Control Tower mediante Terraform (Recomendaciones de AWS)
Otros recursos
Información adicional
Ejemplo de archivo constants.py
El siguiente es un ejemplo de un archivo constants.py.
ACCOUNT_ID = 111122223333 AWS_CONTROL_TOWER_REGION = us-east-2 ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role" GUARDRAILS_CONFIGURATION = [ { "Enable-Control": { "AWS-GR_ENCRYPTED_VOLUMES", ... }, "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...], }, { "Enable-Control": { "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 los controles de AWS Control Tower al implementar pilas de AWS CDK 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”: {} } ] }