Erstellen einer Tabelle für CloudTrail-Protokolle in Athena mithilfe der manuellen Partitionierung
Sie können Tabellen für CloudTrail-Protokolldateien manuell in der Athena-Konsole erstellen und anschließend Abfragen in Athena ausführen.
So erstellen Sie eine Athena-Tabelle für einen CloudTrail-Trail mit der Athena-Konsole
-
Kopieren Sie die folgende DDL-Anweisung, fügen Sie sie in den Abfrage-Editor der Athena-Konsole ein und ändern Sie sie dann entsprechend Ihren Anforderungen. Beachten Sie, dass die Felder in den CloudTrail-Protokolldateien nicht in einer bestimmten Reihenfolge angezeigt werden, da es sich bei diesen Dateien nicht um eine geordnete Stapelverfolgung öffentlicher API-Aufrufe handelt.
CREATE EXTERNAL TABLE cloudtrail_logs ( eventversion STRING, useridentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, username:STRING, onbehalfof: STRUCT< userid: STRING, identitystorearn: STRING>, sessioncontext:STRUCT< attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>, sessionissuer:STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, username:STRING>, ec2roledelivery:string, webidfederationdata: STRUCT< federatedprovider: STRING, attributes: map<string,string>> > >, eventtime STRING, eventsource STRING, eventname STRING, awsregion STRING, sourceipaddress STRING, useragent STRING, errorcode STRING, errormessage STRING, requestparameters STRING, responseelements STRING, additionaleventdata STRING, requestid STRING, eventid STRING, resources ARRAY<STRUCT< arn:STRING, accountid:STRING, type:STRING>>, eventtype STRING, apiversion STRING, readonly STRING, recipientaccountid STRING, serviceeventdetails STRING, sharedeventid STRING, vpcendpointid STRING, vpcendpointaccountid STRING, eventcategory STRING, addendum STRUCT< reason:STRING, updatedfields:STRING, originalrequestid:STRING, originaleventid:STRING>, sessioncredentialfromconsole STRING, edgedevicedetails STRING, tlsdetails STRUCT< tlsversion:STRING, ciphersuite:STRING, clientprovidedhostheader:STRING> ) PARTITIONED BY (region string, year string, month string, day string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/';Anmerkung
Wir empfehlen, die im Beispiel gezeigte
org.apache.hive.hcatalog.data.JsonSerDezu verwenden. Obwohl eincom.amazon.emr.hive.serde.CloudTrailSerdeexistiert, verarbeitet es derzeit einige der neueren CloudTrail-Felder nicht. -
(Optional) Entfernen Sie alle für Ihre Tabelle nicht benötigten Felder. Wenn Sie nur eine bestimmte Gruppe von Spalten lesen müssen, kann Ihre Tabellendefinition die anderen Spalten ausschließen.
-
Ändern Sie
s3://amzn-s3-demo-bucket/AWSLogs/so, dass es auf den Amazon S3-Bucket verweist, der die Log-Daten enthält, die Sie abfragen möchten. Im Beispiel wird der WertAccount_ID/LOCATIONfür Protokolle eines bestimmten Kontos verwendet, aber Sie können den Grad an Spezifität angeben, der für Ihre Anwendung erforderlich ist. Beispiel:-
Für die Datenanalyse von mehreren Konten können Sie den Bezeichner
LOCATIONzurücksetzen und dann mitAWSLogsalleLOCATION 's3://amzn-s3-demo-bucket/AWSLogs/'angeben. -
Zur Analyse der Daten von einem bestimmten Datum, Konto und Region verwenden Sie
LOCATION 's3://amzn-s3-demo-bucket/123456789012/CloudTrail/us-east-1/2016/03/14/'. -
Um Netzwerkaktivitätsdaten anstelle von Verwaltungsereignissen zu analysieren, ersetzen Sie
/CloudTrail/in derLOCATION-Klausel durch/CloudTrail-NetworkActivity/.
Die oberste Ebene der Objekthierarchie bietet bei Abfragen mit Athena die größte Flexibilität.
-
-
Überprüfen Sie, ob die Felder korrekt aufgeführt werden. Weitere Informationen zur vollständigen Liste der Felder in einem CloudTrail-Datensatz finden Sie unter CloudTrail-Datensatzinhalte.
Die
CREATE TABLE-Beispielanweisung in Schritt 1 verwendet Hive JSON SerDe. In diesem Beispiel werden die Felderrequestparameters,responseelementsundadditionaleventdataalsSTRING-Typ in der Abfrage aufgelistet, stellen jedoch denSTRUCT-Datentyp dar, der in JSON verwendet wird. Um aus diesen Feldern Daten zu extrahieren, müssen Sie daherJSON_EXTRACT-Funktionen verwenden. Weitere Informationen finden Sie unter Extrahieren Sie JSON-Daten aus Zeichenfolgen. Zur Leistungsverbesserung werden die Daten in diesem Beispiel nach AWS-Region, Jahr, Monat und Tag partitioniert. -
Führen Sie die
CREATE TABLE-Anweisung in der Athena-Konsole aus. -
Verwenden Sie den Befehl ALTER TABLE ADD PARTITION, um die Partitionen zu laden, sodass Sie sie abfragen können, wie im folgenden Beispiel.
ALTER TABLEtable_nameADD PARTITION (region='us-east-1', year='2019', month='02', day='01') LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID/CloudTrail/us-east-1/2019/02/01/'