Implementación del Generador de cuentas para Terraform (AFT) mediante una canalización de arranque - 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.

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.

Flujo de trabajo para implementar AFT mediante una canalización de arranque.

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 crea y configura todos los recursos necesarios, en función de los parámetros que selecciones al implementar la plantilla. Como mínimo, la plantilla crea los siguientes recursos:

  • 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 main

    • Otra 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 de la solución. Básicamente, los archivos se generan de la siguiente manera.

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 en GitHub.

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

TareaDescripciónHabilidades 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
TareaDescripciónHabilidades 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

  1. Elija crear una nueva pila.

  2. Selecciona la opción de cargar un archivo de plantilla y carga la CloudFormation plantilla que viene con este patrón.

Paso 3: configurar los parámetros de la pila

  • VCS Provider: seleccione el proveedor del sistema de control de versiones (VCS) que desee utilizar. Puedes seleccionar un VCS externo, por ejemplo GitHub, o usarlo CodeCommit si tu cuenta tiene permiso para usar el servicio.

  • Repository Name: especifique el nombre del repositorio para almacenar el módulo de arranque de AFT. Para los proveedores de VCS externos, utilice la ruta completa, incluido el nombre de la organización (por ejemplo, my-github-org/my-repo).

  • Branch Name: especifique la ramificación del repositorio de origen.

  • CodeBuild Docker Image: Elija el archivo que desee utilizar como imagen base de CodeBuild Docker.

  • Si configura el proveedor de VCS en una opción distinta de CodeCommit, vaya al paso 8.

Paso 4: decidir la generación de archivos

  • Si lo ha seleccionado CodeCommit como proveedor de VCS, puede utilizar el Generate AFT Files parámetro para controlar la generación de los archivos de despliegue de AFT predeterminados. Establezca este parámetro en:

    • true para crear y almacenar automáticamente los archivos de implementación de AFT en el repositorio especificado.

    • false si desea gestionar manualmente la creación del archivo o si ya tiene los archivos en su lugar.

  • Si ha seleccionado false, vaya al paso 8; de lo contrario, siga primero los pasos 5-7.

Paso 5: Rellene los detalles de AWS Control Tower la cuenta AFT

  • Si establece el Generate AFT Files parámetro entrue, proporcione la siguiente información AWS Control Tower y la información específica de la cuenta AFT.

    • Log Archive Account ID: El ID de la cuenta de Log Archive es. AWS Control Tower

    • Audit Account ID: El ID de la cuenta de auditoría en AWS Control Tower.

    • AFT Management Account ID: ID de la cuenta de administración de AFT que creó en la primera épica.

    • AFT Main RegionyAFT Secondary Region: El principal y el secundario Regiones de AWS para el despliegue de AFT.

Paso 6: configurar las opciones de AFT

  • Configure los informes de métricas:

    • AFT Enable Metrics Reporting: habilite o deshabilite los informes de métricas de AFT. Para obtener más información, consulte las métricas operativas en la AWS Control Tower documentación.

  • Defina las opciones de características de AFT:

    • Enable AFT CloudTrail Data Events: Habilite CloudTrail los eventos de datos en todas las cuentas administradas por AFT. Para obtener más información, consulte AWS CloudTrail los eventos de datos en la AWS Control Tower documentación.

    • Enable AFT Enterprise Support: habilite Enterprise Support en todas las cuentas administradas de AFT. Para obtener más información, consulte el plan AWS Enterprise Support en la AWS Control Tower documentación.

    • Enable AFT Delete Default VPC: Elimine todo únicamente VPCs en la cuenta de administración de AFT. Para obtener más información, consulte Eliminar la VPC AWS predeterminada en la AWS Control Tower documentación.

Paso 7: especificar las versiones

  • AFT Terraform Version: elija la versión de Terraform que usar en las canalizaciones de AFT.

  • AFT Version: defina la versión de AFT para la implementación. Mantenga la configuración predeterminada (latest) para usar la versión de AFT más reciente.

Paso 8: revisar y crear la pila

  • Revise todos los parámetros y configuraciones. Si todo está en orden, proceda a crear la pila.

Paso 9: supervisar la creación de la pila

  • CloudFormation aprovisiona y configura los recursos que ha definido. Supervise el proceso de creación de la pila en la CloudFormation consola. Este proceso podría tardar varios minutos.

Paso 10: comprobar la implementación

  • Cuando el estado de la pila muestre CREATE_COMPLETE, compruebe que todos los recursos se hayan creado correctamente.

  • En la sección Salidas, anote el valor de TerraformBackendBucketName.

Administrador de la nube
TareaDescripciónHabilidades 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

  1. En la CodePipeline consola, en el panel de navegación, seleccione Configuración, Conexiones.

  2. Seleccione la conexión aft-vcs-connection. El estado debería ser Pending.

  3. Elija Actualizar conexión pendiente y siga las instrucciones de Update a pending connection en la documentación de la consola de las herramientas para desarrolladores.

  4. Cuando el estado de la conexión sea Available, vaya al siguiente paso.

Paso 2: rellenar el repositorio

  1. Utilice sus credenciales de VCS externas para clonar el repositorio que especificó en la plantilla en su máquina local. Si ha mantenido el nombre predeterminado, el repositorio se llamará aft-setup.

  2. En el repositorio, cree una carpeta llamada terraform con dos archivos vacíos dentro: backend.tf y main.tf.

  3. Abra el archivo backend.tf y agregue este fragmento de código:

    terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup" } }

    En el archivo:

    • Sustituya <aft-main-region> por la región de AFT principal. Debe coincidir con la región AWS Control Tower principal.

    • Sustituya <s3-bucket-name> por el nombre del bucket de backend de Terraform. Puede encontrarlo en el TerraformBackendBucketName resultado generado por la CloudFormation plantilla que implementó anteriormente.

  4. Abra el archivo main.tf y utilice uno de los ejemplos disponibles en el repositorio de AFT para implementar AFT. Por ejemplo, puedes trabajar con tu proveedor de VCS preferido (CodeCommit GitHub, o Bitbucket) o personalizar la VPC de AFT. Para ver más opciones de entrada de AFT, consulte el archivo README en el repositorio de AFT.

Paso 2: confirmar y enviar los cambios

  • Una vez que haya creado y rellenado la carpeta y los archivos, confirme los cambios y cargue el código en el repositorio. La canalización se inicia automáticamente, se ejecuta en las etapas Origen y Compilación y, a continuación, espera a que se lleve a cabo una acción de aprobación antes de la etapa Implementación.

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 Generate AFT Files en true, pase a la siguiente historia (validación de la canalización).

Paso 1: rellenar el repositorio

  1. Abra la consola de AWS CodeCommit y seleccione el repositorio recién creado. Si ha mantenido el nombre predeterminado, el nombre del repositorio debería ser aft-setup.

  2. Clone el repositorio en su máquina local mediante SSH, HTTPS o HTTPS (GRC) y ábralo en un editor.

  3. Cree una carpeta llamada terraform y dos archivos vacíos dentro: backend.tf y main.tf.

  4. Abra el archivo backend.tf y agregue este fragmento de código:

    terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup" } }

    En el archivo:

    • Sustituya <aft-main-region> por la región de AFT principal. Debe coincidir con la región AWS Control Tower principal.

    • Sustituya <s3-bucket-name> por el nombre del bucket de backend de Terraform. Puede encontrarlo en el TerraformBackendBucketName resultado generado por la CloudFormation plantilla que implementó anteriormente.

  5. Abra el archivo main.tf y utilice uno de los ejemplos disponibles en el repositorio de AFT para implementar AFT. Por ejemplo, puedes trabajar con tu proveedor de sistema de control de versiones (VCS) preferido (CodeCommit GitHub, o Bitbucket) o personalizar la VPC de AFT. Para ver más opciones de entrada de AFT, consulte el archivo README en el repositorio de AFT.

Paso 2: confirmar y enviar los cambios

  • Una vez que haya creado y rellenado la carpeta y los archivos, confirme los cambios y cargue el código en el repositorio. La canalización se inicia automáticamente, se ejecuta en las etapas Origen y Compilación y, a continuación, espera a que se lleve a cabo una acción de aprobación antes de la etapa Implementación.

Administrador de la nube

Validar la canalización de arranque de AFT.

Paso 1: Ver la canalización

  • Abre la CodePipeline consola y comprueba si la aft-bootstrap-pipeline canalización se inició correctamente. Debería estar ejecutando un plan de Terraform o esperando una acción de aprobación manual.

Paso 2: aprobar los resultados del plan de Terraform

  • Para revisar los resultados del plan de Terraform, puede consultar los registros de ejecución de la etapa Compilación y, a continuación, aprobar o rechazar la ejecución en la etapa Aprobación. Si la aprueba, la canalización empezará a implementar los recursos de AFT en la cuenta de administración de AFT proporcionada.

Paso 3: esperar a la implementación

  • Espere a que la canalización se ejecute correctamente. Este proceso tarda unos 30 minutos. Los errores que pueda encontrar suelen deberse a las cuotas de la API. En estos casos, puede volver a ejecutar la canalización para continuar con la implementación.

Paso 4: comprobar los recursos creados

  • Acceda a la cuenta de administración de AFT y confirme que se hayan creado los recursos.

Administrador de la nube

Resolución de problemas

ProblemaSolució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:

Terraform en: 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.