

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.

# Habilita Amazon de GuardDuty forma condicional mediante plantillas AWS CloudFormation
<a name="enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumen
<a name="enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates-summary"></a>

[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html), una herramienta de infraestructura como código (IaC), le ayuda a gestionar AWS los recursos mediante despliegues basados en plantillas. CloudFormation se suele utilizar para gestionar los recursos. AWS Usarlo para habilitar Servicios de AWS, como [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html), puede presentar desafíos únicos. GuardDuty es un servicio de detección de amenazas que monitorea continuamente sus Cuentas de AWS actividades maliciosas y comportamientos no autorizados. A diferencia de los recursos típicos, que se pueden crear varias veces, GuardDuty es un servicio que debe habilitarse una vez por cuenta y Región de AWS. CloudFormation Las condiciones tradicionales solo admiten comparaciones de valores estáticos, lo que dificulta la comprobación del estado actual de servicios como GuardDuty. Si intentas activar la conexión a GuardDuty través CloudFormation de una cuenta que ya está activa, se produce un error en la implementación de la pila. Esto puede crear desafíos operativos para los DevOps equipos que administran entornos con varias cuentas.

Este patrón presenta una solución a este desafío. Utiliza recursos CloudFormation personalizados respaldados por [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)funciones para realizar comprobaciones de estado dinámicas. La lógica condicional GuardDuty solo se activa si aún no está habilitada. Utiliza las salidas de la pila para registrar el GuardDuty estado para futuras referencias.

Si sigue este patrón, puede automatizar las GuardDuty implementaciones en toda su AWS infraestructura y, al mismo tiempo, mantener las operaciones de CloudFormation apilado limpias y predecibles. Este enfoque es particularmente valioso para las organizaciones que:
+ Administrar múltiples Cuentas de AWS mediante IaC
+ Implementación de servicios de seguridad a escala
+ Requiere despliegues de infraestructura idempotentes
+ Automatizar los despliegues de servicios de seguridad

## Requisitos previos y limitaciones
<a name="enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates-prereqs"></a>

**Requisitos previos **
+ ¿Un activo Cuenta de AWS
+ Un rol AWS Identity and Access Management (IAM) que tiene permisos para crear, actualizar y eliminar pilas CloudFormation 
+ AWS Command Line Interface [(AWS CLI), [instalado y configurado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Limitaciones**

Si se GuardDuty ha desactivado manualmente para una Cuenta de AWS o Región de AWS, este patrón no se habilita GuardDuty para esa cuenta o región de destino.

## Arquitectura
<a name="enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates-architecture"></a>

**Pila de tecnología de destino**

El patrón utiliza CloudFormation la infraestructura como código (IaC). Utiliza un recurso CloudFormation personalizado respaldado por una función Lambda para lograr la capacidad de habilitación dinámica de servicios.

**Arquitectura de destino**

El siguiente diagrama de arquitectura de alto nivel muestra el proceso de habilitación GuardDuty mediante la implementación de una plantilla: CloudFormation 

![\[Uso de una CloudFormation pila para habilitarla GuardDuty en una cuenta de AWS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/3abd7cb7-0937-41fe-8eaa-79aedb182732/images/71624052-eebc-474a-9aa3-8606d87fc51d.png)


1. Se implementa una CloudFormation plantilla para crear una CloudFormation pila.

1. La pila crea un rol de IAM y una función de Lambda.

1. La función de Lambda asume el rol de IAM.

1. Si aún no GuardDuty está habilitada en el destino Cuenta de AWS, la función Lambda la habilita.

**Automatización y escala**

Puede usar la AWS CloudFormation StackSet función para extender esta solución a múltiples Cuentas de AWS y Regiones de AWS. Para obtener más información, consulte [Trabajar con AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) él en la CloudFormation documentación.

## Tools (Herramientas)
<a name="enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates-tools"></a>
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que te ayuda a interactuar Servicios de AWS mediante los comandos de tu shell de línea de comandos.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)le ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y administrarlos a lo largo de su ciclo de vida en Cuentas de AWS todas las regiones.
+ [Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/what-is-guardduty.html) 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.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

## Epics
<a name="enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates-epics"></a>

### Cree la CloudFormation plantilla e implemente la pila
<a name="create-the-cfnshort-template-and-deploy-the-stack"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Guarde el código en Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates.html) | AWS DevOps | 
| Cree la CloudFormation plantilla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates.html) | AWS DevOps | 
| Crea la CloudFormation pila. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates.html) | AWS DevOps | 
| Valide que GuardDuty esté habilitado para Cuenta de AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates.html) | Administrador de la nube, administrador de AWS | 
| Configure cuentas o regiones adicionales. | Según sea necesario para su caso de uso, utilice la CloudFormation StackSet función para extender esta solución a múltiples Cuentas de AWS y Regiones de AWS. Para obtener más información, consulte [Trabajar con AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) ella en la CloudFormation documentación. | Administrador de la nube, administrador de AWS | 

## Recursos relacionados
<a name="enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates-resources"></a>

**Referencias**
+ [AWS CloudFormation documentación](https://docs.aws.amazon.com/cloudformation/index.html)
+ [AWS Lambda referencia de tipo de recurso](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_Lambda.html)
+ [CloudFormation tipo de recurso: :IAM AWS: :Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html)
+ [CloudFormation tipo de recurso:: AWS: :Detector GuardDuty](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-guardduty-detector.html)
+ [Cuatro formas de recuperar cualquier propiedad AWS del servicio mediante AWS CloudFormation](https://aws.amazon.com/blogs/mt/four-ways-to-retrieve-any-aws-service-property-using-aws-cloudformation-part-1/) (entrada de blog)

**Tutoriales y videos**
+ [Simplificación de la administración de la infraestructura con AWS CloudFormation](https://www.youtube.com/watch?v=1h-GPXQrLZw) (Tutorial)
+ [Usa Amazon GuardDuty y protege AWS Security Hub CSPM varias cuentas](https://www.youtube.com/watch?v=Rg2ZzAAi1nY) (AWS re:Invent 2020)
+ [Mejores prácticas de creación AWS CloudFormation(re:Invent 2019](https://www.youtube.com/watch?v=bJHHQM7GGro))AWS 
+ [Detección de amenazas en AWS: una introducción a Amazon GuardDuty](https://www.youtube.com/watch?v=czsuZXQvD8E) (AWS re:inForce 2019)

## Información adicional
<a name="enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates-additional"></a>

**Código Python**

```
import boto3
import os
import json
from botocore.exceptions import ClientError
import cfnresponse
guardduty=boto3.client('guardduty')
cfn=boto3.client('cloudformation')
def lambda_handler(event, context):
    print('Event: ', event)
    if 'RequestType' in event:    
      if event['RequestType'] in ["Create","Update"]:
          enabled=False
          try:  
            response=guardduty.list_detectors()
            if "DetectorIds" in response and len(response["DetectorIds"])>0:
              enabled="AlreadyEnabled"
            elif "DetectorIds" in response and len(response["DetectorIds"])==0:
              cfn_response=cfn.create_stack(
                StackName='guardduty-cfn-stack',
                TemplateBody='{ "AWSTemplateFormatVersion": "2010-09-09",    "Description": "Guard duty creation template",    "Resources": { "IRWorkshopGuardDutyDetector": {  "Type": "AWS::GuardDuty::Detector",    "Properties": {   "Enable": true  }   } } }'
                )
              enabled="True"
          except Exception as e:
              print("Exception: ",e)
          responseData = {}
          responseData['status'] = enabled
          cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData, "CustomResourcePhysicalID" )
      elif event['RequestType'] == "Delete":
          cfn_response=cfn.delete_stack(
                  StackName='guardduty-cfn-stack')
          cfnresponse.send(event, context, cfnresponse.SUCCESS, {})
```

