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
Repositorio de código: - amazon-guardduty-for-aws organizations-with-terraform | Entorno: producción | Tecnologías: seguridad, identidad, cumplimiento; DevOps |
Carga de trabajo: todas las demás cargas de trabajo | AWSservicios: Amazon GuardDuty; AWS Organizations |
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 AWS entorno. Habilitar GuardDuty manualmente varias cuentas u organizaciones, en varias AWS regiones o a través de la consola AWS de administración puede resultar engorroso. 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.
AWSrecomienda 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 AWS las cuentas que son miembros actuales de la organización de destino 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 tienen experiencia con Terraform GuardDuty, Python y AWS Organizations.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta de AWS activa.
Una organización se configura en AWS Organizations y contiene 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 la configuración requerida, consulte Crear una estructura de cuentas
(AWSWell-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 vas a realizar el despliegue en una zona de aterrizaje de la Torre de AWS Control Tower, puedes reutilizar el depósito 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 Get Started 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). AWSSDKpara Python (Boto3) está 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 está diseñado para una zona de AWS landing zone que sigue las siguientes prácticas recomendadas:
La landing zone se creó utilizando la Torre AWS de Control.
Se utilizan AWS cuentas separadas 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 desplegados en las distintas cuentas de la organización, dentro de una sola AWS región.
![Diagrama de arquitectura que muestra los recursos de administración, seguridad, registro y cuentas de miembros.](images/pattern-img/c9b68627-b68e-47a6-9933-d0f36ea10ae2/images/86193749-eef9-4d63-8a7f-daa0cd03fbfe.png)
Terraform crea el rol GuardDutyTerraformOrgRoleAWSIdentity and Access Management (IAM) en la cuenta de seguridad y en la cuenta de registro.
Terraform crea un bucket de S3 en la AWS región predeterminada de la cuenta de registro. Este depósito 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 AWS clave del servicio de administración de claves (AWSKMS) en la cuenta de seguridad que se utiliza para cifrar los hallazgos del depósito de S3 y configura el archivado automático de los hallazgos del depósito de S3 en el almacenamiento de S3 Glacier Flexible Retrieval.
Desde la cuenta de administración, Terraform designa la cuenta de seguridad como administradora delegada. 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 de 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 del 3 al 7 para cada AWS región 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
AWSservicios
Amazon DynamoDB es un servicio SQL sin base de datos totalmente administrado que proporciona 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 AWS entorno.
AWSIdentity and Access Management (IAM) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
AWSEl Servicio de administración de claves (AWSKMS) le ayuda a crear y controlar claves criptográficas para proteger sus datos.
AWSOrganizations es un servicio de administración de cuentas que le ayuda a consolidar varias AWS cuentas en una organización que usted crea y administra de forma 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.
AWSSDKfor Python (Boto3)
es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con AWS los servicios.
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, puede copiar el comando completo que contiene el URL 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, GeneralAWS, Terraform, Python |
Genere CloudFormation plantillas para nuevos IAM roles. | Este patrón incluye una solución de IaC para crear dos CloudFormation plantillas. Estas plantillas crean dos IAM funciones que Terraform utiliza durante el proceso de configuración. Estas plantillas satisfacen las prácticas recomendadas de seguridad de permisos con privilegio mínimo.
| DevOps ingeniero, general AWS |
Crea los IAM roles. | Siguiendo las instrucciones de Crear una pila (CloudFormation documentación), haga lo siguiente:
| DevOps ingeniero, general AWS |
Asuma el IAM rol en la cuenta de administración. | Como práctica recomendada de seguridad, le recomendamos que asuma la nueva management-account-roleIAMfunción antes de continuar. En la interfaz de línea de AWS comandos (AWSCLI), introduzca el comando en Asumir el IAM rol de cuenta de administración en la sección de información adicional. | DevOps ingeniero, general AWS |
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 Nota: Este 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, GeneralAWS, Terraform, Python |
Eliminar IAM roles. | 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, general AWS |
Recursos relacionados
AWSdocumentación
Gestión de varias cuentas (GuardDuty documentación)
Concesión de privilegios mínimos (IAMdocumentación)
AWSmarketing
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 la IAM función de cuenta de administración
Para asumir el IAM rol en la cuenta de administración, ejecute el siguiente comando. <IAM role ARN>
ARNSustitúyalo por el del IAM rol.
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')