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 ?

Lecture de 5 minute(s)
0

Je souhaite rechercher des informations sur une ressource spécifique à l'aide d'AWS CloudTrail.

Résolution

Important :

  • le nombre de demandes de recherche est limité à une par seconde pour chaque compte. Si vous dépassez cette limite, une erreur de limitation se produira.
  • Vérifiez que la journalisation CloudTrail est activée avant qu'un événement ne se produise. Autrement, vous ne pourrez pas rechercher l'événement dans la plage temporelle pendant laquelle il s'est produit.
  • Les services AWS pourraient continuer à ajouter des événements. CloudTrail enregistre les événements dans l'historique des événements.
  • Si vous recevez des messages d'erreur lors de l'exécution des commandes de l'interface de la ligne de commande AWS (AWS CLI), vérifiez que vous utilisez bien la version la plus récente d'AWS CLI.

Les exemples suivants sont exécutés à partir de l'interface de la ligne de commande AWS. La plupart de ces commandes utilisent jq, le processeur JSON en ligne de commande. Pour plus d'informations sur jq, consultez le site web de jq.

Pour installer jq sur Amazon Linux, utilisez yum :

yum install jq

Remarque : il existe des options d'installation de jq pour d'autres plateformes. Pour plus d'informations sur les options d'installation de jq, voir Download jq sur le site web de jq.

Répertorier tous les noms d'événements pour une ressource spécifique

L'exemple suivant utilise un ID de volume Amazon Elastic Block Store (Amazon EBS) pour obtenir une liste des événements récents pour toute action d'API. Remplacez la valeur AttributeValue de vol-0f59a355c2example par l'ID de volume et la valeur us-east-1 par votre région.

$ 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 pourrait prendre plus de temps que prévu pour remplir les appels récents.

Vous pouvez utiliser différents identifiants de ressource, tels qu'un instantané EBS, pour exécuter le même exemple. Remplacez la valeur AttributeValue de snap-0993c0d9a8example par l'ID d'instantané et la valeur us-east-1 par votre région.

$ 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

Répertorier les événements concernant une action d'API donnée pour une ressource spécifique

L'exemple suivant montre comment obtenir une liste des événements récents pour l'action d'API DeleteVolume sur un volume EBS. Remplacez la valeur AttributeValue de vol-0f59a355c2example par l'ID du 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")'

Exemple de sortie :

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

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

L'exemple suivant utilise le nom d'événement DeleteVolume comme filtre pour répertorier les volumes EBS supprimés. Remplacez la valeur 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

Répertorier les instances EC2 résiliées pour toutes les ressources

L'exemple suivant répertorie les dernières instances EC2 TerminateInstances. Remplacez la valeur -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 les détails d'un d'événement spécifique

Une fois que vous avez trouvé un identifiant d'événement, vous pouvez afficher les détails de cet événement. Remplacez la valeur AttributeValue de 0840b15f-75b5-4082-a194-86e15example par l'ID d'événement et la valeur 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 '.'

Exemple de sortie :

{  "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

Afin de spécifier une plage de dates pour les événements, utilisez les paramètres --start-time et --end-time :

$ 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 votre format préféré dans la liste des formats d'horodatage valides.

Les événements répertoriés se produisent dans la plage de dates, entre les valeurs « start time » et « end time ».

La valeur « start time » par défaut est la première date/heure à laquelle les données sont disponibles au cours des 90 derniers jours. La valeur « end time » par défaut est la date/heure de l'événement qui s'est produit la plus proche de la date/heure actuelle. Si la valeur « start time » spécifiée est postérieure à la valeur « end time » spécifiée, un message d'erreur InvalidTimeRangeException s'affiche.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 8 mois