Beispiele für CloudTrail-Protokollanfragen
Das folgende Beispiel zeigt einen Teil einer Abfrage, die alle anonymen (nicht signierten) Anfragen aus der Tabelle zurückgibt, die auf der Basis von CloudTrail-Ereignisprotokollen erstellt wurde. Diese Abfrage wählt die Anforderungen aus, in denen useridentity.accountid anonym ist und useridentity.arn nicht angegeben wird:
SELECT * FROMcloudtrail_logsWHERE eventsource = 's3.amazonaws.com' AND eventname in ('GetObject') AND useridentity.accountid = 'anonymous' AND useridentity.arn IS NULL AND requestparameters LIKE '%[your bucket name ]%';
Weitere Informationen finden Sie im AWS-Big-Data-Blogbeitrag unter Analysieren Sie Sicherheit, Compliance und Betriebsaktivitäten mit AWS CloudTrail und Amazon Athena
Verschachtelte Felder in CloudTrail-Protokollen abfragen
Da die userIdentity- und resources-Felder verschachtelte Datentypen sind, erfordert ihre Abfrage eine besondere Behandlung.
Das userIdentity-Objekt besteht aus verschachtelten STRUCT-Typen. Diese können mithilfe eines Punkts abgefragt werden, um die Felder wie im folgenden Beispiel zu trennen:
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
Das resources-Feld ist ein Array von STRUCT-Objekten. Verwenden Sie für diese Arrays CROSS JOIN UNNEST, um die Verschachtelung des Arrays aufzuheben, damit Sie seine Objekte abfragen können.
Im folgenden Beispiel werden alle Zeilen zurückgegeben, in denen der Ressourcen-ARN auf endet example/datafile.txt. Zur besseren Lesbarkeit entfernt die Ersetzungarn:aws:s3:::-Teilzeichenfolge aus dem 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
Es folgen Beispiele der Ereignisse für DeleteBucket-Ereignisse. Die Abfrage extrahiert den Namen des Buckets und die Konto-ID, zu der der Bucket gehört, aus dem resources-Objekt.
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
Weitere Informationen zum Aufheben der Verschachtelung finden Sie unter Filtern von Arrays.
Tipps für Abfragen von CloudTrail-Protokollen
Berücksichtigen Sie bei der Untersuchung von CloudTrail-Protokolldaten Folgendes:
-
Bevor Sie Abfragen für Protokolle ausführen, sollten Sie sicherstellen, dass Ihre Protokolltabelle ebenso aussieht wie die unter Erstellen einer Tabelle für CloudTrail-Protokolle in Athena mithilfe der manuellen Partitionierung. Falls dies nicht die erste Tabelle ist, löschen Sie die vorhandene Tabelle mit folgendem Befehl:
DROP TABLE cloudtrail_logs. -
Nachdem Sie die vorhandene Tabelle gelöscht haben, erstellen Sie diese neu. Weitere Informationen finden Sie unter Erstellen einer Tabelle für CloudTrail-Protokolle in Athena mithilfe der manuellen Partitionierung.
Überprüfen Sie, ob die Felder in der Athena-Abfrage korrekt aufgeführt werden. Informationen zur vollständigen Liste der Felder in einem CloudTrail-Datensatz finden Sie unter CloudTrail-Datensatz-Inhalte.
Falls die Abfrage Felder in JSON-Formaten enthält (z. B.
STRUCT), extrahieren Sie die Daten aus JSON. Weitere Informationen finden Sie unter Extrahieren Sie JSON-Daten aus Zeichenfolgen.Einige Vorschläge für die Ausgabe von Abfragen für Ihre CloudTrail-Tabelle:
-
Sehen Sie sich zunächst an, welche -Benutzer welche API-Operationen über welche Quell-IP-Adressen aufgerufen haben.
-
Verwenden Sie die folgende SQL-Basisabfrage als Vorlage. Fügen Sie die Abfrage in die Athena-Konsole ein und führen Sie sie aus.
SELECT useridentity.arn, eventname, sourceipaddress, eventtime FROM cloudtrail_logs LIMIT 100; -
Ändern Sie die Abfrage, um Ihre Daten weiter zu untersuchen.
-
Um die Leistung zu verbessern, binden Sie die Klausel
LIMITein, damit ein bestimmtes Subset von Zeilen zurückgegeben wird.