Comment afficher une liste de mes instances Amazon EC2 connectées à Amazon EFS ?

Dernière mise à jour : 17/02/2021

Je souhaite voir une liste de mes instances Amazon Elastic Compute Cloud (Amazon EC2) qui ont monté un Amazon Elastic File System (Amazon EFS). Comment puis-je procéder ?

Brève description

Le trafic sur l'interface réseau Elastic de chaque cible de montage Amazon EFS est suivi à l'aide des journaux de flux VPC. Les journaux de flux peuvent être transmis à Amazon CloudWatch logs. Grâce à CloudWatch Logs Insights, le flux de trafic sur l'interface réseau Elastic de la cible de montage est filtré pour fournir la liste des instances Amazon EC2 qui ont monté un Amazon EFS dans un horodatage spécifique.

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes à partir de l'interface de ligne de commande AWS (CLI AWS), assurez-vous d'utiliser la version la plus récente de l’interface.

Effectuez les étapes suivantes une fois. Après avoir terminé ces étapes, chaque fois que vous souhaitez répertorier les adresses IP des clients montant le système Amazon EFS, exécutez une requête pour créer une liste actualisée.

Créez un groupe de journaux

1.   Ouvrez la console CloudWatch, puis choisissez Journaux.
2.   Sélectionnez le menu Actions , puis sélectionnez Créer un groupe de journaux.
3.   Saisissez un nom de groupe de journaux, puis sélectionnez Créer un groupe de journaux.

Créez un rôle Identity and Access Management (IAM) avec l'autorisation de publier des journaux de flux dans CloudWatch Logs

Obtenez la liste des interfaces réseau Elastic utilisées par la cible de montage de votre Amazon EFS

Remarque : Amazon EFS aura une cible de montage différente pour chaque zone de disponibilité.

1.   Ouvrez la console Amazon EFS.
2.   Sélectionnez l'Amazon EFS spécifique et notez l' ID d'interface réseau pour chaque cible de montage.

Créez les journaux de flux

1.   Ouvrez la console Amazon EC2, puis sélectionnez Interfaces réseau.
2.   Sélectionnez toutes les interfaces réseau Elastic que vous avez notées à l'étape 3 et qui sont utilisées par la cible de montage.
3.   Sélectionnez le menu Actions, puis Créer un journal de flux. Utilisez les valeurs suivantes lors de la création du journal de flux :

      Filtre : Sélectionnez Tout.
      Destination : Sélectionnez Envoyer à CloudWatch Logs.    
      Groupe de journaux de destination : choisissez le groupe de journaux créé à l'étape 1.
      Rôle IAM : choisissez le rôle IAM créé à l'étape 2.

4.   Sélectionnez Créer.
5.   Surveillez le statut du journal de flux en sélectionnant l'interface réseau Elastic pour laquelle vous avez créé un journal de flux. Dans le bas de l'écran, sélectionnez Flow Logs (Journaux de flux). Vérifiez que Statut ait la valeur Actif.
6.   Le premier journal de flux doit être transmis à CloudWatch Logs dans un délai de 10 minutes environ.

Vérifiez que les journaux de flux se trouvent dans CloudWatch Logs

1.   Ouvrez la console CloudWatch, puis choisissez Journaux.
2.   Sélectionnez le groupe de journaux créé à l'étape 1.
3.   Vérifiez que tous les flux de journaux créés à l'étape 4 apparaissent. Chaque interface réseau Elastic possède un flux de journaux différent.

Exécutez une requête

Pour exécuter une requête dans CloudWatch Logs Insights :

1.   Dans la console CloudWatch, sélectionnez Insights.
2.   Sélectionnez les groupes de journaux créés à l'étape 1 dans le menu déroulant.
3.   Sélectionnez la durée de consultation des journaux de flux (15 dernières minutes, 30 dernières minutes, 1 heure).
4.   Saisissez la requête suivante :

filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc

Remarque : la requête ci-dessus examine tous les journaux de flux générés pour toutes les cibles de montage et filtre les journaux dont le port de destination était défini sur Port=2049 (les clients Amazon EFS se connectent aux cibles de montage sur le port NFS 2049). Toutes les adresses IP source uniques (adresses IP client Amazon EFS) sont récupérées et triées en fonction des connexions client les plus actives. L'activité est déterminée par le nombre d'entrées dans le journal de flux.

5.   Sélectionnez Exécuter la requête. La sortie contient la liste des adresses IP privées de toutes les instances Amazon EC2 sur lesquelles vous avez monté Amazon EFS.

Voici un exemple de résultat de la requête :

#          srcAddr              FlowLogEntries
1      172.31.12.60                 78
2      172.31.57.233                36
3      172.31.53.144                33
4      172.31.74.79                 30
5      172.31.23.86                 26
6      172.31.63.215                25

Pour exécuter une requête à partir de l'interface de ligne de commande AWS (CLI AWS) :

1.   Une fois le journal de flux VPC configuré, vous pouvez utiliser une commande CLI AWS pour exécuter la requête.

2.   Vérifiez que l'interface de ligne de commande AWS est mise à jour vers la dernière version :

$ pip install --upgrade awscli

3.   Vérifiez que jq est installé :

yum install -y jq

4.   Utilisez la requête d'interface de ligne de commande AWS suivante à l'aide de ces paramètres de requête :

log-group-name : entrez le nom du groupe de journaux que vous avez créé à l'étape 1.

start-time / end-time : ces valeurs sont exprimées en heure Unix/époque. Utilisez le convertisseur disponible sur epochconverter.com pour convertir les horodatages lisibles par l'utilisateur en heure Unix/époque.

test.json : vous pouvez éventuellement modifier le nom du fichier json chaque fois que vous exécutez cette commande. La modification du nom évite de fusionner la sortie précédente avec la nouvelle sortie.

sleep : cette valeur (en secondes) est utilisée comme délai pendant l'exécution de la requête CloudWatch Logs Insights. La valeur saisie dépend de la durée de vérification des journaux de flux. Si vous souhaitez passer en revue les journaux pour une durée plus longue, par exemple, sur plusieurs semaines, augmentez le temps de veille.

aws logs start-query --log-group-name EFS-ENI-logs --start-time 1549002413 --end-time 1553063276 --query-string "filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc" >> test.json && sleep 10 && jq .queryId test.json | xargs aws logs get-query-results --query-id

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?