Implemente Account Factory for 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.

Implemente Account Factory for Terraform (AFT) mediante una canalización de arranque

Creado por Vinicius Elias (AWS) y Edgar Costa Filho (AWS)

Repositorio de código: aft-bootstrap-pipeline

Entorno: producción

Tecnologías: gestión y gobierno; infraestructura

Carga de trabajo: código abierto

Servicios de AWS: AWS CodeBuild CodeCommit; AWS CodePipeline; AWS Control Tower; AWS Organizations

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 AWS 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 depósito está configurado con varias medidas de seguridad, como el cifrado del lado 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 en él. 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 AWS Control Tower documentación.

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 AWS recursos de su cuenta. La implementación podría crear varios recursos y, si se produjeran cuotas de servicio, se 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.

Versiones de producto

  • Terraform, versión 1.5.7 o posterior

  • AFT versión 1.11.1 o posterior

Arquitectura

Pila de tecnología de destino

  • AWS CloudFormation

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • Amazon EventBridge

  • IAM

  • AWS Lambda

  • Amazon S3

Arquitectura de destino

El siguiente diagrama ilustra la implementación analizada 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: crear los recursos, generar el contenido y ejecutar la canalización.

Crear 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 seleccione al implementar la plantilla. Como mínimo, la plantilla crea los siguientes recursos:

  • Un CodeCommit repositorio para almacenar el código de arranque de AFT Terraform

  • Un depósito de S3 para almacenar el archivo de estado de Terraform asociado a la implementación de AFT

  • ¿ CodePipeline Una canalización

  • 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 depósito de S3 para almacenar los artefactos relacionados con el tiempo de ejecución de la canalización

  • Una EventBridge regla para capturar los cambios del CodeCommit repositorio en la main sucursal

  • Otra función de IAM para la regla EventBridge

Además, si estableces el Generate AFT Files parámetro de la CloudFormation plantilla entrue, la plantilla crea los siguientes recursos adicionales para generar el contenido:

  • Un depósito de S3 para almacenar el contenido generado y utilizarlo como fuente del CodeCommit repositorio

  • Una función Lambda para procesar los parámetros dados y generar el contenido apropiado

  • Una función de IAM para ejecutar la función Lambda

  • Un recurso CloudFormation personalizado que ejecuta la función Lambda cuando se implementa la plantilla

Generar el contenido

Para generar los archivos de arranque AFT y su contenido, la solución utiliza una función Lambda y un bucket S3. La función crea una carpeta en el depósito 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>" }

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 (Fuente) busca el código fuente de la rama principal del repositorio, y la segunda etapa (Compilación) ejecuta el comando Terraform plan y genera los resultados para su revisión. En la tercera etapa (aprobación), el proceso 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 apply comando Terraform utilizando como entrada el resultado del plan comando Terraform anterior. Por último, un rol multicuenta 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.

Herramientas

Servicios de AWS

  • 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 todas las cuentas y regiones de AWS.

  • AWS CodeBuildes un servicio de compilación totalmente gestionado que le ayuda a compilar el código fuente, ejecutar pruebas unitarias y producir artefactos listos para su implementación. 

  • AWS CodeCommites un servicio de control de versiones que te ayuda a almacenar y gestionar de forma privada los repositorios de Git sin necesidad de gestionar tu propio sistema de control de código fuente.

  • AWS CodePipelinete ayuda a modelar y configurar rápidamente las diferentes etapas de una versión de software y a automatizar los pasos necesarios para publicar los cambios de software de forma continua.

  • AWS Lambdaes un servicio informático que ejecuta el código en respuesta a eventos y administra automáticamente los recursos informáticos, lo que proporciona una forma rápida de crear una aplicación moderna y sin servidor para la producción.

  • AWS SDK for Python (Boto3)es un kit de desarrollo de software que le ayuda a 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 forma segura y eficiente. Esto incluye componentes de bajo nivel, como instancias de procesamiento, almacenamiento y redes, y componentes de alto nivel, como entradas de DNS y funciones de SaaS.

  • Python es un lenguaje de programación potente y fácil de aprender. Cuenta con estructuras de datos eficientes de alto nivel y proporciona un enfoque simple pero efectivo para 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 la AFT incluyen las siguientes.

  • Revisión exhaustiva de los parámetros: revise y comprenda cuidadosamente cada parámetro de la CloudFormation plantilla. La configuración precisa de los parámetros es crucial para la correcta configuración y funcionamiento de la AFT.

  • Actualizaciones periódicas de la plantilla: mantenga la plantilla actualizada con las últimas AWS funciones y versiones de Terraform. Las actualizaciones periódicas le ayudan a aprovechar las nuevas funciones y a mantener la seguridad.

  • Control de versiones: fije la versión de su módulo AFT y, si es posible, utilice una implementación AFT independiente para realizar las pruebas.

  • Alcance: utilice AFT únicamente para implementar barandas y personalizaciones de infraestructura. No lo use para implementar su aplicación.

  • Revestimiento y validación: la canalización AFT requiere una configuración de Terraform validada y revestida. Ejecute lint, valide y pruebe 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 adapten 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

Inicie 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. The Pipeline implementa la solución AFT en la cuenta de administración de AFT que configuraste en la epopeya anterior.

Paso 1: Abre la consola AWS CloudFormation

Paso 2: Crea una pila nueva

  1. Elige crear una pila nueva.

  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

  • Repository Name: especifique el nombre del repositorio para almacenar el módulo de arranque AFT.

  • Branch Name: especifique la rama del repositorio de origen.

  • CodeBuild Docker Image: elija el archivo que se usará como imagen base de CodeBuild Docker.

Paso 4: Decida la generación de archivos

  • El Generate AFT Files parámetro controla si se generan los archivos de despliegue AFT predeterminados. Defina este parámetro en:

    • truepara crear y almacenar automáticamente los archivos de despliegue de AFT en el repositorio especificado.

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

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

Paso 5: Rellena AWS Control Tower y AFT con los detalles de la cuenta

  • Información específica de la cuenta de entrada AWS Control Tower y 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: El ID de la cuenta de administración de la AFT que creaste en la primera epopeya.

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

  • Configure las opciones de las funciones 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 por 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 únicamente todas las VPC de 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 para usarla en las tuberías AFT.

  • AFT Version: Defina la versión AFT para el despliegue. Mantenga la configuración predeterminada (latest) para usar la versión AFT más reciente.

Paso 8: Revise y cree la pila

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

Paso 9: Supervise la creación de la pila

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

Paso 10: Verificar 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. TerraformBackendBucketName

Administrador de la nube
TareaDescripciónHabilidades requeridas

Rellene el repositorio bootstrap de AFT.

(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 Generate AFT Files parámetro entrue, pase a la siguiente historia (validando la canalización).

Paso 1: Rellene el repositorio

  1. Abra la AWS CodeCommit consola y seleccione el repositorio recién creado. Si ha mantenido el nombre predeterminado, se llamará al repositorioaft-setup.

  2. Clona el repositorio en tu máquina local mediante SSH, HTTPS o HTTPS (GRC) y ábrelo en un editor.

  3. Crea una carpeta llamada terraform y dos archivos vacíos en su interior: backend.tf y. main.tf

  4. Abre el backend.tf archivo y añade este fragmento de código:

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

    En el archivo:

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

    • <s3-bucket-name>Sustitúyalo por el nombre del depósito de backend de Terraform. Puedes encontrarlo en el TerraformBackendBucketName resultado generado por la CloudFormation plantilla que implementaste anteriormente.

  5. Abra el main.tf archivo 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, consulta el archivo README del repositorio de AFT.

Paso 2: Confirma y envía tus cambios

  • Una vez que haya creado y rellenado la carpeta y los archivos, confirme los cambios y suba el código al repositorio. La canalización se inicia automáticamente, pasa por las etapas de 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 de implementación.

Administrador de la nube

Valide 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 Terraform o esperando una acción de aprobación manual.

Paso 2: Aprobar los resultados del plan Terraform

  • Puede revisar los resultados del plan Terraform consultando los registros de ejecución de la fase de construcción y, a continuación, aprobar o rechazar la ejecución en la fase de aprobación. Si lo apruebas, la canalización empezará a implementar los recursos de AFT en la cuenta de administración de AFT proporcionada.

Paso 3: espere a que se despliegue

  • Espere a que la canalización se ejecute correctamente. Esto debería tardar unos 30 minutos. Los errores que puedas encontrar suelen deberse a las cuotas de la API. En estos casos, puedes volver a ejecutar la canalización para continuar con la implementación.

Paso 4: Compruebe 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 Lambda tiene los permisos necesarios y que las variables de entorno se han configurado correctamente.

Se producen errores en la creación o administración de los recursos debido a 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 tienen los permisos necesarios. Si hay problemas con los permisos, ajuste las políticas de IAM para conceder el acceso necesario.

Estás 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 la implementación.

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. Solicita aumentos si es necesario. Para obtener más información, consulte Servicio de AWS las cuotas en el AWS sitio web.

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 identificadores de cuentas y los nombres de las regiones, sean correctos.

Recursos relacionados

Para implementar este patrón correctamente, revise los siguientes recursos. Estos recursos proporcionan información y orientación adicionales que pueden ser invaluables para configurar y administrar la AFT mediante el uso AWS 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.

  • AWS CloudFormation la documentación proporciona información sobre las CloudFormation plantillas, las pilas y la administración de recursos.

Políticas y mejores prácticas de IAM:

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.