Configure el registro centralizado a escala empresarial 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.

Configure el registro centralizado a escala empresarial mediante Terraform

Creado por Aarti Rajput (AWS), Yashwant Patel (AWS) y Nishtha Yadav (AWS)

Resumen

El registro centralizado es vital para la infraestructura de nube de una organización, ya que proporciona visibilidad de sus operaciones, seguridad y conformidad. A medida que su organización amplía su AWS entorno a varias cuentas, una estrategia estructurada de administración de registros se vuelve fundamental para ejecutar las operaciones de seguridad, cumplir con los requisitos de auditoría y lograr la excelencia operativa.

Este patrón proporciona un marco seguro y escalable para centralizar los registros de múltiples servicios Cuentas de AWS y, así, permitir la administración de registros a escala empresarial en implementaciones complejas. AWS La solución se automatiza mediante Terraform, una herramienta de infraestructura como código (IaC) HashiCorp que garantiza despliegues consistentes y repetibles y minimiza la configuración manual. Al combinar Amazon CloudWatch Logs, Amazon Data Firehose y Amazon Simple Storage Service (Amazon S3), puede implementar un proceso sólido de agregación y análisis de registros que ofrece:

  • Administración centralizada de registros en toda su organización en AWS Organizations

  • Recopilación de registros automatizada con controles de seguridad integrados

  • Procesamiento de registros escalable y almacenamiento duradero

  • Informes de conformidad y registros de auditoría simplificados

  • Supervisión e información operativa en tiempo real

La solución recopila registros de los AWS Lambda contenedores de Amazon Elastic Kubernetes Service (Amazon EKS), las funciones y las instancias de bases de datos de Amazon Relational Database Service (Amazon RDS) mediante Logs. CloudWatch Reenvía automáticamente estos registros a una cuenta de registro dedicada mediante filtros de suscripción. CloudWatch Firehose gestiona el flujo de transmisión de registros de alto rendimiento a Amazon S3 para el almacenamiento a largo plazo. Amazon Simple Queue Service (Amazon SQS) está configurado para recibir notificaciones de eventos de Amazon S3 al crear un objeto. Esto permite la integración con los servicios de análisis, que incluyen:

  • Amazon OpenSearch Service para búsqueda de registros, visualización y análisis en tiempo real

  • Amazon Athena para consultas basadas en SQL

  • Amazon EMR para procesamiento a gran escala

  • Lambda para una transformación personalizada

  • Amazon QuickSight para paneles

Todos los datos se cifran mediante AWS Key Management Service (AWS KMS) y toda la infraestructura se implementa mediante Terraform para lograr una configuración uniforme en todos los entornos.

Este enfoque de registro centralizado permite a las organizaciones mejorar su postura de seguridad, mantener los requisitos de cumplimiento y optimizar la eficiencia operativa en toda su AWS infraestructura.

Requisitos previos y limitaciones

Requisitos previos 

Para obtener instrucciones sobre cómo configurar AWS Control Tower las cuentas AFT y de aplicación, consulta la sección Epics.

Cuentas obligatorias

Su organización AWS Organizations debe incluir las siguientes cuentas:

  • Cuenta de aplicación: una o más cuentas de origen en las que Servicios de AWS (Amazon EKS, Lambda y Amazon RDS) ejecutan y generan registros

  • Cuenta Log Archive: una cuenta dedicada para el almacenamiento y la administración centralizados de registros

Versiones de producto

Arquitectura

El siguiente diagrama ilustra una arquitectura de registro AWS centralizada que proporciona una solución escalable para recopilar, procesar y almacenar los registros de varias cuentas de aplicaciones en una cuenta dedicada de Log Archive. Esta arquitectura gestiona de forma eficiente los registros de Servicios de AWS Amazon RDS, Amazon EKS y Lambda, y los dirige mediante un proceso simplificado a los buckets regionales de S3 de la cuenta de Log Archive.

Arquitectura de registro centralizada de AWS para recopilar registros de varias cuentas de aplicaciones.

El flujo de trabajo incluye cinco procesos:

  1. Proceso de flujo de registro

    • El proceso de flujo de registros comienza en las cuentas de la aplicación, donde se Servicios de AWS generan varios tipos de registros, como registros generales, de errores, de auditoría, registros de consultas lentas de Amazon RDS, registros del plano de control de Amazon EKS y registros de ejecución de funciones y errores de Lambda.

    • CloudWatch sirve como punto de recopilación inicial. Recopila estos registros a nivel de grupo de registros dentro de cada cuenta de aplicación.

    • En CloudWatch, los filtros de suscripción determinan qué registros deben reenviarse a la cuenta central. Estos filtros le proporcionan un control pormenorizado sobre el reenvío de registros, de modo que puede especificar patrones de registro exactos o flujos de registros completos para su centralización.

  2. Transferencia de registros entre cuentas

    • Los registros se mueven a la cuenta de Log Archive. CloudWatch Los filtros de suscripción facilitan la transferencia entre cuentas y preservan el contexto regional.

    • La arquitectura establece varios flujos paralelos para gestionar diferentes fuentes de registro de manera eficiente, a fin de garantizar un rendimiento y una escalabilidad óptimos.

  3. Procesamiento de registros en la cuenta Log Archive

    • En la cuenta Log Archive, Firehose procesa los flujos de registro entrantes.

    • Cada región mantiene flujos de entrega de Firehose dedicados que pueden transformar, convertir o enriquecer los troncos según sea necesario.

    • Estas transmisiones Firehose envían los registros procesados a los depósitos S3 de la cuenta Log Archive, que se encuentra en la misma región que las cuentas de la aplicación de origen (región A en el diagrama) para mantener los requisitos de soberanía de los datos.

  4. Notificaciones y flujos de trabajo adicionales

    • Cuando los registros llegan a sus depósitos S3 de destino, la arquitectura implementa un sistema de notificaciones mediante Amazon SQS.

    • Las colas SQS regionales permiten el procesamiento asíncrono y pueden activar flujos de trabajo, análisis o sistemas de alerta adicionales en función de los registros almacenados.

  5. AWS KMS por motivos de seguridad

    La arquitectura incorpora medidas AWS KMS de seguridad. AWS KMS proporciona claves de cifrado para los cubos S3. Esto garantiza que todos los registros almacenados mantengan el cifrado en reposo y, al mismo tiempo, que el cifrado sea regional para cumplir con los requisitos de residencia de los datos.

Herramientas

Servicios de AWS

  • Amazon CloudWatch es un servicio de monitoreo y observabilidad que recopila datos operativos y de monitoreo en forma de registros, métricas y eventos. Proporciona una vista unificada de AWS los recursos, las aplicaciones y los servicios que se ejecutan en AWS y en los servidores locales.

  • CloudWatch Los filtros de suscripción a los registros son expresiones que coinciden con un patrón en los eventos de registro entrantes y envían los eventos de registro coincidentes al AWS recurso especificado para su posterior procesamiento o análisis.

  • AWS Control Tower Account Factory For Terraform (AFT) establece una canalización de Terraform para ayudarlo a aprovisionar y personalizar las cuentas. AWS Control Tower AFT proporciona un aprovisionamiento de cuentas basado en Terraform y, al mismo tiempo, le permite administrar sus cuentas con. AWS Control Tower

  • Amazon Data Firehose ofrece datos de streaming en tiempo real a destinos como Amazon S3, Amazon Redshift y Amazon Service. OpenSearch Se escala automáticamente para adaptarse al rendimiento de sus datos y no requiere una administración continua.

  • Amazon Elastic Kubernetes Service (Amazon EKS) es un servicio gestionado de organización de contenedores que facilita la implementación, la administración y el escalado de aplicaciones en contenedores mediante Kubernetes. Administra automáticamente la disponibilidad y la escalabilidad de los nodos del plano de control de Kubernetes.

  • AWS Key Management Service (AWS KMS) crea y controla las claves de cifrado para cifrar sus datos. AWS KMS se integra con otros Servicios de AWS para ayudarle a proteger los datos que almacena con estos servicios.

  • AWS Lambdaes un servicio informático sin servidor que permite ejecutar código sin aprovisionar ni administrar servidores. Escala automáticamente sus aplicaciones mediante la ejecución de código en respuesta a cada activador y solo cobra por el tiempo de procesamiento que utilice.

  • Amazon Relational Database Service (Amazon RDS) es un servicio de base de datos relacional gestionado que facilita la configuración, el funcionamiento y el escalado de una base de datos relacional en la nube. Proporciona una capacidad rentable y redimensionable, a la vez que automatiza las tareas de administración que consumen mucho tiempo.

  • Amazon Simple Queue Service (Amazon SQS) es un servicio de cola de mensajes que le permite desacoplar y escalar microservicios, sistemas distribuidos y aplicaciones sin servidor. Elimina la complejidad de administrar y operar el middleware orientado a los mensajes.

  • Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que ofrece escalabilidad, disponibilidad de datos, seguridad y rendimiento. Puede almacenar y recuperar cualquier cantidad de datos desde cualquier lugar de la web.

Otras herramientas

  • Terraform es una herramienta de infraestructura como código (IaC) HashiCorp que le ayuda a crear y administrar recursos locales y en la nube.

Código

El código de este patrón está disponible en el repositorio de registro GitHub centralizado.

Prácticas recomendadas

Epics

TareaDescripciónHabilidades requeridas

Configure un AWS Control Tower entorno con AFT.

  1. Implemente AWS Control Tower siguiendo las instrucciones de la AWS Control Tower documentación.

  2. Implemente AFT siguiendo las instrucciones de la AWS Control Tower documentación.

Administrador de AWS

Habilite el intercambio de recursos para la organización.

  1. Configure AWS Command Line Interface (AWS CLI) con las credenciales de la cuenta de administración, que proporcionan permisos administrativos para administrar AWS Control Tower.

  2. Ejecute el siguiente AWS CLI comando en cualquier lugar Región de AWS:

    aws ram enable-sharing-with-aws-organization

    Esto permite compartir recursos dentro de su organización en AWS Organizations todas las regiones que admiten AWS Resource Access Manager (AWS RAM).

Administrador de AWS

Verifique o aprovisione las cuentas de la aplicación.

Para aprovisionar nuevas cuentas de aplicación para su caso de uso, créelas mediante AFT. Para obtener más información, consulte Aprovisionar una nueva cuenta con AFT en la AWS Control Tower documentación.

Administrador de AWS
TareaDescripciónHabilidades requeridas

Copie el contenido de la Application_account carpeta al aft-account-customizations repositorio.

  1. Cree una carpeta con el nombre indicado Application_account en la ruta raíz del aft-account-customizations repositorio. Este repositorio se crea automáticamente al configurar AFT (consulte la epopeya anterior).

  2. Navegue hasta el directorio raíz del scale-using-terraform repositorio, copie el contenido del aft/account directorio y péguelo en el Application_account directorio que creó en el paso 1 del aft-account-customizations repositorio. centralised-logging-at-enterprise

  3. Desde el directorio raíz del centralised-logging-at-enterprise-scale-using-terraform repositorio, copie el contenido del Application_account directorio en el Application_account/terraform directorio del aft-account-customizations repositorio.

  4. En el aft-account-customizations/Application_account/terraform.tfvars archivo, confirme que todos los parámetros se pasan como argumentos en los archivos de configuración de Terraform correspondientes.

DevOps ingeniero

Revise y edite los parámetros de entrada para configurar la cuenta de la aplicación.

En este paso, debe configurar el archivo de configuración para crear recursos en las cuentas de la aplicación, incluidos los grupos de CloudWatch registros, los filtros de CloudWatch suscripción, las funciones y políticas de IAM y los detalles de configuración de las funciones de Amazon RDS, Amazon EKS y Lambda.

En su aft-account-customizations repositorio, en la Application_account carpeta, configure los parámetros de entrada del terraform.tfvars archivo en función de los requisitos de su organización:

  • environment: El nombre del entorno (por ejemplo,, proddev,staging) en el que se desplegarán los recursos.

  • account_name: El nombre del Cuenta de AWS lugar donde se crearán los recursos.

  • log_archive_account_id: el Cuenta de AWS ID en el que se archivarán los registros.

  • admin_role_name: el nombre de la función administrativa que se utilizará para administrar los recursos.

  • tags: un mapa de pares clave-valor que representan etiquetas comunes que se aplicarán a todos los recursos.

  • rds_config: un objeto que contiene detalles de configuración para las instancias de Amazon RDS.

  • allowed_cidr_blocks: una lista de bloques de CIDR a los que se les permite acceder a los recursos.

  • destination_name:Variable que se utiliza para crear el nombre de recurso de Amazon (ARN) del CloudWatch destino al que se van a transmitir los registros.

  • rds_parameters:Objeto que contiene la configuración del grupo de parámetros de Amazon RDS.

  • vpc_config: un objeto que contiene detalles de configuración de la VPC.

  • eks_config: un objeto que contiene detalles de configuración para los clústeres de Amazon EKS.

  • lambda_config: objeto que contiene detalles de configuración de las funciones Lambda.

  • restrictive_cidr_range: una lista de rangos de CIDR restrictivos para las reglas de los grupos de seguridad.

  • target_account_id: el Cuenta de AWS ID de la cuenta de Log Archive de destino en la que se desplegarán los recursos.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Copie el contenido de la Log_archive_account carpeta al aft-account-customizations repositorio.

  1. Cree una carpeta nombrada Log_archive_account en la ruta raíz del aft-account-customizations repositorio. Este repositorio se crea automáticamente al configurar AFT.

  2. Navegue hasta el directorio raíz del centralised-logging-at-enterprise-scale-using-terraform repositorio, copie el contenido del aft/account directorio y péguelo en el Log_archive_account directorio que creó en el paso anterior del aft-account-customizations repositorio.

  3. Desde el directorio raíz del centralised-logging-at-enterprise-scale-using-terraform repositorio, copie el contenido del Log_archive_account directorio en el Log_archive_account/terraform directorio del aft-account-customizations repositorio.

  4. En el aft-account-customizations/Log_archive_account/terraform.tfvars archivo, confirme que todos los parámetros se pasan como argumentos en los archivos de configuración de Terraform correspondientes.

DevOps ingeniero

Revise y edite los parámetros de entrada para configurar la cuenta de Log Archive.

En este paso, configurará el archivo de configuración para crear recursos en la cuenta de Log Archive, incluidos los flujos de entrega de Firehose, los depósitos de S3, las colas de SQS y las funciones y políticas de IAM.

En la Log_archive_account carpeta de su aft-account-customizations repositorio, configure los parámetros de entrada del terraform.tfvars archivo en función de los requisitos de su organización:

  • environment: El nombre del entorno (por ejemplo,, proddev,staging) en el que se desplegarán los recursos.

  • destination_name: variable que se utiliza para crear el ARN del CloudWatch destino al que se transmitirán los registros.

  • source_account_ids: una lista de las Cuenta de AWS IDs que pueden colocar filtros de suscripción en el destino del registro. Puede introducir tantas cuentas IDs como desee para habilitar el registro centralizado.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Opción 1: implementar los archivos de configuración de Terraform desde AFT.

En AFT, la canalización de AFT se activa después de introducir el código con los cambios de configuración en el GitHub aft-account-customizations repositorio. AFT detecta automáticamente los cambios e inicia el proceso de personalización de la cuenta.

Después de realizar cambios en tus archivos de Terraform (terraform.tfvars), confirma y envía los cambios a tu aft-account-customizations repositorio:

$ git add * $ git commit -m "update message" $ git push origin main
nota

Si utilizas una rama diferente (por ejemplodev), main sustitúyela por el nombre de la rama.

DevOps ingeniero

Opción 2: Implemente el archivo de configuración de Terraform manualmente.

Si no usa AFT o quiere implementar la solución manualmente, puede usar los siguientes comandos de Terraform de las carpetas Application_account yLog_archive_account:

  1. Clone el GitHub repositorio y configure los parámetros de entrada en el terraform.tfvars archivo.

  2. Ejecuta el siguiente comando:

    $ terraform init
  3. Vista previa de los cambios:

    $ terraform plan

    Este comando evalúa la configuración de Terraform para determinar el estado deseado de los recursos y lo compara con el estado actual de su infraestructura.

  4. Aplique los cambios:

    $ terraform apply
  5. Revise los cambios planificados y escriba cuando se le solicite para continuar con la solicitud.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Verifica los filtros de suscripción.

Para comprobar que los filtros de suscripción reenvían correctamente los registros de los grupos de registros de cuentas de la aplicación a la cuenta de Log Archive:

  1. En la cuenta de la aplicación, abra la CloudWatch consola.

  2. En el panel de navegación izquierdo, elija Registros, Grupos de registros.

  3. Seleccione cada grupo de registros (/aws/rds,/aws/eks,/aws/lambda) y elija la pestaña Filtros de suscripción.

    Debería ver filtros de suscripción activos que apuntan al ARN de destino, según el nombre que especificó en el archivo de configuración de Terraform.

  4. Elija cualquier filtro de suscripción para verificar su configuración y estado.

DevOps ingeniero

Verifica las transmisiones de Firehose.

Para comprobar que las transmisiones de Firehose en la cuenta de Log Archive procesan los registros de la aplicación correctamente:

  1. En la cuenta de Log Archive, abre la consola Firehose.

  2. En el panel de navegación izquierdo, selecciona Firehose Streams.

  3. Elige cualquier transmisión de Firehose y verifica lo siguiente:

    • El destino muestra el bucket S3 correcto.

    • La pestaña Supervisión muestra las métricas de entrega correcta.

    • La marca de tiempo de entrega reciente es actual.

DevOps ingeniero

Valide los depósitos S3 centralizados.

Para comprobar que los depósitos S3 centralizados reciben y organizan los registros correctamente:

  1. En la cuenta Log Archive, abra la consola Amazon S3.

  2. Seleccione cada depósito de registro central.

  3. Navegue por la estructura de carpetas: AWSLogs/AccountID/Region/Service.

    Deberías ver los archivos de registro organizados por timestamp () YYYY/MM/DD/HH.

  4. Elija cualquier archivo de registro reciente y compruebe su formato y la integridad de los datos.

DevOps ingeniero

Valide las colas de SQS.

Para comprobar que las colas de SQS reciben notificaciones de nuevos archivos de registro:

  1. En la cuenta Log Archive, abra la consola Amazon SQS.

  2. En el panel de navegación izquierdo, elija Queues (Colas).

  3. Seleccione cada cola configurada y elija Enviar y recibir mensajes.

    Debería ver los mensajes que contienen notificaciones de eventos de S3 para los nuevos archivos de registro.

  4. Elija cualquier mensaje para comprobar que contiene la información correcta del objeto de S3.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Opción 1: Retirar el archivo de configuración de Terraform de AFT.

Al eliminar los archivos de configuración de Terraform e introducir los cambios, AFT inicia automáticamente el proceso de eliminación de recursos.

  1. Navegue hasta el repositorioaft-account-customizations.

  2. Vaya al directorio terraform.

  3. Elimine los siguientes archivos:

    • Directorio modules

    • iam.tf

    • versions.tf

    • variables.tf

    • outputs.tf

    • terraform.tfvars

  4. Borra el contenido del main.tf archivo.

  5. Envía tus cambios al repositorio:

    # Stage all changes $ git add * # Commit cleanup changes $ git commit -m "Remove AFT customizations" # Push to repository $ git push origin main
    nota

    Si utilizas una rama diferente (por ejemplodev), main sustitúyela por el nombre de la sucursal.

DevOps ingeniero

Opción 2: Limpiar los recursos de Terraform manualmente.

Si no utilizas AFT o quieres limpiar los recursos manualmente, utiliza los siguientes comandos de Terraform de las carpetas Application_account yLog_archive_account:

  1. Inicialice la configuración de Terraform:

    $ terraform init

    Este comando inicializa Terraform y garantiza el acceso al estado actual.

  2. Vista previa de los cambios de limpieza:

    $ terraform destroy

    Este comando evalúa qué recursos se destruirán y compara el estado deseado con el estado actual de la infraestructura.

  3. Ejecute la limpieza. Cuando se te pida, escribe para confirmar y ejecutar el plan de destrucción.

DevOps ingeniero

Solución de problemas

ProblemaSolución

El destino CloudWatch de los registros no se creó o está inactivo.

Valide lo siguiente:

  1. En la cuenta de Log Archive, compruebe que la política de destino incluya:

    • El principal de la cuenta de origen correcto.

    • La acción correcta (logs:PutSubscriptionFilter).

    • Un ARN de destino válido.

  2. Confirma que la transmisión Firehose existe y está activa.

  3. Comprueba que la función de IAM asociada al destino tenga permisos para Firehose.

El filtro de suscripción ha fallado o está bloqueado en estado pendiente.

Comprueba lo siguiente:

  1. En la cuenta de la aplicación, compruebe que la función de IAM tenga:

    • Permisos para llamarPutSubscriptionFilter.

    • Una relación de confianza con CloudWatch Logs.

  2. Confirme que el ARN de destino es correcto.

  3. Compruebe CloudWatch los registros para ver si hay mensajes de error específicos.

El flujo de entrega de Firehose no muestra ningún registro entrante.

Compruebe lo siguiente:

  1. Confirme que la función Firehose IAM tiene:

    • Permisos para escribir en Amazon S3.

    • Acceso a la AWS KMS clave si el cifrado está activado.

  2. Revise CloudWatch las métricas de:

    • IncomingRecords

    • DeliveryToS3.Records

  3. Verifique la configuración del búfer y la configuración de entrega.

Recursos relacionados