Implementación del Generador de cuentas para Terraform (AFT) mediante una canalización de arranque
Vinicius Elias y Edgar Costa Filho, Amazon Web Services
Resumen
Aviso: AWS CodeCommit ya no está disponible para los nuevos clientes. Los clientes existentes de AWS CodeCommit pueden seguir utilizando el servicio con normalidad. Más información
Este patrón proporciona un método sencillo y seguro para implementar el Generador de cuentas de AWS Control Tower para Terraform (AFT) desde la cuenta de administración de AWS Organizations. El núcleo de la solución es una plantilla de CloudFormation que automatiza la configuración de AFT mediante la creación de una canalización de Terraform, que está estructurada para adaptarse fácilmente a la implementación inicial o a las actualizaciones posteriores.
La seguridad y la integridad de los datos son las principales prioridades de AWS, por lo que el archivo de estado de Terraform, que es un componente fundamental que hace un seguimiento del estado de la infraestructura y las configuraciones administradas, se almacena de forma segura en un bucket de Amazon Simple Storage Service (Amazon S3). Este bucket está configurado con varias medidas de seguridad, como el cifrado del servidor y políticas para bloquear el acceso público, a fin de garantizar que el estado de Terraform esté protegido contra el acceso no autorizado y las filtraciones de datos.
La cuenta de administración orquesta y supervisa todo el entorno, por lo que es un recurso fundamental en AWS Control Tower. Este patrón sigue las prácticas recomendadas de AWS y garantiza que el proceso de implementación no solo sea eficiente, sino que también se ajuste a los estándares de seguridad y gobernanza, a fin de ofrecer una forma integral, segura y eficiente de implementar AFT en su entorno de AWS.
Para obtener más información sobre AFT, consulte la documentación de AWS Control Tower.
Requisitos previos y limitaciones
Requisitos previos
Un entorno básico de AWS de múltiples cuentas con las siguientes cuentas como mínimo: cuenta de administración, cuenta de archivo de registros, cuenta de auditoría y una cuenta adicional para la administración de AFT.
Un entorno de AWS Control Tower establecido. La cuenta de administración debe estar configurada correctamente, ya que la plantilla de CloudFormation se implementará en ella.
Los permisos necesarios en la cuenta de administración de AWS. Necesitará permisos suficientes para crear y administrar recursos, como buckets de S3, funciones de AWS Lambda, roles de AWS Identity and Access Management (IAM) y proyectos de AWS CodePipeline.
Familiaridad con Terraform. Es importante comprender los conceptos básicos y el flujo de trabajo de Terraform porque la implementación implica generar y administrar las configuraciones de Terraform.
Limitaciones
Tenga en cuenta las cuotas de los recursos de AWS de su cuenta. La implementación puede crear varios recursos y encontrar cuotas de servicio podría impedir el proceso de implementación.
La plantilla está diseñada para versiones específicas de Terraform y Servicios de AWS. La actualización o el cambio de versiones pueden requerir modificaciones en la plantilla.
La plantilla no admite los servicios del sistema de control de versiones (VCS) autoadministrados, como GitHub Enterprise.
Versiones de producto
Versión de Terraform 1.6.6 o posterior
Versión 1.11 o posteriores de AFT
Arquitectura
Pila de tecnología de destino
CloudFormation
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
Amazon EventBridge
IAM
AWS Lambda
Amazon S3
Arquitectura de destino
En el siguiente diagrama se ilustra la implementación descrita en este patrón.

El flujo de trabajo consta de tres tareas principales: creación de los recursos, generación del contenido y ejecución de la canalización.
Creación de los recursos
La plantilla de CloudFormation que se proporciona con este patrón
Una canalización de CodePipeline para implementar AFT
Un bucket de S3 para almacenar el archivo de estado de Terraform asociado a la implementación de AFT
Dos proyectos de CodeBuild para implementar el plan de Terraform y aplicar comandos en diferentes etapas de la canalización
Roles de IAM para los servicios CodeBuild y CodePipeline
Un segundo bucket de S3 para almacenar artefactos de tiempo de ejecución de la canalización
Según el proveedor de VCS que seleccione (CodeCommit o VCS externo), la plantilla crea los siguientes recursos.
Para CodeCommit:
Un repositorio de CodeCommit para almacenar el código de arranque de AFT para Terraform
Una regla de EventBridge para capturar los cambios en el repositorio de CodeCommit en la ramificación
mainOtro rol de IAM para la regla de EventBridge
Para cualquier otro proveedor de VCS externo, como GitHub:
Una conexión de AWS CodeConnections.
Además, cuando selecciona CodeCommit como proveedor de VCS, si establece el parámetro Generate AFT Files en true, la plantilla crea estos recursos adicionales para generar el contenido:
Un bucket de S3 para almacenar el contenido generado y usarlo como origen del repositorio de CodeCommit
Una función de Lambda para procesar los parámetros dados y generar el contenido apropiado
Una función de IAM para ejecutar la función de Lambda
Un recurso personalizado de CloudFormation que ejecute la función de Lambda cuando se implemente la plantilla
Generación del contenido
Para generar los archivos de arranque de AFT y su contenido, la solución utiliza una función de Lambda y un bucket de S3. La función crea una carpeta en el bucket y, a continuación, crea dos archivos dentro de la carpeta: main.tf y backend.tf. La función también procesa los parámetros de CloudFormation proporcionados y rellena estos archivos con código predefinido, sustituyendo los valores de los parámetros correspondientes.
Para ver el código que se usa como plantilla para generar los archivos, consulte el repositorio de GitHub
main.tf
module "aft" { source = "github.com/aws-ia/terraform-aws-control_tower_account_factory?ref=<aft_version>" # Required variables ct_management_account_id = "<ct_management_account_id>" log_archive_account_id = "<log_archive_account_id>" audit_account_id = "<audit_account_id>" aft_management_account_id = "<aft_management_account_id>" ct_home_region = "<ct_home_region>" # Optional variables tf_backend_secondary_region = "<tf_backend_secondary_region>" aft_metrics_reporting = "<false|true>" # AFT Feature flags aft_feature_cloudtrail_data_events = "<false|true>" aft_feature_enterprise_support = "<false|true>" aft_feature_delete_default_vpcs_enabled = "<false|true>" # Terraform variables terraform_version = "<terraform_version>" terraform_distribution = "<terraform_distribution>" # VCS variables (if you have chosen an external VCS) vcs_provider = "<github|githubenterprise|gitlab|gitlabselfmanaged|bitbucket>" account_request_repo_name = "<org-name>/aft-account-request" account_customizations_repo_name = "<org-name>/aft-account-customizations" account_provisioning_customizations_repo_name = "<org-name>/aft-account-provisioning-customizations" global_customizations_repo_name = "<org-name>/aft-global-customizations" }
backend.tf
terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup.tfstate" } }
Durante la creación del repositorio de CodeCommit, si establece el parámetro Generate AFT Files en true, la plantilla utilizará el bucket de S3 con el contenido generado como origen de la ramificación main para rellenar automáticamente el repositorio.
Ejecutando la canalización
Una vez creados los recursos y configurados los archivos de arranque, se ejecuta la canalización. La primera etapa (Origen) busca el código fuente de la ramificación principal del repositorio, y la segunda etapa (Compilación) ejecuta el comando de planificación de Terraform y genera los resultados para su revisión. En la tercera etapa (Aprobación), la canalización espera a que se lleve a cabo una acción manual para aprobar o rechazar la última etapa (Implementación). En la última etapa, la canalización ejecuta el comando apply de Terraform utilizando como entrada el resultado del comando plan de Terraform anterior. Por último, un rol entre cuentas y los permisos de la cuenta de administración se utilizan para crear los recursos de AFT en la cuenta de administración de AFT.
nota
Si selecciona un proveedor de VCS externo, deberá autorizar la conexión con las credenciales de su proveedor de VCS. Para completar la configuración, siga los pasos que se indican en Update a pending connection en la documentación de la consola de herramientas para desarrolladores de AWS.
Herramientas
Servicios de AWS
CloudFormation ayuda a configurar los recursos de AWS, aprovisionarlos de manera rápida y coherente y administrarlos durante todo su ciclo de vida en las regiones y Cuentas de AWS.
AWS CodeBuild es un servicio de compilación completamente administrado que le permite compilar código fuente, poner en marcha pruebas unitarias y producir artefactos listos para implementar.
AWS CodeCommit es un servicio de control de versiones que permite almacenar y administrar repositorios de Git de forma privada sin necesidad de administrar su propio sistema de control de origen.
AWS CodePipeline permite diseñar y configurar rápidamente las diferentes etapas de un proceso de lanzamiento de software y automatizar los pasos necesarios para lanzar los cambios en el software de manera continua.
AWS CodeConnections permite que recursos y servicios de AWS, como CodePipeline, se conecten a repositorios de código externos, como GitHub.
AWS Lambda es un servicio de computación que ejecuta código como respuesta a eventos y administra automáticamente los recursos de computación, lo que proporciona una forma rápida de crear una aplicación moderna y sin servidor para producción.
AWS SDK para Python (Boto3)
es un kit de desarrollo de software que permite integrar su aplicación, biblioteca o script de Python con los Servicios de AWS.
Otras herramientas
Terraform
es una herramienta de infraestructura como código (IaC) que le permite crear, cambiar y versionar la infraestructura de manera segura y eficiente. Esto incluye componentes de bajo nivel, como instancias de computación, almacenamiento y redes, y componentes de alto nivel, como entradas de DNS y característica de SaaS. Python
es un lenguaje de programación potente y fácil de aprender. Cuenta con estructuras de datos eficientes y de alto nivel y proporciona un enfoque simple pero efectivo de la programación orientada a objetos.
Repositorio de código
El código que automatiza este patrón está disponible en el repositorio AFT bootstrap pipeline
Para ver el repositorio de AFT oficial, consulte AWS Control Tower Account Factory for Terraform
Prácticas recomendadas
Al implementar AFT mediante la plantilla de CloudFormation proporcionada, le recomendamos que siga las prácticas recomendadas para garantizar una implementación segura, eficiente y correcta. Las pautas y recomendaciones clave para implementar y operar AFT incluyen lo siguiente:
Revisión exhaustiva de los parámetros: revise detenidamente y comprenda cada parámetro de la plantilla de CloudFormation. La configuración correcta de los parámetros es crucial para la configuración y el funcionamiento correctos de AFT.
Actualizaciones periódicas de las plantillas: mantenga las plantillas actualizadas con las últimas características de AWS y versiones de Terraform. Las actualizaciones periódicas lo ayudarán a aprovechar las nuevas funciones y a mantener la seguridad.
Control de versiones: fije la versión de su módulo de AFT y, si es posible, utilice una implementación de AFT independiente para realizar las pruebas.
Alcance: utilice AFT únicamente para implementar barreras de protección y personalizaciones de infraestructura. No use AFT para implementar la aplicación.
Lint y validación: la canalización de AFT requiere una configuración de Terraform de tipo Lint y que esté validada. Ejecute Lint, valide y pruebe todo antes de enviar la configuración a los repositorios de AFT.
Módulos de Terraform: cree código de Terraform reutilizable como módulos y especifique siempre las versiones de Terraform y del proveedor de AWS para que se adapten a los requisitos de su organización.
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Preparar el entorno de AWS Control Tower. | Instale y configure AWS Control Tower en su entorno de AWS para garantizar la administración y gobernanza centralizadas de sus Cuentas de AWS. Para más información, consulte Getting started with AWS Control Tower en la documentación de AWS Control Tower. | Administrador de la nube |
Iniciar la cuenta de administración de AFT. | Utilice el Generador de cuentas de AWS Control Tower para lanzar una nueva Cuenta de AWS que sirva de cuenta de administración de AFT. Para obtener más información, consulte Provision accounts with AWS Service Catalog Account Factory en la documentación de AWS Control Tower. | Administrador de la nube |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Inicie la plantilla de CloudFormation. | En esta épica, implementa la plantilla de CloudFormation que se proporciona con esta solución para configurar la canalización de arranque de AFT en su cuenta de administración de AWS. La canalización implementa la solución AFT en la cuenta de administración de AFT que configuró en la épica anterior. Paso 1: abrir la consola de CloudFormation
Paso 2: crear una nueva pila
Paso 3: configurar los parámetros de la pila
Paso 4: decidir la generación de archivos
Paso 5: rellenar los detalles de la cuenta de AFT y AWS Control Tower
Paso 6: configurar las opciones de AFT
Paso 7: especificar las versiones
Paso 8: revisar y crear la pila
Paso 9: supervisar la creación de la pila
Paso 10: comprobar la implementación
| Administrador de la nube |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Opción 1: Rellenar el repositorio de arranque de AFT para un VCS externo. | Si configura el proveedor de VCS en un VCS externo (no en CodeCommit), siga estos pasos. (Opcional) Tras implementar la plantilla de CloudFormation, puede rellenar o validar el contenido del repositorio de arranque de AFT recién creado y probar si la canalización se ha ejecutado correctamente. Paso 1: actualizar la conexión
Paso 2: rellenar el repositorio
Paso 2: confirmar y enviar los cambios
| Administrador de la nube |
Opción 2: Rellenar el repositorio de arranque de AFT para CodeCommit. | Si configura el proveedor de VCS en CodeCommit, siga estos pasos. (Opcional) Tras implementar la plantilla de CloudFormation, puede rellenar o validar el contenido del repositorio de arranque de AFT recién creado y probar si la canalización se ha ejecutado correctamente. Si establece el parámetro Paso 1: rellenar el repositorio
Paso 2: confirmar y enviar los cambios
| Administrador de la nube |
Validar la canalización de arranque de AFT. | Paso 1: visualización de la canalización
Paso 2: aprobar los resultados del plan de Terraform
Paso 3: esperar a la implementación
Paso 4: comprobar los recursos creados
| Administrador de la nube |
Solución de problemas
| Problema | Solución |
|---|---|
La función de Lambda personalizada incluida en la plantilla de CloudFormation falla durante la implementación. | Compruebe la función de Lambda en los registros de Amazon CloudWatch para identificar el error. Los registros proporcionan información detallada y pueden ayudar a identificar el problema específico. Confirme que la función de Lambda tiene los permisos necesarios y que las variables del entorno se han configurado correctamente. |
Se producen errores en la creación o administración de los recursos a causa de permisos inadecuados. | Revise los roles de IAM y las políticas asociadas a la función de Lambda, CodeBuild y otros servicios involucrados en la implementación. Confirme que tengan los permisos necesarios. Si tiene problemas con los permisos, ajuste las políticas de IAM para conceder el acceso necesario. |
Está utilizando una versión obsoleta de la plantilla de CloudFormation con versiones más recientes de los Servicios de AWS o de Terraform. | Actualice periódicamente la plantilla de CloudFormation para que sea compatible con las versiones más recientes de AWS y de Terraform. Consulte las notas de la versión o la documentación para ver si hay cambios o requisitos específicos de la versión. |
Alcanza las cuotas del Servicio de AWS durante la implementación. | Antes de implementar la canalización, compruebe las cuotas de Servicio de AWS de recursos como buckets de S3, roles de IAM y funciones de Lambda. Solicite aumentos si fuera necesario. Para obtener más información, consulte Servicio de AWS quotas en el sitio web de AWS. |
Se producen errores debido a parámetros de entrada incorrectos en la plantilla de CloudFormation. | Compruebe todos los parámetros de entrada para ver si hay errores tipográficos o valores incorrectos. Confirme que los identificadores de recursos, como los ID de cuentas y los nombres de las regiones, sean correctos. |
Recursos relacionados
Para implementar este patrón correctamente, revise los siguientes recursos. En estos recursos se proporciona información y orientación adicionales que pueden tener un valor incalculable para configurar y administrar AFT mediante CloudFormation.
AWS Documentación de:
En la Guía del usuario de AWS Control Tower se ofrece información detallada sobre la configuración y la administración de AWS Control Tower.
En la documentación de CloudFormation se proporciona información sobre las plantillas, las pilas y la administración de recursos de CloudFormation.
Políticas de IAM y prácticas recomendadas:
En Prácticas recomendadas de seguridad en IAM se explica cómo ayudar a proteger los recursos de AWS mediante el roles y políticas de IAM.
Terraform en AWS:
En la documentación del Proveedor de AWS para Terraform
se proporciona información completa sobre el uso de Terraform con AWS.
Servicio de AWS Cuotas de:
En Servicio de AWS quotas se proporciona información sobre cómo ver las cuotas de Servicio de AWS y cómo solicitar aumentos.