View a markdown version of this page

Configuración del 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.

Configuración del registro centralizado a escala empresarial mediante Terraform

Aarti Rajput, Yashwant Patel y Nishtha Yadav, Amazon Web Services

Resumen

El registro centralizado es vital para la infraestructura en la nube de una organización porque proporciona visibilidad de sus operaciones, seguridad y cumplimiento normativo. 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, de este modo, posibilitar la administración de registros a escala empresarial en despliegues complejos. AWS La solución se automatiza mediante Terraform, que es 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

  • Generación de informes de cumplimiento 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 administra el flujo de registro de alto rendimiento a Amazon S3 para un almacenamiento a largo plazo. Amazon Simple Queue Service (Amazon SQS) está configurado para recibir notificaciones de eventos de Amazon S3 al crear el objeto. Esto permite la integración con los servicios de análisis, tales como:

  • 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 Quick Sight 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 estas 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 de archivo de registro: 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 enruta mediante un proceso simplificado a los buckets regionales de S3 de la cuenta de Log Archive.

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

El flujo de trabajo incluye cinco procesos:

  1. Proceso del flujo de registros

    • 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 por 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 del reenvío de los registros, de modo que puede especificar los patrones de registro exactos o flujos de registro completos para centralizarlos.

  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 orígenes de registro de manera eficiente, a fin de garantizar un rendimiento y una escalabilidad óptimos.

  3. Procesamiento de registros en la cuenta de archivo de registros

    • En la cuenta de archivo de registros, Firehose procesa los flujos de registro entrantes.

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

    • Estos flujos de Firehose envían los registros procesados a los buckets de S3 de la cuenta de archivo de registros, 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 datos.

  4. Notificaciones y flujos de trabajo adicionales

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

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

  5. AWS KMS por 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 datos.

Tools (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 los datos y no es necesaria ninguna administración continua.

  • Amazon Elastic Kubernetes Service (Amazon EKS) es un servicio administrado de orquestación de contenedores que facilita la implementación, administración y escalado de aplicaciones en contenedores con Kubernetes. Administra de manera automática 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 Lambda es un servicio informático sin servidor que permite ejecutar código sin aprovisionar ni administrar servidores. Escala de manera automática las aplicaciones mediante la ejecución de código en respuesta a cada desencadenador y solo cobra por el tiempo de procesamiento que se utilice.

  • Amazon Relational Database Service (Amazon RDS) es un servicio administrado de base de datos relaciona que facilita la configuración, la operación y la escala de una base de datos relacional en la nube. Proporciona una capacidad rentable y redimensionable, además de que automatiza las tareas de administración que consumen mucho tiempo.

  • Amazon Simple Queue Service (Amazon SQS) es un servicio de colas 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 parte 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 y siga las instrucciones de la documentación de AWS Control Tower.

Administrador de AWS

Habilite el uso compartido 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 cuentas nuevas 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 carpeta Application_account al repositorio aft-account-customizations.

  1. Cree una carpeta con el nombre Application_account en la ruta raíz del repositorio aft-account-customizations. Este repositorio se crea de manera automática al configurar AFT (consulte el apartado 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 repositorio centralised-logging-at-enterprise-scale-using-terraform, copie el contenido del directorio Application_account en el directorio Application_account/terraform del repositorio aft-account-customizations.

  4. En el archivo aft-account-customizations/Application_account/terraform.tfvars, 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 el repositorio aft-account-customizations, en la carpeta Application_account, configure los parámetros de entrada del archivo terraform.tfvars según los requisitos de su organización:

  • environment: nombre del entorno (por ejemplo, prod, dev, staging) en el que se implementará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: nombre del rol administrativo que se utilizará para administrar los recursos.

  • tags: mapa de pares clave-valor que representan etiquetas comunes que se aplican a todos los recursos.

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

  • allowed_cidr_blocks: 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: objeto que contiene los detalles de configuración de VPC.

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

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

  • restrictive_cidr_range: 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 carpeta Log_archive_account al repositorio aft-account-customizations.

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

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

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

  4. En el archivo aft-account-customizations/Log_archive_account/terraform.tfvars, 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 archivo de registros.

En este paso, definirá el archivo de configuración para crear recursos en la cuenta de archivo de registros, tales como los flujos de entrega de Firehose, los buckets de S3, las colas de SQS y los roles y políticas de IAM.

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

  • environment: nombre del entorno (por ejemplo, prod, dev, staging) en el que se implementará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: implemente 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 de manera automática los cambios e inicia el proceso de personalización de la cuenta.

Después de hacer cambios en los archivos de Terraform (terraform.tfvars), confirme y envíe los cambios al repositorio aft-account-customizations:

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

Si utiliza una rama distinta (por ejemplo dev), sustituya main por el nombre de la rama.

DevOps ingeniero

Opción 2: implemente el archivo de configuración de Terraform de manera manual.

Si no utiliza AFT o quiere implementar la solución de manera manual, puede utilizar los comandos siguientes de Terraform de las carpetas Application_account y Log_archive_account:

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

  2. Use el siguiente comando:

    $ terraform init
  3. Previsualice 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 la infraestructura.

  4. Aplicación de cambios:

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

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Verifique los filtros de suscripción.

Para verificar 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 archivo de registros, haga lo siguiente:

  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.

    Debe ver los 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

Verifique los flujos de Firehose.

Para verificar que los flujos de Firehose en la cuenta de archivo de registros procesan los registros de la aplicación correctamente, haga lo siguiente:

  1. En la cuenta de archivo de registros, abra la consola de Firehose.

  2. En el panel de navegación izquierdo, elija Flujos de Firehose.

  3. Elija cualquier flujo de Firehose y verifique lo siguiente:

    • El destino muestra el bucket de 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 buckets de S3 centralizados.

Para verificar que los buckets de S3 centralizados reciben y organizan los registros correctamente, haga lo siguiente:

  1. En la cuenta de archivo de registros, abra la consola de Amazon S3.

  2. Seleccione cada bucket 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 verifique su formato y la integridad de los datos.

DevOps ingeniero

Valide las colas de SQS.

Para verificar que las colas de SQS reciben notificaciones de archivos de registro nuevos, haga lo siguiente:

  1. En la cuenta de archivo de registros, abra la consola de Amazon SQS.

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

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

    Debe ver los mensajes que contienen notificaciones de eventos de S3 de los nuevos archivos de registro.

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

DevOps ingeniero
TareaDescripciónHabilidades requeridas

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

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

  1. Vaya al repositorio de aft-account-customizations.

  2. Vaya al directorio terraform.

  3. Elimine los archivos siguientes:

    • Directorio modules

    • iam.tf

    • versions.tf

    • variables.tf

    • outputs.tf

    • terraform.tfvars

  4. Borre el contenido del archivo main.tf.

  5. Envíe los 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 utiliza una rama distinta (por ejemplo dev), sustituya main por el nombre de la rama.

DevOps ingeniero

Opción 2: limpie los recursos de Terraform de manera manual.

Si no utiliza AFT o quiere limpiar los recursos de manera manual, utilice los comandos siguientes de Terraform de las carpetas Application_account y Log_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 le solicite, escriba para confirmar y ejecutar el plan de destrucción.

DevOps ingeniero

Resolució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 archivo de registros, verifique que la política de destino incluya lo siguiente:

    • La entidad principal correcta de la cuenta de origen.

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

    • Un ARN de destino válido.

  2. Confirme que el flujo de Firehose existe y está activo.

  3. Verifique que el rol de IAM asociado al destino tenga permisos para Firehose.

Se produjo un error en el filtro de suscripción o está bloqueado en estado pendiente.

Comprueba lo siguiente:

  1. En la cuenta de aplicación, verifique que el rol de IAM tenga lo siguiente:

    • Permisos para llamar a PutSubscriptionFilter.

    • 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 registros de entrada.

Compruebe lo siguiente:

  1. Confirme que el rol de IAM de Firehose tiene lo siguiente:

    • 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