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.
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
Este patrón proporciona un método sencillo y seguro para implementar AWS Control Tower Account Factory for Terraform (AFT) desde la cuenta de administración de AWS Organizations. El núcleo de la solución es una CloudFormation plantilla 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 AWS, por lo que el archivo de estado de Terraform, que es un componente fundamental que rastrea el estado de la infraestructura y las configuraciones administradas, se almacena de forma segura en un depósito 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 organiza y supervisa todo el entorno, por lo que es un recurso fundamental. AWS Control Tower Este patrón sigue las AWS mejores prácticas y garantiza que el proceso de implementación no solo sea eficiente, sino que también se alinee con los estándares de seguridad y gobernanza, a fin de ofrecer una forma integral, segura y eficiente de implementar la AFT en su entorno. 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 múltiples cuentas con las siguientes cuentas como mínimo: cuenta de administración, cuenta de Log Archive, cuenta de auditoría y una cuenta adicional para la administración de AFT.
Un AWS Control Tower entorno establecido. La cuenta de administración debe estar configurada correctamente, ya que la CloudFormation plantilla se implementará en ella.
Los permisos necesarios en la cuenta AWS de administración. Necesitará permisos suficientes para crear y administrar recursos, como depósitos, AWS Lambda funciones AWS Identity and Access Management (IAM) y AWS CodePipeline proyectos de S3.
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) autogestionado, como Enterprise. GitHub
Versiones de producto
Terraform, versión 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 CloudFormation plantilla que se proporciona con este patrón
Una CodePipeline canalización para implementar la AFT
Un bucket de S3 para almacenar el archivo de estado de Terraform asociado a la implementación de AFT
Dos CodeBuild proyectos para implementar el plan Terraform y aplicar comandos en diferentes etapas del proceso
Funciones y servicios de IAM CodeBuild 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 el VCS externo), la plantilla crea los siguientes recursos.
Para CodeCommit:
Un CodeCommit repositorio para almacenar el código de arranque de AFT Terraform
Una EventBridge regla para capturar los cambios CodeCommit del repositorio en la sucursal
mainOtra función de IAM para la regla EventBridge
Para cualquier otro proveedor de VCS externo, como: GitHub
Una conexión AWS CodeConnections
Además, al seleccionar CodeCommit como proveedor de VCS, si se establece el Generate AFT Files parámetro entrue, la plantilla crea los siguientes recursos adicionales para generar el contenido:
Un depósito de S3 para almacenar el contenido generado y usarlo como fuente del repositorio 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 CloudFormation personalizado que ejecuta la función Lambda cuando se implementa 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 CloudFormation parámetros proporcionados y rellena estos archivos con código predefinido, sustituyendo los valores de los parámetros respectivos.
Para ver el código que se utiliza como plantilla para generar los archivos, consulte el GitHub repositorio
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 CodeCommit repositorio, si estableces el Generate AFT Files parámetro entrue, la plantilla utilizará el depósito de S3 con el contenido generado como fuente de la main rama 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, sigue los pasos que se indican en la documentación de la consola de AWS Developer Tools sobre cómo actualizar una conexión pendiente.
Tools (Herramientas)
Servicios de AWS
CloudFormationle ayuda a configurar los recursos de AWS, aprovisionarlos de forma rápida y coherente y gestionarlos durante todo su ciclo de vida en Cuentas de AWS todas las regiones.
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 CodeConnectionspermite que AWS los recursos y servicios, por ejemplo CodePipeline, se conecten a repositorios de código externos, por ejemplo. 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 le ayuda a integrar su aplicación, biblioteca o script de Python con 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 de este patrón está disponible en el repositorio bootstrap Pipeline de GitHub AFT
Para ver el repositorio AFT oficial, consulte AWS Control Tower Account Factory for Terraform
Prácticas recomendadas
Al implementar AFT mediante la CloudFormation plantilla proporcionada, le recomendamos que siga las mejores prácticas para garantizar una implementación segura, eficiente y exitosa. Las pautas y recomendaciones clave para implementar y operar AFT incluyen lo siguiente:
Revisión exhaustiva de los parámetros: revise y comprenda detenidamente cada parámetro de la CloudFormation plantilla. La configuración correcta de los parámetros es crucial para la configuración y el funcionamiento correctos de AFT.
Actualizaciones periódicas de la plantilla: mantenga la plantilla actualizada con las últimas AWS funciones 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 AWS proveedor para que se ajusten a los requisitos de su organización.
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Prepare el AWS Control Tower entorno. | Instálelo y AWS Control Tower configúrelo en su AWS entorno para garantizar una administración y un gobierno centralizados para su Cuentas de AWS. Para obtener más información, consulte Primeros pasos AWS Control Tower en la AWS Control Tower documentación. | Administrador de la nube |
Iniciar la cuenta de administración de AFT. | Utilice AWS Control Tower Account Factory para lanzar una nueva Cuenta de AWS que sirva como su cuenta de administración de AFT. Para obtener más información, consulte Aprovisionar cuentas con AWS Service Catalog Account Factory en la AWS Control Tower documentación. | Administrador de la nube |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Inicie la CloudFormation plantilla. | En esta epopeya, despliega la CloudFormation plantilla proporcionada con esta solución para configurar la canalización de arranque de AFT en su cuenta AWS de administración. La canalización implementa la solución AFT en la cuenta de administración de AFT que configuró en la épica anterior. Paso 1: Abre la consola 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: Rellene los detalles de AWS Control Tower la cuenta AFT
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 como un VCS externo (no lo haga CodeCommit), siga estos pasos. (Opcional) Tras implementar la CloudFormation plantilla, puede rellenar o validar el contenido del repositorio bootstrap de AFT recién creado y comprobar 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: llene el repositorio bootstrap de AFT para. CodeCommit | Si configuras el proveedor de VCS en CodeCommit, sigue estos pasos. (Opcional) Tras implementar la CloudFormation plantilla, puede rellenar o validar el contenido del repositorio bootstrap de AFT recién creado y comprobar 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: Ver 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 |
Resolución de problemas
| Problema | Solución |
|---|---|
La función Lambda personalizada incluida en la CloudFormation plantilla falla durante la implementación. | Compruebe la función Lambda en los CloudWatch registros de Amazon 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 las funciones y políticas de IAM asociadas a la función CodeBuild Lambda 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 anticuada de la CloudFormation plantilla con versiones más recientes Servicios de AWS o de Terraform. | Actualiza la CloudFormation plantilla con regularidad para que sea compatible con las versiones más recientes AWS y las 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. |
Servicio de AWS Las cuotas se alcanzan durante el despliegue. | Antes de implementar la canalización, compruebe Servicio de AWS las cuotas de recursos, como los buckets de S3, las funciones de IAM y las funciones de Lambda. Solicite aumentos si fuera necesario. Para obtener más información, consulte Servicio de AWS las cuotas en el sitio web. AWS |
Se producen errores debido a parámetros de entrada incorrectos en la CloudFormation plantilla. | 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 nombres de cuentas IDs y 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.
AWSdocumentación:
AWS Control Tower La guía del usuario ofrece información detallada sobre la configuración y la administración AWS Control Tower.
CloudFormation la documentación proporciona información sobre las CloudFormation plantillas, las pilas y la administración de recursos.
Políticas de IAM y prácticas recomendadas:
Las prácticas recomendadas de seguridad en IAM explican cómo ayudar a proteger los AWS recursos mediante el uso de las funciones y políticas de IAM.
Terraform en: AWS
La documentación de Terraform AWS Provider
proporciona información completa sobre el uso de Terraform con. AWS
Servicio de AWS cuotas:
Servicio de AWS cuotas proporciona información sobre cómo ver Servicio de AWS las cuotas y cómo solicitar aumentos.