Comment puis-je résoudre les problèmes de récupération des métadonnées d'instance sur mon instance Linux EC2 ?

Lecture de 4 minute(s)
0

Je n'arrive pas à récupérer les métadonnées de mon instance Linux Amazon Elastic Compute Cloud (Amazon EC2).

Brève description

Les métadonnées d'instance sont des informations relatives à l'instance EC2 comme l'ID de l'instance, les adresses IP publiques et privées, les groupes de sécurité, les rôles AWS Identity and Access Management (IAM), etc. Les métadonnées d'instance sont exposées à l'instance via des requêtes HTTP adressées à 169.254.169.254.

Vous pouvez rencontrer les problèmes suivants lors de la récupération des métadonnées d'instance à partir du service de métadonnées d'instance (IMDS) :

  • Erreurs de requête HTTP
  • Configuration du proxy
  • Règles de pare-feu locales
  • Limitation des demandes

Résolution

Erreurs de requête HTTP

Lorsque vous envoyez une requête HTTP pour récupérer les métadonnées d'une instance, les codes d'erreur HTTP suivants peuvent être renvoyés :

HTTP 404 - Not Found

L'erreur HTTP 404 s'applique à IMDS v1. Cette erreur se produit lorsque la ressource demandée n'est pas disponible. Vérifiez que vous utilisez bien la bonne URL.

400 - Bad Request

L'erreur 400 – Bad Request s'applique à IMDS v2. Cette erreur se produit si la requête PUT n'est pas valide.

401 - Unauthorized

L'erreur 401 - Unauthorized se produit si la requête GET utilise un jeton non valide. Dans ce cas, générez un nouveau jeton.

403 - Forbidden

L'erreur 403 - Forbidden se produit si la demande n'est pas autorisée ou si IMDS est désactivé. Exécutez la commande suivante pour vérifier l'état de l'IMDS. Dans l'exemple de commande suivant, remplacez your_instance_ID par la valeur adaptée à votre cas d'utilisation.

$ aws ec2 describe-instances -instance-ids  -query 'Reservations[].Instances[].MetadataOptions'

Voici un exemple de sortie de la commande précédente :

[
  {
    "State": "applied",
    "HttpTokens": "optional",
    "HttpPutResponseHopLimit": 1,
    "HttpEndpoint": "disabled",
    "HttpProtocolIpv6": "disabled",
    "InstanceMetadataTags": "disabled"
  }
]

Si l'option de commande indique que le HttpEndpoint est désactivé, exécutez la commande suivante :

aws ec2 modify-instance-metadata-options \
    --instance-id  \
    --http-endpoint enabled

Configuration du proxy

Si vous utilisez un proxy pour accéder à Internet, vous devez exclure l'adresse IP IMDS (169.254.169.254). Si l'adresse IP IMDS n'est pas exclue, il se peut que vous ne puissiez pas récupérer les métadonnées de l'instance.

Pour exclure l'adresse IP IMDS de l'utilisation du proxy, définissez une variable d'environnement NO_PROXY avec l'adresse suivante :

export NO_PROXY=169.254.169.254

Règles de pare-feu locales

Les pare-feu de l'instance peuvent empêcher certains ou tous les processus d'accéder à l'IMDS.

Assurez-vous que les pare-feu du système d'exploitation de l'instance ne bloquent pas le trafic sortant vers l'adresse IP des métadonnées de l'instance. Les pare-feu incluent iptables, UFW (pare-feu simple), etc.

Utilisez la commande suivante pour vérifier les règles de pare-feu pour iptables

sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
REJECT     tcp  --  anywhere             169.254.169.254      owner UID match 1000-10000 reject-with icmp-port-unreachable

Si le résultat de la liste iptables indique un rejet de la récupération des métadonnées, vous pouvez recevoir le message d'erreur suivant :

$ curl http://169.254.169.254/latest/meta-data/
curl: (7) Failed to connect to 169.254.169.254 port 80 after 0 ms: Connection refused

Pour corriger cette erreur, exécutez la commande suivante pour supprimer la règle :

$ sudo iptables -D OUTPUT -proto tcp -destination 169.254.169.254 -match owner -uid-owner 1000-10000 -jump REJECT

Limitation des demandes

Le trafic vers l'IMDS est limité en fonction du nombre de paquets par seconde. De plus, il existe une limite de 1 024 PPS pour chaque interface réseau élastique attachée à l'instance. Si votre débit PPS vers le service IMDS dépasse 1 024 PPS, la demande est limitée.

En cas de limitation, retentez votre demande avec une stratégie de backoff exponentiel.

Pour savoir à quelle fréquence les instances EC2 atteignent les limites de limitation, vérifiez la métrique linklocal_allowance_exceeded dans le pilote Elastic Network Interface. Cette métrique indique que le nombre de paquets formés en raison du trafic vers les services proxy locaux dépasse le maximum autorisé pour l'interface réseau.

Exécutez la commande suivante pour afficher la métrique linklocal_allowance_exceeded :

$ ethtool -S <Network-Interface>
eg: $ ethtool -S eth0

Informations connexes

Utilisation d'un proxy sur les instances Amazon EC2

Exemples de récupération des métadonnées d'instance

Limiter l'accès à IMDS

Limitation des requêtes

Métriques pour le pilote ENA

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