Comment puis-je répertorier l'historique des attachements ou des détachements d'un volume Amazon EBS spécifique à l'aide des commandes de l'interface de ligne de commande AWS (AWS CLI) ?

Date de la dernière mise à jour : 22/01/2021

Comment puis-je répertorier l'historique des attachements ou des détachements d'un volume Amazon Elastic Block Storage (Amazon EBS) spécifique à l'aide de l'interface de ligne de commande AWS (AWS CLI) ?

Brève description

Les ressources Amazon Elastic Compute Cloud (Amazon EC2) et Amazon EBS ne stockent pas l'historique des attachements ou des détachements. Toutefois, AWS CloudTrail conserve ces informations. CloudTrail est un service qui enregistre les appels d'API AWS et les événements pour les comptes AWS. Vous pouvez utiliser l'API AWS CloudTrail via l'interface de ligne de commande AWS CLI pour extraire le journal des attachements et des détachements.

Les volumes Amazon EBS attachés et détachés à l'aide des appels d'API RunInstances et TerminateInstances n'ont pas d'événements CloudTrail individuels. Ces événements n'apparaissent pas dans la sortie de l'API lookup events de CloudTrail.

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS, assurez-vous que vous utilisez la version la plus récente d’AWS CLI.

Exécutez l'API lookup events de CloudTrail. Cette commande utilise le processeur JSON (JMESPath) de l'interface de ligne de commande AWS (AWS CLI) pour rechercher les événements Attach (Attacher) et Detach (Détacher).

Vous disposez de deux méthodes pour renvoyer les données.

1.    Exécutez la commande suivante :

$ aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=ResourceName,AttributeValue=VOLUME_ID \
--max-results 3 \
--region REGION_ID \
--query 'Events[?EventName == `DetachVolume` || EventName == `AttachVolume`].{EventTime:EventTime,EventName:EventName,InstanceID:(Resources[1].ResourceName)}'

Remplacez VOLUME_ID par votre volume Amazon EBS et REGION_ID par la région appropriée. Utilisez la variable max-results pour définir le nombre d'événements de volume Amazon EBS renvoyés. Le nombre par défaut de résultats renvoyés est de 50, avec un maximum de 50 possibles.

2.    CloudTrail affiche les horodatages en heure Unix Epoch. Utilisez l'une des méthodes suivantes pour convertir l'horodatage en UTC :

macOS :

Supprimez le séparateur décimal de l'horodatage, puis exécutez la commande suivante :

$ date -r 1571065747 -u
Mon Oct 14 15:09:07 UTC 2019

Linux :

Exécutez la commande suivante :

$ date -d @1571065747.0 -u
Mon Oct 14 15:09:07 UTC 2019

Windows :

Convertissez l'horodatage à l'aide d'un convertisseur comme epochconverter.com.

Remarque : cette méthode utilise l'utilitaire sed et le processeur jq. Elle est recommandée pour les utilisateurs Linux uniquement.

L'utilitaire sed est utilisé pour transformer la valeur CloudTrail Event en un format compatible avec JSON. La plupart des distributions Linux sont livrées avec l'utilitaire sed déjà installé. Si tel n'est pas le cas, vous pouvez télécharger l'utilitaire à partir du site Web GNU sed.

Le processeur jq est utilisé pour rechercher et renvoyer les valeurs pour EventName, InstanceID, et EventTime. S'il n'est pas installé, vous pouvez le télécharger à partir du site Web du processeur jq.

Exécutez la commande suivante :

$ aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=ResourceName,AttributeValue=VOLUME_ID \
--max-results 3 \
--region REGION_ID \
--query 'Events[?EventName == `DetachVolume` || EventName == `AttachVolume`].CloudTrailEvent' | \
sed 's/\\//g' | sed 's/"}"/"}/g' | sed 's/"{"/{"/g' | \
jq '.[] | {EventName:.eventName, InstanceID:.requestParameters.instanceId, EventTime:.eventTime}'

Remplacez VOLUME_ID par votre volume Amazon EBS et REGION_ID par la région appropriée. Utilisez la variable max-results pour définir le nombre d'événements de volume Amazon EBS renvoyés. Le nombre par défaut de résultats renvoyés est de 50, avec un maximum de 50 possibles.

Consultez l'exemple de sortie suivant :

{
  "EventName": "AttachVolume",
  "InstanceID": "i-00a49ef5dd45af31b",
  "Time": "2019-10-02T15:36:18Z"
}
{
  "EventName": "DetachVolume",
  "InstanceID": "i-0554d4452aa4cf91b",
  "Time": "2019-10-02T14:26:04Z"
}
{
  "EventName": "AttachVolume",
  "InstanceID": "i-0554d4452aa4cf91b",
  "Time": "2019-10-02T14:25:42Z"
}

Remarque : CloudTrail a une durée par défaut de conservation de l'historique de recherche de 90 jours. Tout événement de plus de 90 jours n'apparaît pas. Pour conserver vos journaux d'événements plus de 90 jours :

1.    Créez votre propre journal de suivi dans CloudTrail.

2.    Stockez les journaux dans un compartiment Amazon Simple Storage Service (Amazon S3).

3.    Utilisez Amazon Athena pour interroger les journaux de votre compartiment Amazon S3.