Comment utiliser CloudTrail pour rechercher des actions sur une ressource spécifique, par exemple trouver qui a supprimé un volume EBS sur une instance EC2 ?

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

Comment puis-je utiliser AWS CloudTrail pour rechercher des informations sur une ressource donnée, telles que les noms d'événements pour une ressource, ou la personne qui a supprimé un volume Amazon Elastic Block Store (Amazon EBS) ou un instantané sur une instance Amazon Elastic Compute Cloud (Amazon EC2) ?

Brève description

Vous pouvez utiliser AWS CloudTrail pour consigner et surveiller l'activité de comptes sur votre infrastructure AWS. Pour ce faire, CloudTrail doit être activé tout comme la journalisation dans la région AWS dans laquelle se situe la ressource EC2 que vous voulez interroger.

Important

  • Le taux de requêtes de recherche est limité à une requête par seconde et par compte. Si cette limite est dépassée, une erreur de limitation se produit.
  • Les événements qui se sont produits au cours d'une période sélectionnée ne sont pas disponibles à la recherche si la journalisation CloudTrail n'était pas activée lorsque les événements se sont produits.

Résolution

Les exemples suivants sont exécutés à partir de l'interface de ligne de commande AWS (AWS CLI). Notez que la plupart de ces commandes utilisent jq.

Utilisez la commande yum pour installer jq dans Amazon Linux.

yum install jq

Remarque : il existe des options d’installation de jq pour d'autres plates-formes.

Lister tous les noms d'événements pour une ressource donnée

L'exemple suivant utilise un ID de volume EBS pour obtenir la liste des événements récents pour n'importe quelle action d'API. Remplacez les valeurs d’attribut (AttributeValue) vol-0f59a355c2example et la région (--region) us-east-1 par vos propres valeurs.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=vol-0f59a355c2example --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

Remarque : CloudTrail peut prendre plus de temps que prévu pour remplir les appels récents.

Les mêmes exemples peuvent être exécutés à l'aide de différents ID de ressource, par exemple un instantané EBS. Remplacez les valeurs d’attribut (AttributeValue) snap-0993c0d9a8example et la région (--region) us-east-1 par vos valeurs.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=snap-0993c0d9a8example --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

Lister des événements pour une action d'API spécifique pour une ressource donnée

L'exemple suivant montre comment obtenir une liste des événements récents pour l'action d'API DeleteVolume pour un volume EBS. Remplacez les valeurs d’attribut (AttributeValue) vol-0f59a355c2example avec votre ID de volume.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=vol-0f59a355c2example --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output json --region us-east-1 | jq -r '.[] | select(.event == "DeleteVolume")'

Voici un exemple du résultat obtenu :

{
  "username": "jdoe",
  "eventid": "e3ec4051-9999-4e87-9999-9cc72example",
  "resource": "vol-0f59a355c2example",
  "accesskey": "ASIAXUZVKEUACEXAMPLE",
  "time": 1550191014,
  "event": "DeleteVolume"
}

Afficher un nom d'événement spécifique pour toutes les ressources

L'exemple suivant liste les volumes EBS supprimés en utilisant le nom d'événement DeleteVolume comme filtre. Remplacez --region us-east-1 par votre région.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=DeleteVolume --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

Lister les instances EC2 mises hors service pour toutes les ressources

L'exemple suivant liste les instances EC2 ayant subi l’événement TerminateInstances. Remplacez –region us-east-1 par votre région.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=TerminateInstances --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1

Afficher des détails pour un ID d'événement spécifique

Après avoir trouvé un ID d'événement, vous pouvez afficher les détails relatifs à cet événement. Remplacez la valeur d’attribut (AttributeValue) 0840b15f-75b5-4082-a194-86e15example par votre ID d’événement et remplacez --region us-east-1 par votre région.

$ aws cloudtrail lookup-events --query "Events[0].CloudTrailEvent" --output text --lookup-attribute AttributeKey=EventId,AttributeValue=0840b15f-75b5-4082-a194-86e15example --region us-east-1 | jq -r '.'

Voici un exemple de résultat :

{
  "eventVersion": "1.05",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "AROAJ3THTCWDOKEXAMPLE:jdoe",
    "arn": "arn:aws:sts::52570EXAMPLE:assumed-role/Admin/jdoe",
    "accountId": "52570example",
    "accessKeyId": "ASIAXUZVKEUAKEXAMPLE",
    "sessionContext": {
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "2019-02-14T23:55:15Z"
      },
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AROAJ3THTCWDOKEXAMPLE",
        "arn": "arn:aws:iam::52570EXAMPLE:role/Admin",
        "accountId": "52570EXAMPLE",
        "userName": "Admin"
      }
    }
  },
  "eventTime": "2019-02-15T00:48:05Z",
  "eventSource": "ec2.amazonaws.com",
  "eventName": "DeleteVolume",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "999.999.999.999",
  "userAgent": "aws-cli/1.16.999 Python/2.7.15 Darwin/17.7.0 botocore/1.12.91",
  "requestParameters": {
    "volumeId": "vol-0c50d65c6eexample"
  },
  "responseElements": {
    "_return": true
  },
  "requestID": "a8a43ccd-736d-4b09-ba75-24b9cexample",
  "eventID": "0840b15f-75b5-4082-a194-86e15example",
  "eventType": "AwsApiCall",
  "recipientAccountId": "52570EXAMPLE"
}

Spécifier une plage de dates

Vous pouvez utiliser les paramètres heure de début (--start-time) et heure de fin (--end-time) pour spécifier une plage de dates d'événements. Les événements listés se sont produits après l’heure de début et avant ou pendant l’heure de fin.

La valeur d’heure de début par défaut est la date la plus récente à laquelle les données ont été disponibles au cours des 90 derniers jours. La valeur d’heure de fin par défaut est le moment de l'événement le plus proche de l'heure actuelle.

Si l'heure de début spécifiée est postérieure à l’heure de fin spécifiée, une erreur InvalidTimeRangeException est renvoyée.

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=DeleteVolume --query 'Events[].{username:Username,time:EventTime,event:EventName,eventid:EventId,accesskey:AccessKeyId,resource:(Resources[0].ResourceName)}' --output table --region us-east-1 --start-time 2019-01-01T13:00Z --end-time 2019-03-01T14:00Z

Remarque : choisissez l'horodatage de votre choix dans la liste Formats d’horodatage valides.


Cette page vous a-t-elle été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?