Journalisation des appels d’API Amazon Athena à l’aide d’AWS CloudTrail
Le service Athena est intégré à AWS CloudTrail, un service qui enregistre les actions effectuées par un utilisateur, un rôle ou un Service AWS dans Athena.
CloudTrail capture les appels d'API pour Athena en tant qu'événements. Les appels capturés incluent les appels de la console Athena et les appels de code adressés aux opérations d'API Athena. Si vous créez un journal d'activité, vous pouvez activer la livraison continue d'événements CloudTrail à un compartiment Simple Storage Service (Amazon S3), y compris des événements pour Athena. Si vous ne configurez pas de journal d’activité, vous pouvez toujours afficher les événements les plus récents dans la console CloudTrail dans Event history (Historique des événements).
Avec les informations collectées par CloudTrail, vous pouvez déterminer la demande qui a été envoyée à Athena, l'adresse IP à partir de laquelle la demande a été effectuée, l'auteur et la date de la demande, ainsi que d'autres détails.
Pour en savoir plus sur CloudTrail, consultez le Guide de l’utilisateur AWS CloudTrail.
Vous pouvez utiliser Athena pour interroger les fichiers journaux CloudTrail provenant du service Athena lui-même et d'autres Services AWS. Pour plus d'informations, voir Interrogation des journaux AWS CloudTrail, SerDe JSON Hiveet l'article du blog Big Data AWS intitulé Utilisation des instructions CTAS avec Amazon Athena pour réduire les coûts et augmenter les performances
À propos des informations Athena dans CloudTrail
CloudTrail est activé dans votre compte Amazon Web Services lors de la création de ce dernier. Quand une activité a lieu dans Athena, cette activité est enregistrée dans un événement CloudTrail avec d'autres événements de service AWS dans l'Historique des événements. Vous pouvez afficher, rechercher et télécharger les événements récents dans votre compte Amazon Web Services. Pour plus d’informations, consultez Affichage des événements avec l’historique des événements CloudTrail.
Pour un registre continu des événements dans votre compte Amazon Web Services, y compris les événements pour Athena, créez un journal d'activité. Un journal d'activité permet à CloudTrail de distribuer les fichiers journaux vers Simple Storage Service (Amazon S3) bucket. Par défaut, lorsque vous créez un journal d’activité dans la console, il s’applique à toutes les régions Régions AWS. Le journal d’activité consigne les événements de toutes les régions dans la partition AWS et livre les fichiers journaux dans le compartiment Simple Storage Service (Amazon S3) de votre choix. De plus, vous pouvez configurer d’autres Services AWS pour analyser plus en profondeur les données d’événement collectées dans les journaux CloudTrail et agir sur celles-ci. Pour plus d’informations, consultez les ressources suivantes :
Toutes les actions Athena sont enregistrées par CloudTrail et documentées dans la rubrique Référence d'API Amazon Athena. Par exemple, les appels aux actions StartQueryExecution et GetQueryResults génèrent des entrées dans les fichiers journaux CloudTrail.
Chaque événement ou entrée de journal contient des informations sur la personne ayant initié la demande. Les informations relatives à l’identité permettent de déterminer les éléments suivants :
-
Si la demande a été effectuée avec les informations d’identification utilisateur racine ou AWS Identity and Access Management (IAM).
-
Si la demande a été effectuée avec les informations d’identification de sécurité temporaires d’un rôle ou d’un utilisateur fédéré.
-
Si la requête a été effectuée par un autre Service AWS.
Pour plus d’informations, consultez l’élément userIdentity CloudTrail.
Présentation des entrées de fichiers journaux Athena
Un journal de suivi est une configuration qui permet d’envoyer des événements sous forme de fichiers journaux à un compartiment Amazon S3 de votre choix. Les fichiers journaux CloudTrail peuvent contenir une ou plusieurs entrées. Un événement représente une demande unique provenant de n’importe quelle source et comprend des informations sur l’action demandée, la date et l’heure de l’action, les paramètres de la demande, etc. Les fichiers journaux CloudTrail ne constituent pas une série ordonnée retraçant les appels d'API publics. Ils ne suivent aucun ordre précis.
Note
Pour empêcher la divulgation involontaire d'informations sensibles, l'entrée queryString dans les journaux StartQueryExecution et CreateNamedQuery a une valeur de ***OMITTED***. Ce comportement est intégré à la conception. Pour accéder à la chaîne de requête proprement dite, vous pouvez utiliser l'API Athena GetQueryExecution et transmettre la valeur de responseElements.queryExecutionId depuis le journal CloudTrail.
Les exemples suivants montrent des entrées de journal CloudTrail pour :
StartQueryExecution (réussite)
{
"eventVersion":"1.05",
"userIdentity":{
"type":"IAMUser",
"principalId":"EXAMPLE_PRINCIPAL_ID",
"arn":"arn:aws:iam::123456789012:user/johndoe",
"accountId":"123456789012",
"accessKeyId":"EXAMPLE_KEY_ID",
"userName":"johndoe"
},
"eventTime":"2017-05-04T00:23:55Z",
"eventSource":"athena.amazonaws.com",
"eventName":"StartQueryExecution",
"awsRegion":"us-east-1",
"sourceIPAddress":"77.88.999.69",
"userAgent":"aws-internal/3",
"requestParameters":{
"clientRequestToken":"16bc6e70-f972-4260-b18a-db1b623cb35c",
"resultConfiguration":{
"outputLocation":"s3://amzn-s3-demo-bucket/test/"
},
"queryString":"***OMITTED***"
},
"responseElements":{
"queryExecutionId":"b621c254-74e0-48e3-9630-78ed857782f9"
},
"requestID":"f5039b01-305f-11e7-b146-c3fc56a7dc7a",
"eventID":"c97cf8c8-6112-467a-8777-53bb38f83fd5",
"eventType":"AwsApiCall",
"recipientAccountId":"123456789012"
}
StartQueryExecution (échec)
{
"eventVersion":"1.05",
"userIdentity":{
"type":"IAMUser",
"principalId":"EXAMPLE_PRINCIPAL_ID",
"arn":"arn:aws:iam::123456789012:user/johndoe",
"accountId":"123456789012",
"accessKeyId":"EXAMPLE_KEY_ID",
"userName":"johndoe"
},
"eventTime":"2017-05-04T00:21:57Z",
"eventSource":"athena.amazonaws.com",
"eventName":"StartQueryExecution",
"awsRegion":"us-east-1",
"sourceIPAddress":"77.88.999.69",
"userAgent":"aws-internal/3",
"errorCode":"InvalidRequestException",
"errorMessage":"Invalid result configuration. Should specify either output location or result configuration",
"requestParameters":{
"clientRequestToken":"ca0e965f-d6d8-4277-8257-814a57f57446",
"queryString":"***OMITTED***"
},
"responseElements":null,
"requestID":"aefbc057-305f-11e7-9f39-bbc56d5d161e",
"eventID":"6e1fc69b-d076-477e-8dec-024ee51488c4",
"eventType":"AwsApiCall",
"recipientAccountId":"123456789012"
}
CreateNamedQuery
{
"eventVersion":"1.05",
"userIdentity":{
"type":"IAMUser",
"principalId":"EXAMPLE_PRINCIPAL_ID",
"arn":"arn:aws:iam::123456789012:user/johndoe",
"accountId":"123456789012",
"accessKeyId":"EXAMPLE_KEY_ID",
"userName":"johndoe"
},
"eventTime":"2017-05-16T22:00:58Z",
"eventSource":"athena.amazonaws.com",
"eventName":"CreateNamedQuery",
"awsRegion":"us-west-2",
"sourceIPAddress":"77.88.999.69",
"userAgent":"aws-cli/1.11.85 Python/2.7.10 Darwin/16.6.0 botocore/1.5.48",
"requestParameters":{
"name":"johndoetest",
"queryString":"***OMITTED***",
"database":"default",
"clientRequestToken":"fc1ad880-69ee-4df0-bb0f-1770d9a539b1"
},
"responseElements":{
"namedQueryId":"cdd0fe29-4787-4263-9188-a9c8db29f2d6"
},
"requestID":"2487dd96-3a83-11e7-8f67-c9de5ac76512",
"eventID":"15e3d3b5-6c3b-4c7c-bc0b-36a8dd95227b",
"eventType":"AwsApiCall",
"recipientAccountId":"123456789012"
},