Création d’une table pour les journaux CloudTrail dans Athena à l’aide du partitionnement manuel
Vous pouvez créer manuellement des tables pour les fichiers journaux CloudTrail dans la console Athena, puis exécuter des requêtes dans Athena.
Créer une table Athena pour un journal d'activité CloudTrail à l'aide de la console Athena
-
Copiez et collez l’instruction DDL suivante dans l’éditeur de requêtes de la console Athena, puis modifiez-la selon vos besoins. Notez qu’en raison du fait que les fichiers journaux CloudTrail ne constituent pas une trace de pile ordonnée d’appels d’API publics, les champs dans les fichiers journaux ne suivent aucun ordre précis.
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/';Note
Nous vous suggérons d’utiliser le SerDe
org.apache.hive.hcatalog.data.JsonSerDeindiqué dans l’exemple. Bien qu’un SerDecom.amazon.emr.hive.serde.CloudTrailSerdeexiste, celui-ci ne gère actuellement pas certains des nouveaux champs CloudTrail. -
(Facultatif) Supprimez les champs qui ne sont pas nécessaires pour votre table. Si vous ne devez lire qu'un certain ensemble de colonnes, la définition de votre table peut exclure les autres colonnes.
-
Modifiez le chemin
s3://amzn-s3-demo-bucket/AWSLogs/afin de pointer vers le compartiment Amazon S3 qui contient les données des journaux que vous souhaitez interroger. Cet exemple utilise une valeurAccount_ID/LOCATIONdes journaux pour un compte particulier, mais vous pouvez utiliser le degré de spécificité qui convient à votre application. Par exemple :-
Pour analyser des données à partir de plusieurs comptes, vous pouvez restaurer le spécificateur
LOCATIONafin d'indiquer tous les élémentsAWSLogsen utilisantLOCATION 's3://amzn-s3-demo-bucket/AWSLogs/'. -
Pour analyser les données correspondant à une date, un compte et une région spécifiques, utilisez
LOCATION 's3://amzn-s3-demo-bucket/123456789012/CloudTrail/us-east-1/2016/03/14/'. -
Pour analyser les données d’activité du réseau plutôt que les événements de gestion, remplacez
/CloudTrail/dans la clauseLOCATIONpar/CloudTrail-NetworkActivity/.
L'utilisation du plus haut niveau dans la hiérarchie des objets vous donne la plus grande flexibilité possible lorsque vous exécutez une requête à l'aide d'Athena.
-
-
Vérifiez que les champs sont répertoriés correctement. Pour plus d'informations sur la liste complète des champs dans un registre CloudTrail, consultez la rubrique Contenu d'un registre CloudTrail.
L’exemple d’instruction
CREATE TABLEindiqué à l’étape 1 utilise le SerDe SerDe JSON Hive. Dans l’exemple, les champsrequestparameters,responseelements, etadditionaleventdatasont répertoriés en tant que typeSTRINGdans la requête, mais le type de donnéesSTRUCTest utilisé dans JSON. Ainsi, pour extraire des données de ces champs, utilisez les fonctionsJSON_EXTRACT. Pour de plus amples informations, consultez Extraction de données JSON à partir de chaînes. Pour améliorer les performances, l'exemple partitionne les données par Région AWS, année, mois et jour. -
Exécutez l'instruction
CREATE TABLEdans la console Athena. -
Utilisez la commande ALTER TABLE ADD PARTITION pour charger les partitions afin de pouvoir les interroger, comme dans l'exemple suivant.
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/'