Comment créer automatiquement des tables dans Amazon Athena pour rechercher des journaux AWS CloudTrail ?

Date de la dernière mise à jour : 12/12/2019

Je souhaite effectuer des recherches dans un grand ensemble de journaux AWS CloudTrail. Pour éviter toute erreur, je ne souhaite pas créer de tables Amazon Athena manuellement.

Résolution

Utilisez la console CloudTrail pour créer automatiquement les tables Athena. Pour plus d'informations, consultez la section Recherche dans les journaux AWS CloudTrail à l'aide d'Amazon Athena.

Créer la table Athena

  1. Ouvrez la console CloudTrail, puis sélectionnez Trails (Pistes) dans le volet de navigation. Notez le nom du compartiment S3.
  2. Dans le volet de navigation, choisissez Event history (Historique des événements), puis Run advanced queries in Amazon Athena (Exécuter des requêtes avancées dans Amazon Athena).
  3. Dans la fenêtre Create a table in Amazon Athena (Créeer une table dans Amazon Athena), ouvrez le menu Storage location (Emplacement de stockage), puis choisissez le compartiment Amazon Simple Storage Service (Amazon S3) avec les fichiers journaux CloudTrail.
  4. Sélectionnez Create table (Créer une table).
  5. Sélectionnez Go to Athena (Accéder à Athena).

Remarque : il se peut que le message d'erreur « Your account does not have sufficient permissions to create tables in Amazon Athena » (Votre compte ne dispose pas des autorisations suffisantes pour créer des tables dans Amazon Athena). Dans ce cas, attachez la stratégie gérée AmazonAthenaFullAccess en suivant les instructions décrites dans la section Attacher des stratégies IAM (Console).

Vous pouvez utiliser un ou plusieurs des exemples de requêtes suivants avec vos journaux. Remplacez votre_nomdetable__athena par le nom de la table Athena et id_clé_accès_ par la clé d'accès de 20 caractères. La clé d'accès commence généralement par les caractères AKIA ou ASIA.

Exécuter la requête Athena

Ouvrez la console Athena, sélectionnez New query (Nouvelle requête), puis sélectionnez la boîte de dialogue pour effacer l'exemple de requête.

Saisissez une requête, puis sélectionnez Exécuter la requête.

Afficher toutes les activités AWS API enregistrées pour une clé d'accès spécifique

SELECT eventTime, eventName, userIdentity.principalId
FROM your_athena_tablename 
WHERE userIdentity.accessKeyId like 'access_key_id'

Identifier toutes les modifications de groupe de sécurité pour une instance EC2

SELECT eventname, useridentity.username, sourceIPAddress, eventtime, requestparameters
FROM your_athena_tablename
WHERE (requestparameters like '%sg-5887f224%' or requestparameters like '%sg-e214609e%' or requestparameters like '%eni-6c5ca5a8%')
and eventtime > '2017-02-15T00:00:00Z'
order by eventtime asc;

Afficher toutes les connexions d'une console au cours des dernières 24 heures

SELECT useridentity.username, sourceipaddress, eventtime, additionaleventdata
FROM your_athena_tablename 
WHERE eventname = 'ConsoleLogin'
and eventtime >= '2017-02-17T00:00:00Z'
and eventtime < '2017-02-18T00:00:00Z';

Afficher tous les échecs de connexion à une console au cours des dernières 24 heures

SELECT useridentity.username, sourceipaddress, eventtime, additionaleventdata
FROM your_athena_tablename
WHERE eventname = 'ConsoleLogin'
and useridentity.username = 'HIDDEN_DUE_TO_SECURITY_REASONS'
and eventtime >= '2017-02-17T00:00:00Z'
and eventtime < '2017-02-18T00:00:00Z';

Identifier les augmentations des coûts mensuels CloudTrail

SELECT eventName,count(eventName) AS NumberOfChanges,eventSource
FROM your_athena_tablename 
WHERE eventtime >= '2019-01-01T00:00:00Z'and eventtime < '2019-01-31T00:00:00Z'
GROUP BY eventName, eventSource
ORDER BY NumberOfChanges DESC

Remarque : les valeurs eventtime définies sont limitées à un seul mois. Pour obtenir des résultats pour plusieurs mois, exécutez des requêtes supplémentaires.

Autorisations AWS Identity and Access Management (IAM) insuffisantes

SELECT count (*) as TotalEvents, useridentity.arn, eventsource, eventname, errorCode, errorMessage
FROM your_athena_tablename
WHERE (errorcode like '%Denied%' or errorcode like '%Unauthorized%')
AND eventtime >= '2019-10-28T00:00:00Z'
AND eventtime < '2019-10-29T00:00:00Z'
GROUP by eventsource, eventname, errorCode, errorMessage, useridentity.arn
ORDER by eventsource, eventname

Si les résultats n'affichent pas l'appel d'API ayant échoué, élargissez la plage de requêtes comme suit :  

SELECT count (*) as TotalEvents, useridentity.arn, eventsource, eventname, errorCode, errorMessage
FROM your_athena_tablename
WHERE errorcode <> ''
AND eventtime >= '2019-10-28T00:00:00Z'
AND eventtime < '2019-10-29T00:00:00Z'
GROUP by eventsource, eventname, errorCode, errorMessage, useridentity.arn
ORDER by eventsource, eventname