Esempio di query di log di CloudTrail - Amazon Athena

Esempio di query di log di CloudTrail

L'esempio seguente mostra una porzione di una query che restituisce tutte le richieste anonime (non firmate) dalla tabella creata in base ai log eventi di CloudTrail. Questa query seleziona le richieste in cui useridentity.accountid è anonimo e useridentity.arn non è specificato:

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 ]%';

Per ulteriori informazioni, consulta il post sul blog Big Data AWS Analisi della sicurezza, della conformità e delle attività operative utilizzando AWS CloudTrail e Amazon Athena.

Interroga i campi nidificati nei log di CloudTrail

Poiché i campi userIdentity e resources sono tipi di dati nidificati, l’esecuzioni di query richiede un trattamento speciale.

L'oggetto userIdentity è costituito da tipi nidificati STRUCT. È possibile eseguire query utilizzando un punto per separare i campi, come nell'esempio seguente:

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

Il campo resources è un array di oggetti STRUCT. Per questi array, utilizzare CROSS JOIN UNNEST per annullare l'array in modo da poter interrogare i suoi oggetti.

L'esempio seguente restituisce tutte le righe in cui la risorsa ARN termina in example/datafile.txt. Per la leggibilità, la funzione replace rimuove la sottostringa iniziale arn:aws:s3::: dall'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

Di seguito sono illustrati alcuni esempi di query per gli eventi DeleteBucket. La query estrae il nome del bucket e l'ID account a cui appartiene il bucket dall'oggetto 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

Per ulteriori informazioni sull'annullamento della nidificazione, consulta Filtrare le matrici.

Suggerimenti per eseguire le query sui log CloudTrail

Durante l'esplorazione dei dati di log di CloudTrail tenere presente quanto segue:

  • Prima di eseguire query sui log, verifica che la tabella di log sia uguale a quella definita in Crea una tabella per i registri CloudTrail in Athena utilizzando il partizionamento manuale. Se non è la prima tabella, elimina la tabella esistente utilizzando il comando: DROP TABLE cloudtrail_logs.

  • Dopo aver eliminato la tabella esistente, ricreala. Per ulteriori informazioni, consulta Crea una tabella per i registri CloudTrail in Athena utilizzando il partizionamento manuale.

    Verifica che i campi della query Athena siano elencati correttamente. Per informazioni sull'elenco completo di campi in un registro CloudTrail, consulta la sezione Contenuti del registro CloudTrail.

    Se la query include campi nei formati JSON, ad esempio STRUCT, estrarre i dati da JSON. Per ulteriori informazioni, consulta Estrarre dati JSON da stringhe.

    Alcuni suggerimenti per eseguire le query sulla tabella CloudTrail:

  • Inizia osservando quali utenti hanno eseguito specifiche operazioni API e gli indirizzi IP di origine.

  • Utilizza la seguente query SQL di base come modello. Incolla la query nella console Athena ed eseguila.

    SELECT useridentity.arn, eventname, sourceipaddress, eventtime FROM cloudtrail_logs LIMIT 100;
  • Modifica la query per esplorare ulteriormente i dati.

  • Per migliorare le prestazioni, includi la clausola LIMIT per ottenere uno specifico sottoinsieme di righe.