

# Consultas de registros de CloudTrail de ejemplo
<a name="query-examples-cloudtrail-logs"></a>

En el siguiente ejemplo, se muestra una parte de una consulta que devuelve todas las solicitudes anónimas (sin firmar) de la tabla creada para registros de eventos de CloudTrail. Esta consulta selecciona esas solicitudes donde `useridentity.accountid` es anónimo y no se ha especificado `useridentity.arn`:

```
SELECT *
FROM {{cloudtrail_logs}}
WHERE 
    eventsource = 's3.amazonaws.com' AND 
    eventname in ('GetObject') AND 
    useridentity.accountid = 'anonymous' AND 
    useridentity.arn IS NULL AND
    requestparameters LIKE '%[your bucket name ]%';
```

Para obtener más información, consulte la publicación del Blog de macrodatos de AWS [Análisis de la seguridad, la conformidad y la actividad operativa por medio de AWS CloudTrail y Amazon Athena](https://aws.amazon.com/blogs/big-data/aws-cloudtrail-and-amazon-athena-dive-deep-to-analyze-security-compliance-and-operational-activity/).

## Consulta de campos anidados en los registros de CloudTrail
<a name="cloudtrail-logs-nested-fields"></a>

Ya que los campos `userIdentity` y `resources` son tipos de datos anidados, su consulta requiere un tratamiento especial.

El objeto `userIdentity` se compone de tipos `STRUCT` anidados. Estos se pueden consultar utilizando un punto para separar los campos, como en el ejemplo a continuación:

```
SELECT 
    eventsource, 
    eventname,
    useridentity.sessioncontext.attributes.creationdate,
    useridentity.sessioncontext.sessionissuer.arn
FROM cloudtrail_logs
WHERE useridentity.sessioncontext.sessionissuer.arn IS NOT NULL
ORDER BY eventsource, eventname
LIMIT 10
```

El campo `resources` es una matriz de objetos `STRUCT`. Para estas matrices, utilice `CROSS JOIN UNNEST` para desanidar la matriz, de modo que pueda consultar sus objetos.

En el ejemplo siguiente se devuelven todas las filas donde el ARN de recurso termina en `example/datafile.txt`. Por motivos de legibilidad, la función [replace](https://prestodb.io/docs/current/functions/string.html#replace) elimina la subcadena `arn:aws:s3:::` inicial del ARN.

```
SELECT 
    awsregion,
    replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as s3_resource,
    eventname,
    eventtime,
    useragent
FROM cloudtrail_logs t
CROSS JOIN UNNEST(t.resources) unnested (resources_entry)
WHERE unnested.resources_entry.ARN LIKE '%example/datafile.txt'
ORDER BY eventtime
```

Las siguientes son consultas de ejemplo para eventos `DeleteBucket`. La consulta extrae el nombre del bucket y el ID de cuenta al que pertenece el bucket del objeto `resources`.

```
SELECT 
    awsregion,
    replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as deleted_bucket,
    eventtime AS time_deleted,
    useridentity.username, 
    unnested.resources_entry.accountid as bucket_acct_id 
FROM cloudtrail_logs t
CROSS JOIN UNNEST(t.resources) unnested (resources_entry)
WHERE eventname = 'DeleteBucket'
ORDER BY eventtime
```

Para obtener más información acerca de la desanidación, consulte [Filtrado de matrices](filtering-arrays.md).

## Sugerencias para consultar registros de CloudTrail
<a name="tips-for-querying-cloudtrail-logs"></a>

Tenga en cuenta lo siguiente cuando explore los datos de los registro de CloudTrail:
+ Antes de consultar los registros, compruebe que la tabla de registros sea similar a la de [Creación de una tabla para los registros de CloudTrail en Athena mediante la partición manual](create-cloudtrail-table.md). Si no es la primera tabla, elimine la tabla existente con el siguiente comando: `DROP TABLE cloudtrail_logs`.
+ Después de eliminar la tabla existente, vuelva a crearla. Para obtener más información, consulte [Creación de una tabla para los registros de CloudTrail en Athena mediante la partición manual](create-cloudtrail-table.md).

  Verifique que los campos de la consulta de Athena se muestren correctamente. Para obtener información sobre la lista completa de campos de un registro de CloudTrail, consulte [Contenido de los registros de CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html). 

  Si la consulta incluye campos en formato JSON, como `STRUCT`, extraiga los datos de JSON. Para obtener más información, consulte [Extracción de datos JSON de cadenas](extracting-data-from-JSON.md). 

  Algunas sugerencias para realizar consultas en la tabla de CloudTrail:
+ Para comenzar, observe qué usuarios de han invocado qué operaciones de la API y desde qué direcciones IP lo han hecho.
+ Utilice la siguiente consulta SQL básica como plantilla. Pegue la consulta en la consola de Athena y ejecútela.

  ```
  SELECT
   useridentity.arn,
   eventname,
   sourceipaddress,
   eventtime
  FROM cloudtrail_logs
  LIMIT 100;
  ```
+ Modifique la consulta para explorar en profundidad los datos.
+ Para mejorar el rendimiento, incluya la cláusula `LIMIT` para obtener un subconjunto de filas determinado.