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.
Usa Terraform para habilitar Amazon automáticamente GuardDuty para una organización
Creado por Aarthi Kannan (AWS)
Resumen
Amazon supervisa GuardDuty continuamente sus cuentas de Amazon Web Services (AWS) y utiliza información sobre amenazas para identificar actividades inesperadas y potencialmente maliciosas en su entorno de AWS. La activación manual GuardDuty de varias cuentas u organizaciones, en varias regiones de AWS o a través de la consola de administración de AWS puede resultar engorrosa. Puede automatizar el proceso mediante una herramienta de infraestructura como código (IaC) como Terraform, capaz de aprovisionar y administrar servicios y recursos de múltiples cuentas y regiones en la nube.
AWS recomienda usar AWS Organizations para configurar y administrar varias cuentas en GuardDuty. Este patrón sigue dicha recomendación. Una de las ventajas de este enfoque es que, cuando se creen o agreguen nuevas cuentas a la organización, se GuardDuty habilitarán automáticamente en estas cuentas para todas las regiones compatibles, sin necesidad de intervención manual.
Este patrón muestra cómo usar HashiCorp Terraform para habilitar Amazon GuardDuty para tres o más cuentas de Amazon Web Services (AWS) en una organización. El código de ejemplo proporcionado en este patrón hace lo siguiente:
Se habilita GuardDuty para todas las cuentas de AWS que son miembros actuales de la organización objetivo en AWS Organizations
Activa la función de activación automática en GuardDuty, que se habilita automáticamente GuardDuty para cualquier cuenta que se añada a la organización de destino en el futuro
Te permite seleccionar las regiones en las que quieres activarlas GuardDuty
Utiliza la cuenta de seguridad de la organización como GuardDuty administrador delegado
Crea un depósito de Amazon Simple Storage Service (Amazon S3) en la cuenta de registro y se GuardDuty configura para publicar los resultados agregados de todas las cuentas de este depósito.
Asigna una política de ciclo de vida que, de forma predeterminada, transfiere los resultados del bucket de S3 al almacenamiento de Amazon S3 Glacier Flexible Retrieval después de 365 días
Puede ejecutar manualmente este código de ejemplo o bien integrarlo en su proceso de integración y entrega continuas (CI/CD).
Público objetivo
Este patrón se recomienda para los usuarios que tengan experiencia con Terraform GuardDuty, Python y AWS Organizations.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta de AWS activa.
Una organización configurada en AWS Organizations que contenga, al menos, las tres cuentas siguientes:
Una cuenta de administración: esta es la cuenta desde la que se implementa el código de Terraform, ya sea de forma independiente o como parte del proceso de CI/CD. El estado de Terraform también se almacena en esta cuenta.
Una cuenta de seguridad: esta cuenta se utiliza como administrador GuardDuty delegado. Para obtener más información, consulte Consideraciones importantes para los administradores GuardDuty delegados (GuardDuty documentación).
Una cuenta de registro: esta cuenta contiene el depósito de S3, donde se GuardDuty publican los resultados agregados de todas las cuentas de los miembros.
Para obtener más información sobre cómo configurar la organización con los ajustes requeridos, consulte Crear una estructura de cuentas
(AWS Well-Architected Labs). Un bucket de Amazon S3 y una tabla de Amazon DynamoDB que sirvan como backend remoto para almacenar el estado de Terraform en la cuenta de administración. Para obtener más información sobre el uso de backends remotos para el estado de Terraform, consulte los backends de S3
(documentación de Terraform). Para ver un ejemplo de código que configura la administración remota del estado con un backend de S3, consulte remote-state-s3-backend (Terraform Registry). Tenga en cuenta los siguientes requisitos: El bucket de S3 y la tabla de DynamoDB deben estar en la misma región.
Al crear la tabla de DynamoDB, la clave de partición debe ser
LockID
(distingue entre mayúsculas y minúsculas), y el tipo de clave de partición debe ser String. Todos los demás valores de la tabla deben estar en sus valores predeterminados. Para obtener más información, consulte Acerca de las claves principales y Creación de una tabla (documentación de DynamoDB).
Un depósito de S3 que se utilizará para almacenar los registros de acceso del depósito de S3 en el que GuardDuty se publicarán los resultados. Para obtener más información, consulte Habilitar el registro de acceso al servidor de Amazon S3 (documentación de Amazon S3). Si va a realizar la implementación en una zona de aterrizaje de AWS Control Tower, puede reutilizar el bucket de S3 de la cuenta del archivo de registros para este fin.
Terraform version 0.14.6 o versión posterior, instalada y configurada. Para obtener más información, consulte Introducción - AWS
(documentación de Terraform). Python versión 3.9.6 o una versión posterior, instalada y configurada. Para obtener más información, consulte Versiones de origen
(sitio web de Python). AWS SDK para Python (Boto3) instalado. Para obtener más información, consulte Instalación
(documentación de Boto3). jq está instalado y configurado. Para obtener más información, consulte Descargar jq
(documentación de jq).
Limitaciones
Este patrón es compatible con los sistemas operativos macOS y Amazon Linux 2. No se ha probado el uso de este patrón en sistemas operativos Windows.
nota
Amazon Linux 2 está a punto de finalizar el soporte. Para obtener más información, consulte Amazon Linux 2 FAQs
. GuardDuty no debe estar ya activado en ninguna de las cuentas ni en ninguna de las regiones de destino.
La solución IaC de este patrón no implementa los requisitos previos.
Este patrón ha sido diseñado para una AWS Landing Zone que satisfaga las siguientes prácticas recomendadas:
Zona de aterrizaje creada mediante AWS Control Tower.
Cuentas de AWS independientes para la seguridad y el registro.
Versiones de producto
Versión de Terraform 0.14.6 o posterior. El código de ejemplo se ha probado en la versión 1.2.8.
Python, versión 3.9.6 o posterior.
Arquitectura
En esta sección se ofrece información general de alto nivel sobre esta solución y la arquitectura establecida en el código de ejemplo. El siguiente diagrama muestra los recursos implementados en las distintas cuentas de la organización, dentro de una única región de AWS.

Terraform crea el rol GuardDutyTerraformOrgRoleAWS Identity and Access Management (IAM) en la cuenta de seguridad y en la cuenta de registro.
Terraform crea un bucket de S3 en la región de AWS predeterminada de la cuenta de registro. Este segmento se usa como destino de publicación para agregar todos los GuardDuty hallazgos de todas las regiones y de todas las cuentas de la organización. Terraform también crea una clave de AWS Key Management Service (AWS KMS) en la cuenta de seguridad usada para cifrar los resultados del bucket de S3, y configura el archivo automático de los resultados del bucket de S3 en el almacenamiento de S3 Glacier Flexible Retrieval.
Desde la cuenta de administración, Terraform designa la cuenta de seguridad como administrador delegado. GuardDuty Esto significa que la cuenta de seguridad ahora administra el GuardDuty servicio para todas las cuentas de los miembros, incluida la cuenta de administración. Las cuentas de los miembros individuales no se pueden suspender ni deshabilitar GuardDuty por sí mismas.
Terraform crea el GuardDuty detector en la cuenta de seguridad para el administrador GuardDuty delegado.
Si aún no está activado, Terraform habilita la protección S3. GuardDuty Para obtener más información, consulte la protección de Amazon S3 en Amazon GuardDuty (GuardDuty documentación).
Terraform inscribe como miembros a todas las cuentas actuales y activas de la organización. GuardDuty
Terraform configura al administrador GuardDuty delegado para que publique los resultados agregados de todas las cuentas de los miembros en el segmento S3 de la cuenta de registro.
Terraform repite los pasos 3 a 7 para cada región de AWS que elija.
Automatizar y escalar
El código de muestra proporcionado está modularizado para que pueda integrarlo en su proceso de CI/CD con el fin de lograr una implementación automatizada.
Herramientas
Servicios de AWS
Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
Amazon GuardDuty es un servicio de supervisión continua de la seguridad que analiza y procesa los registros para identificar actividades inesperadas y potencialmente no autorizadas en su entorno de AWS.
AWS Identity and Access Management (IAM) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.
AWS Key Management Service (AWS KMS) le ayuda a crear y controlar claves criptográficas para proteger sus datos.
AWS Organizations es un servicio de administración de cuentas que le permite agrupar varias cuentas de AWS en una organización que usted crea y administra de manera centralizada.
Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
AWS SDK para Python (Boto3)
es un kit de desarrollo de software que permite integrar su aplicación, biblioteca o script de Python con los servicios de AWS.
Otras herramientas y servicios
HashiCorp Terraform
es una aplicación de interfaz de línea de comandos que le ayuda a usar código para aprovisionar y administrar la infraestructura y los recursos de la nube. Python
es un lenguaje de programación informático de uso general. jq
es un procesador de línea de comandos que le ayuda a trabajar con archivos JSON.
Repositorio de código
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Clonar el repositorio. | En un intérprete de comandos de Bash, ejecute el siguiente comando. En Clonar el repositorio, en la sección de información adicional, puedes copiar el comando completo que contiene la URL del GitHub repositorio. Esto clona el organizations-with-terraform repositorio amazon-guardduty-for-aws-
| DevOps ingeniero |
Edite el archivo de configuración de Terraform. |
| DevOps ingeniero, AWS general, Terraform, Python |
Genere CloudFormation plantillas para nuevas funciones de IAM. | Este patrón incluye una solución de IaC para crear dos CloudFormation plantillas. Estas plantillas crean dos roles de IAM que Terraform usará durante el proceso de configuración. Estas plantillas satisfacen las prácticas recomendadas de seguridad de permisos con privilegio mínimo.
| DevOps ingeniero, AWS general |
Cree el rol de IAM. | Siguiendo las instrucciones de Creación de una pila (CloudFormation documentación), haga lo siguiente:
| DevOps ingeniero, AWS general |
Asuma el rol de IAM de la cuenta de administración | Como práctica recomendada de seguridad, le recomendamos que asuma la nueva función de management-account-roleIAM antes de continuar. En la interfaz de la línea de comandos de AWS (AWS CLI), ejecute el comando de Asumir el rol de IAM de la cuenta de administración, en la sección Información adicional. | DevOps ingeniero, AWS general |
Ejecute el script de configuración. | En la carpeta
El script full-setup.sh realiza las siguientes acciones:
| DevOps ingeniero, Python |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Ejecute el script de limpieza. | Si utilizó este patrón GuardDuty para activarlo en la organización y desea deshabilitarlo GuardDuty, ejecute el siguiente comando en la
Este script se desactiva GuardDuty en la organización de destino, elimina todos los recursos desplegados y restaura la organización a su estado anterior antes de utilizar Terraform para activarlo. GuardDuty notaEste script no elimina los archivos de estado de Terraform ni bloquea los archivos de los backends locales y remotos. Si necesita hacerlo, debe llevar a cabo estas acciones manualmente. Este script tampoco elimina la organización importada ni las cuentas que gestiona. El acceso seguro para GuardDuty no está desactivado como parte del script de limpieza. | DevOps ingeniero, AWS general, Terraform, Python |
Elimine los roles de IAM. | Elimine las pilas que se crearon con las plantillas role-to-assume-for-role-creation.yaml y .yaml. management-account-role CloudFormation Para obtener más información, consulta Eliminar una pila (documentación). CloudFormation | DevOps ingeniero, AWS general |
Recursos relacionados
Documentación de AWS
Administrar varias cuentas (GuardDuty documentación)
Otorgar privilegio mínimo (documentación de IAM)
Marketing de AWS
Otros recursos
Información adicional
Clone el repositorio
Ejecute el siguiente comando para clonar el GitHub repositorio.
git clone https://github.com/aws-samples/amazon-guardduty-for-aws-organizations-with-terraform
Asuma el rol de IAM de la cuenta de administración
Para asumir el rol de IAM en la cuenta de administración, ejecute el siguiente comando. Sustituya <IAM role ARN>
con el ARN del rol de IAM.
export ROLE_CREDENTIALS=$(aws sts assume-role --role-arn <IAM role ARN> --role-session-name AWSCLI-Session --output json) export AWS_ACCESS_KEY_ID=$(echo $ROLE_CREDENTIALS | jq .Credentials.AccessKeyId | sed 's/"//g') export AWS_SECRET_ACCESS_KEY=$(echo $ROLE_CREDENTIALS | jq .Credentials.SecretAccessKey | sed 's/"//g') export AWS_SESSION_TOKEN=$(echo $ROLE_CREDENTIALS | jq .Credentials.SessionToken | sed 's/"//g')