Implemente y gestione AWS Control Tower controles mediante Terraform - Recomendaciones de AWS

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 controles mediante Terraform

Creada por Iker Reina Fuente (AWS) e Ivan Girardi () AWS

Resumen

Este patrón describe cómo usar AWS Control Tower los controles, HashiCorp Terraform y la infraestructura como código (IaC) para implementar y administrar controles de seguridad preventivos, de detección y proactivos. Un control (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) 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 usar este patrón para implementar los controles como IaC a través de Terraform, puede estandarizar los controles en su zona de aterrizaje e implementarlos y administrarlos de manera más eficiente.

Para implementar AWS Control Tower controles como iAC, también puedes usarlos AWS Cloud Development Kit (AWS CDK) en lugar de Terraform. Para obtener más información, consulte Implementar y administrar AWS Control Tower controles mediante AWS CDK y. AWS CloudFormation

Destinatarios previstos

Este patrón se recomienda para los usuarios que tengan experiencia con AWS Control Tower Terraform y AWS Organizations.

Requisitos previos y limitaciones

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 en la AWS Control Tower documentación.

  • AWS Command Line Interface (AWS CLI), instalado y configurado.

  • Un rol AWS Identity and Access Management (IAM) en la cuenta de administración que tiene permisos para implementar este patrón. Para obtener más información sobre los permisos necesarios y un ejemplo de política, consulte Permisos con privilegios mínimos para el IAM rol en la sección Información adicional de este patrón.

  • Permisos para asumir el IAM rol en la cuenta de administración.

  • Aplique el control basado en la política de control de servicios (SCP) con el identificador CT. CLOUDFORMATION.PR.1. Esto SCP debe activarse para implementar controles proactivos. Para obtener instrucciones, consulte No permitir la administración de tipos de recursos, módulos y enlaces dentro del AWS CloudFormation registro.

  • TerraformCLI, instalado (documentación de Terraform).

  • Terraform AWS Provider, configurado (documentación de Terraform).

  • Backend de Terraform, configurado (documentación de Terraform).

Limitaciones

  • Para AWS Control Tower los controles, este patrón requiere el uso de identificadores globales con el siguiente formato:

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

    Las versiones anteriores de este patrón utilizaban identificadores regionales que ya no son compatibles. Le recomendamos que migre de los identificadores regionales a los identificadores globales. Los identificadores globales le 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> esaws.

Versiones de producto

  • AWS Control Tower versión 3.2 o posterior

  • Terraform versión 1.5 o posterior

  • Terraform AWS Provider versión 4.67 o posterior

Arquitectura

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 desplegados en todas las AWS cuentas de la unidad organizativa.

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) o las políticas de control de recursos (RCPs) 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.

  2. Los controles de Detective están diseñados para detectar eventos específicos cuando ocurren y registrar la acción AWS CloudTrail. Estos se implementan con AWS Config reglas. El estado de una medida de seguridad de detección es uno de los siguientes: limpio, infraccióno no habilitado. Los controles de Detective se aplican solo a los Regiones de AWS compatibles con AWS Control Tower.

  3. 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 mediante AWS CloudFormation ganchos. El estado de un control proactivo es PASSFAIL, o SKIP.

La guía de control es la práctica recomendada sobre cómo aplicar cada control a suOUs. 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.

Herramientas

Servicios de AWS

  • AWS CloudFormationle ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y administrarlos a lo largo de su ciclo de vida en todas Cuentas de AWS las regiones.

  • AWS Configproporciona 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 Towerle ayuda a configurar y administrar un entorno de AWS múltiples cuentas, siguiendo las prácticas recomendadas prescriptivas.

  • AWS Organizationses 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

  • HashiCorp Terraform es una herramienta de código abierto de infraestructura como código (IaC) que le ayuda a usar el código para aprovisionar y administrar la infraestructura y los recursos de la nube.

Repositorio de código

El código de este patrón está disponible en el repositorio de Terraform para GitHub implementar y administrar AWS Control Tower controles.

Prácticas recomendadas

Epics

TareaDescripciónHabilidades requeridas

Clonar el repositorio.

En un shell de bash, ingrese el siguiente comando: Esto clona los AWS Control Tower controles de implementación y administración mediante el repositorio Terraform de GitHub.

git clone https://github.com/aws-samples/aws-control-tower-controls-terraform.git
DevOps ingeniero

Edite el archivo de configuración del backend de Terraform.

  1. En el repositorio clonado, abra el archivo backend.tf.

  2. Edite el archivo para establecer la configuración del backend de Terraform. La configuración que defina en este archivo depende de su entorno. Para obtener más información, consulte la sección Configuración del backend (documentación de Terraform).  

  3. Guarde y cierre el archivo backend.tf.

DevOps ingeniero, Terraform

Edite el archivo de configuración del proveedor de Terraform.

  1. En el repositorio clonado, abra el archivo provider.tf.

  2. Edite el archivo para establecer la configuración del proveedor de Terraform. Para obtener más información, consulte Configuración del proveedor (documentación de Terraform). Establece Región de AWS como la región en la que AWS Control Tower API está disponible.

  3. Guarde y cierre el archivo provider.tf.

DevOps ingeniero, Terraform

Edite el archivo de configuración.

  1. En el repositorio clonado, abra el archivo variables.tfvars.

  2. Abra todos los identificadores globales de la AWS Control Tower documentación.

  3. En la lista JSON con formato, busque el control que desee implementar y, a continuación, copie su identificador global (también conocido como valor {CONTROL_ CATALOG _ OPAQUE _ID}). Por ejemplo, el identificador global del control AWS-GR_ _ AUDIT _ BUCKET es. ENCRYPTION ENABLED k4izcjxhukijhajp6ks5mjxk

  4. En la controls sección, en el control_names parámetro, introduzca el identificador global que ha copiado.

  5. En la sección controls, en el parámetro organizational_unit_ids, introduzca el ID de la unidad organizativa en la que quiere habilitar el control, por ejemplo ou-1111-11111111. Introduzca el ID entre comillas dobles y separe los números múltiples IDs con comas. Para obtener más información sobre cómo recuperar una unidad organizativaIDs, consulte Visualización de los detalles de una unidad organizativa.

  6. Guarde y cierre el archivo variables.tfvars. Para ver un ejemplo de un archivo variables.tfvars actualizado, consulte la sección de información adicional de este patrón.

DevOps ingeniero, generalAWS, Terraform

Asuma el IAM rol en la cuenta de administración.

En la cuenta de administración, asuma el IAM rol que tiene permisos para implementar el archivo de configuración de Terraform. Para obtener más información sobre los permisos necesarios y un ejemplo de política, consulte Permisos con privilegios mínimos para el IAM rol en la sección de información adicional. Para obtener más información sobre cómo asumir un IAM rol en el AWS CLI, consulte Usar un IAM rol en el AWS CLI.

DevOps ingeniero, general AWS

Implementación del archivo de configuración

  1. Ingrese el comando siguiente para inicializar Terraform.

    $ terraform init -upgrade
  2. Introduzca el comando siguiente para obtener una vista previa de los cambios en comparación con el estado actual.

    $ terraform plan -var-file="variables.tfvars"
  3. Revise los cambios de configuración en el plan de Terraform y confirme que desea implementar estos cambios en la organización.

  4. Ingrese el comando siguiente para implementar los recursos.

    $ terraform apply -var-file="variables.tfvars"
DevOps ingeniero, generalAWS, Terraform
TareaDescripciónHabilidades requeridas

Ejecute el comando destroy.

Ingrese el comando siguiente para eliminar los recursos implementados por este patrón.

$ terraform destroy -var-file="variables.tfvars"
DevOps ingeniero, generalAWS, Terraform

Resolución de problemas

ProblemaSolución

Error Error: creating ControlTower Control ValidationException: Guardrail <control ID> is already enabled on organizational unit <OU ID>

El control que intenta activar ya está activado en la unidad organizativa de destino. Este error puede producirse si un usuario activó manualmente el control a través de AWS Management Console, mediante AWS Control Tower o mediante AWS Organizations. Para implementar el archivo de configuración de Terraform, puede usar cualquiera de las siguientes opciones.

Opción 1: actualizar el archivo de estado actual de Terraform

Puede importar el recurso al archivo de estado actual de Terraform. Al volver a ejecutar el comando apply, Terraform omitirá este recurso. Haga lo siguiente para importar el recurso al estado actual de Terraform:

  1. En la cuenta AWS Control Tower de administración, introduce el siguiente comando para recuperar una lista de los nombres de recursos de Amazon (ARNs) paraOUs, donde <root-ID> está la raíz de la organización. Para obtener más información sobre cómo recuperar este ID, consulte Visualización de los detalles de la raíz.

    aws organizations list-organizational-units-for-parent --parent-id <root-ID>
  2. Para cada unidad organizativa devuelta en el paso anterior, introduzca el siguiente comando, donde <OU-ARN> aparece ARN la unidad organizativa.

    aws controltower list-enabled-controls --target-identifier <OU-ARN>
  3. Copie ARNs y realice la importación de Terraform en el módulo requerido para que se incluya en el estado de Terraform. Para obtener instrucciones, consulte Importación (documentación de Terraform).

  4. Repita los pasos de Implementar la configuración en la sección Epics..

Opción 2: deshabilitar el control

Si trabaja en un entorno que no es de producción, puede deshabilitar el control en la consola. Vuelva a habilitarlo repitiendo los pasos de Implementación de la configuración en la sección Epics. Este enfoque no se recomienda para entornos de producción porque hay un período de tiempo en el que el control estará deshabilitado. Si desea utilizar esta opción en un entorno de producción, puede implementar controles temporales, como la aplicación temporal de una SCP entrada. AWS Organizations

Recursos relacionados

AWS documentación

Otros recursos

Información adicional

Ejemplo de archivo variables.tfvars

A continuación se muestra un ejemplo de un archivo variables.tfvars actualizado. Este ejemplo habilita el VOLUMES control AWS-GR_ ENCRYPTED _ (ID global:503uicglhjkokaajywfpt6ros) y el control AWS-GR_ _ _ SUBNET AUTO ASSIGN PUBLIC _IP_ DISABLED (ID global:). 50z1ot237wl8u1lv5ufau6qqo Para obtener una lista de los identificadores globalesIDs, consulte Todos los identificadores globales en la documentación. AWS Control Tower

controls = [ { control_names = [ "503uicglhjkokaajywfpt6ros", ... ], organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...], }, { control_names = [ "50z1ot237wl8u1lv5ufau6qqo", ... ], organizational_unit_ids = ["ou-1111-11111111"...], }, ]

Permisos con privilegios mínimos para el rol IAM

Este patrón requiere que asuma un IAM rol en la cuenta de administración. La práctica recomendada es asumir un rol con permisos temporales y limitar los permisos según el principio del privilegio mínimo. El siguiente ejemplo de política permite realizar las acciones mínimas necesarias para activar o desactivar AWS Control Tower los controles.

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