

# Consulta de los resultados de Amazon GuardDuty
<a name="querying-guardduty"></a>

[Amazon GuardDuty](https://aws.amazon.com/guardduty/) es un servicio de monitoreo de seguridad que ayuda a identificar actividades inesperadas y potencialmente no autorizadas o malintencionadas en su entorno de AWS. Cuando detecta alguna actividad inesperada y potencialmente malintencionada, GuardDuty genera [resultados](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings.html) de seguridad que puede exportar a Amazon S3 para su almacenamiento y análisis. Después de exportar los resultados a Amazon S3, puede utilizar Athena para consultarlos. En este artículo se muestra cómo crear una tabla en Athena para obtener resultados en GuardDuty y consultarlos.

Para obtener más información sobre Amazon GuardDuty, consulte la [Guía del usuario de Amazon GuardDuty](https://docs.aws.amazon.com/guardduty/latest/ug/).

## Requisitos previos
<a name="querying-guardduty-prerequisites"></a>
+ Habilite la característica GuardDuty para exportar los resultados a Amazon S3. Para ver los pasos, consulte [Exportación de resultados](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_exportfindings.html) en la Guía del usuario de Amazon GuardDuty.

## Creación de una tabla en Athena para los resultados de GuardDuty
<a name="querying-guardduty-creating-a-table-in-athena-for-guardduty-findings"></a>

Para consultar los resultados de GuardDuty desde Athena, debe crear una tabla para ellos.

**Para crear una tabla en Athena para los resultados de GuardDuty**

1. Abra la consola de Athena en [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Pegue la siguiente instrucción DDL en la consola de Athena. Modifique los valores de `LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/account-id/GuardDuty/'` para que apunten a los resultados de GuardDuty en Amazon S3.

   ```
   CREATE EXTERNAL TABLE `gd_logs` (
     `schemaversion` string,
     `accountid` string,
     `region` string,
     `partition` string,
     `id` string,
     `arn` string,
     `type` string,
     `resource` string,
     `service` string,
     `severity` string,
     `createdat` string,
     `updatedat` string,
     `title` string,
     `description` string)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/account-id/GuardDuty/'
    TBLPROPERTIES ('has_encrypted_data'='true')
   ```
**nota**  
El SerDe espera que cada documento JSON esté en una sola línea de texto sin caracteres de terminación de línea que separen los campos del registro. Si el texto JSON está en formato de impresión, puede recibir un mensaje de error como HIVE\$1CURSOR\$1ERROR: la fila no es un objeto JSON válido o HIVE\$1CURSOR\$1ERROR: JsonParseException: fin de entrada inesperado: marcador de cierre esperado para OBJECT cuando intenta consultar la tabla después de crearla. Para obtener más información, consulte los [Archivos de datos JSON](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) en la documentación de OpenX SerDE en GitHub. 

1. Ejecute la consulta en la consola de Athena para registrar la tabla `gd_logs`. Cuando se complete la consulta, los resultados estarán listos para su consulta desde Athena.

## Consultas de ejemplo
<a name="querying-guardduty-examples"></a>

En los siguientes ejemplos se muestra cómo consultar resultados de GuardDuty desde Athena.

**Example – Exfiltración de datos DNS**  
La siguiente consulta devuelve información acerca de las instancias de Amazon EC2 que podrían estar filtrando datos a través de consultas de DNS.  

```
SELECT
    title,
    severity,
    type,
    id AS FindingID,
    accountid,
    region,
    createdat,
    updatedat,
    json_extract_scalar(service, '$.count') AS Count,
    json_extract_scalar(resource, '$.instancedetails.instanceid') AS InstanceID,
    json_extract_scalar(service, '$.action.actiontype') AS DNS_ActionType,
    json_extract_scalar(service, '$.action.dnsrequestaction.domain') AS DomainName,
    json_extract_scalar(service, '$.action.dnsrequestaction.protocol') AS protocol,
    json_extract_scalar(service, '$.action.dnsrequestaction.blocked') AS blocked
FROM gd_logs
WHERE type = 'Trojan:EC2/DNSDataExfiltration'
ORDER BY severity DESC
```

**Example – Acceso no autorizado de un usuario de IAM**  
La siguiente consulta devuelve todos los tipos de resultados `UnauthorizedAccess:IAMUser` de una entidad principal de IAM en todas las regiones.   

```
SELECT title,
         severity,
         type,
         id,
         accountid,
         region,
         createdat,
         updatedat,
         json_extract_scalar(service, '$.count') AS Count, 
         json_extract_scalar(resource, '$.accesskeydetails.username') AS IAMPrincipal, 
         json_extract_scalar(service,'$.action.awsapicallaction.api') AS APIActionCalled
FROM gd_logs
WHERE type LIKE '%UnauthorizedAccess:IAMUser%' 
ORDER BY severity desc;
```

## Consejos para consultar los resultados de GuardDuty
<a name="querying-guardduty-tips"></a>

Cuando cree una consulta, tenga en cuenta lo siguiente.
+ Para extraer datos de campos JSON anidados, utilice las funciones `json_extract` o `json_extract_scalar` de Presto. Para obtener más información, consulte [Extracción de datos JSON de cadenas](extracting-data-from-JSON.md).
+ Asegúrese de que todos los caracteres de los campos JSON estén en minúsculas.
+  Para obtener información sobre la descarga de resultados de consulta, consulte [Descarga de archivos de resultados de consultas mediante la consola de Athena](saving-query-results.md).