Consultas de registros de CloudTrail de ejemplo - Amazon Athena

Consultas de registros de CloudTrail de ejemplo

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.

Consulta de campos anidados en los registros de CloudTrail

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 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.

Sugerencias para consultar registros de CloudTrail

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. 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.

    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.

    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.

    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.