Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisez Instance Metadata Service
Vous pouvez accéder aux métadonnées d’instance à partir d’une instance en cours d’exécution en utilisant l’une des méthodes suivantes :
-
Service des métadonnées d’instance Version 2 (IMDSv2) – méthode orientée session
Pour obtenir des exemples, consultez Exemples pour IMDSv2.
-
Service de métadonnées d'instance version 1 (IMDSv1) : une méthode request/response
Pour obtenir des exemples, consultez Exemples pour IMDSv1.
Par défaut, vous pouvez utiliser IMDSv1 ou IMDSv2, ou les deux.
Vous pouvez configurer le service de métadonnées d'instance (IMDS) sur chaque instance pour n'accepter que les appels IMDSv2, ce qui entraînera l'échec des appels IMDSv1. Pour plus d’informations sur la configuration de votre instance pour l’utilisation d’IMDSv2, veuillez consulter la rubrique Configuration du service des métadonnées d’instance.
Les en-têtes PUT ou GET sont uniques à IMDSv2. Si ces en-têtes sont présents dans la requête, celle-ci est destinée à IMDSv2. Si aucun en-tête n’est présent, on suppose que la requête est destinée à IMDSv1.
Pour un examen approfondi d’IMDSv2, veuillez consulter le billet de blog Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Service
Rubriques
Fonctionnement de Service des métadonnées d’instance Version 2
IMDSv2 utilise des demandes orientées session. Lorsque vous utilisez des demandes orientées session, vous créez un jeton de session qui définit la durée de la session, qui doit être d’une seconde au minimum et de six heures au maximum. Durant la période spécifiée, vous pouvez utiliser le même jeton de session pour les demandes suivantes. Une fois la période spécifiée arrivée à expiration, vous devez créer un nouveau jeton de session à utiliser pour les futures demandes.
Note
Les exemples de cette section utilisent l’adresse IPv4 du service des métadonnées d’instance (IMDS) : 169.254.169.254. Si vous récupérez des métadonnées d’instance pour les instances EC2 sur l’adresse IPv6, assurez-vous d’activer et d’utiliser l’adresse IPv6 à la place : [fd00:ec2::254]. L’adresse IPv6 de l’IMDS est compatible avec les commandes IMDSv2. L'adresse IPv6 n'est accessible que sur Nitro-based les instances d'un IPv6-supported sous-réseau (double pile ou IPv6 uniquement).
L’exemple suivant utilise un script shell Linux et PowerShell ainsi que IMDSv2 pour extraire les éléments de métadonnées d’instance de haut niveau. Chaque exemple :
-
Crée un jeton de session d’une durée de six heures (21 600 secondes) en utilisant la demande
PUT -
Stockez l’en-tête du jeton de session dans une variable nommée
TOKEN(sous Linux) outoken(sous Windows). -
Demande les éléments de métadonnées de haut niveau à l’aide du jeton
Vous pouvez exécuter deux commandes distinctes ou les combiner.
Commandes distinctes
Tout d’abord, générez un jeton à l’aide de la commande suivante.
[ec2-user ~]$TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
Utilisez ensuite le jeton pour générer des éléments de métadonnées de niveau supérieur à l’aide de la commande suivante.
[ec2-user ~]$curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
Commandes combinées
Vous pouvez stocker le jeton et combiner les commandes. L’exemple suivant combine les deux commandes ci-dessus et stocke l’en-tête du jeton de session dans une variable nommée TOKEN.
Note
En cas d’erreur lors de la création du jeton, un message d’erreur remplace le jeton valide dans la variable et la commande ne fonctionne pas.
[ec2-user ~]$TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
Une fois que vous avez créé un jeton, vous pouvez le réutiliser jusqu’à son expiration. Dans l’exemple de commande suivant, qui permet d’obtenir l’ID de l’AMI utilisée pour lancer l’instance, le jeton stocké dans $TOKEN dans l’exemple précédent est réutilisé.
[ec2-user ~]$curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
PS C:\>[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
PS C:\>Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/
Une fois que vous avez créé un jeton, vous pouvez le réutiliser jusqu’à son expiration. Dans l’exemple de commande suivant, qui permet d’obtenir l’ID de l’AMI utilisée pour lancer l’instance, le jeton stocké dans $token dans l’exemple précédent est réutilisé.
PS C:\>Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} ` -Method GET -uri http://169.254.169.254/latest/meta-data/ami-id
Lorsque vous utilisez IMDSv2 pour demander les métadonnées d’une instance, la demande doit inclure les éléments suivants :
-
Utilisez une demande
PUTpour lancer une session sur le service des métadonnées d’instance. La demandePUTrenvoie un jeton qui doit être inclus dans les demandesGETsuivantes envoyées au service des métadonnées d’instance. Le jeton est obligatoire pour accéder aux métadonnées à l’aide de IMDSv2. -
Incluez le jeton dans toutes les demandes
GETenvoyées à l’IMDS. Lorsque l’utilisation de jeton est définie surrequired, les demandes sans jeton valide ou contenant un jeton arrivé à expiration reçoivent un code d’erreur HTTP401 - Unauthorized.-
Le jeton est une clé propre à l’instance. Le jeton n’est pas valide sur les autres instances EC2 et sera rejeté si vous tentez de l’utiliser ailleurs que sur l’instance sur laquelle il a été généré.
-
La demande
PUTdoit inclure un en-tête spécifiant la durée time-to-live (TTL) du jeton, en secondes, jusqu’à six heures au maximum (21 600 secondes). Le jeton représente une session logique. La durée de vie (TTL) définit la durée de validité du jeton et, par conséquent, la durée de la session. -
Une fois qu’un jeton est arrivé à expiration, pour pouvoir continuer à accéder aux métadonnées de l’instance, vous devez créer une nouvelle session en utilisant un autre
PUT. -
Vous pouvez choisir de réutiliser un jeton ou d’en créer un nouveau pour chaque demande. Pour un faible nombre de demandes, il peut être plus facile de générer et d’utiliser immédiatement un jeton chaque fois que vous avez besoin d’accéder à l’IMDS. Cependant, pour une plus grande productivité, vous pouvez spécifier une durée plus longue pour le jeton et le réutiliser plutôt que de devoir écrire une demande
PUTchaque fois que vous avez besoin de demander des métadonnées d’instance. Il n’existe pas de limite pratique au nombre de jetons simultanés, chacun représentant sa propre session. IMDSv2 est toutefois soumis aux limites normales de connexion de l’IMDS. Pour de plus amples informations, veuillez consulter Limitation des demandes.
-
Le HTTP GET et HEAD les méthodes sont autorisés dans les demandes de métadonnées d'instance IMDSv2. PUTles demandes sont rejetées si elles contiennent un X-Forwarded-For en-tête.
Par défaut, la réponse aux demandes PUT possède une durée time-to-live (hop limit) de réponse de 1 au niveau du protocole IP. Si vous avez besoin d'une limite de sauts plus importante, vous pouvez l'ajuster à l'aide de la commande https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html AWS CLI modify-instance-metadata-options. Par exemple, vous pouvez avoir besoin d’une durée de vie plus élevée pour des raisons de compatibilité en amont avec les services de conteneur s’exécutant sur l’instance. Pour de plus amples informations, veuillez consulter Configurer les options de métadonnées d’instance pour les instances existantes.
Utilisez un AWS Kit SDK
Pour utiliser IMDSv2, vos instances EC2 doivent utiliser une version du AWS SDK qui prend en charge l'utilisation d'IMDSv2. Les dernières versions de tous les AWS SDK prennent en charge l'utilisation d'IMDSv2.
Important
Nous vous recommandons de vous tenir au courant des versions du kit SDK afin de rester à jour avec les dernières fonctionnalités, mises à jour de sécurité et dépendances sous-jacentes. L’utilisation continue d’une version du kit SDK non prise en charge n’est pas recommandée et est effectuée à votre discrétion. Pour plus d’informations, veuillez consulter la politique de maintenance des kits SDK et des outils AWS dans le Guide de référence des kits SDK et des outils AWS .
Voici les versions minimales qui prennent en charge IMDSv2 :
-
AWS CLI
: 1.16.289 -
AWS Tools for Windows PowerShell
– 4.0.1.0 -
AWS SDK pour .NET
: 3.3.634.1 -
AWS SDK pour C++
: 1.7.229 -
AWS SDK pour Go
: 1.25.38 -
AWS SDK pour Go v2
— 0.19.0 -
AWS SDK pour Java
: 1.11.678 -
AWS SDK for Java 2.x
: 2.10.21 -
AWS SDK pour JavaScript Node.js
in-2.722.0 -
AWS SDK pour Kotlin
: 1.1.4 -
AWS SDK pour PHP
: 3.147.7 -
AWS SDK pour Python (Boto3)
: 1.12.6 -
AWS SDK pour Ruby
: 3.79.0
Exemples pour IMDSv2
Exécutez les exemples suivants sur votre instance Amazon EC2 pour récupérer les métadonnées de l’instance pour IMDSv2.
Sur les instances Windows, vous pouvez utiliser Windows PowerShell ou installer cURL ou wget. Si vous installez un outil tiers sur une instance Windows, veillez à lire attentivement la documentation qui l’accompagne, car les appels et les résultats peuvent être différents de ceux décrits ici.
Obtenir les versions disponibles des métadonnées d’instance
Cet exemple permet d’obtenir les versions disponibles des métadonnées d’instance. Chaque version fait référence à un build de métadonnées d’instance lorsque de nouvelles catégories de métadonnées d’instance ont été publiées. Les versions de métadonnées d’instance ne sont pas en corrélation avec les versions de l’API Amazon EC2. Les versions antérieures sont disponibles au cas où vous ayez des scripts reposant sur la structure et les informations présentes dans une version précédente.
Obtenir les éléments de métadonnées de niveau supérieur
Cet exemple permet d’obtenir les éléments de métadonnées de niveau supérieur. Pour plus d’informations sur les éléments de la réponse, consultez la rubrique Catégories de métadonnées d’instance.
Notez que les balises ne sont incluses dans cette sortie que si vous en avez autorisé l’accès. Pour de plus amples informations, veuillez consulter Activation de l’accès aux balises dans les métadonnées d’instance.
Obtenir les valeurs des éléments de métadonnées
Ces exemples permettent d’obtenir les valeurs de certains des éléments de métadonnées de premier niveau qui ont été obtenus dans l’exemple précédent. Ces demandes utilisent le jeton stocké qui a été créé à l’aide de la commande de l’exemple précédent. Le jeton ne doit pas avoir expiré.
Obtenir la liste des clés publiques disponibles
Cet exemple permet d’obtenir la liste des clés publiques disponibles.
Montrer les formats pour lesquels une clé publique 0 est disponible
Cet exemple montre les formats pour lesquels une clé publique 0 est disponible.
Obtenir la clé publique 0 (au format clé OpenSSH)
Cet exemple permet d’obtenir la clé publique 0 (au format clé OpenSSH).
Obtenir l’ID de sous-réseau d’une instance
Cet exemple permet d’obtenir l’ID de sous-réseau pour une instance.
Obtenir les identifications d’une instance
Si l’accès aux balises d’instance dans les métadonnées d’instance est activé, vous pouvez obtenir les balises d’une instance à partir des métadonnées d’instance. Pour de plus amples informations, veuillez consulter Extraire les identifications à partir des métadonnées d’instance.
Exemples pour IMDSv1
Exécutez les exemples suivants sur votre instance Amazon EC2 pour récupérer les métadonnées de l’instance pour IMDSv1.
Sur les instances Windows, vous pouvez utiliser Windows PowerShell ou installer cURL ou wget. Si vous installez un outil tiers sur une instance Windows, veillez à lire attentivement la documentation qui l’accompagne, car les appels et les résultats peuvent être différents de ceux décrits ici.
Obtenir les versions disponibles des métadonnées d’instance
Cet exemple permet d’obtenir les versions disponibles des métadonnées d’instance. Chaque version fait référence à un build de métadonnées d’instance lorsque de nouvelles catégories de métadonnées d’instance ont été publiées. Les versions de métadonnées d’instance ne sont pas en corrélation avec les versions de l’API Amazon EC2. Les versions antérieures sont disponibles au cas où vous ayez des scripts reposant sur la structure et les informations présentes dans une version précédente.
Obtenir les éléments de métadonnées de niveau supérieur
Cet exemple permet d’obtenir les éléments de métadonnées de niveau supérieur. Pour plus d’informations sur les éléments de la réponse, consultez la rubrique Catégories de métadonnées d’instance.
Notez que les balises ne sont incluses dans cette sortie que si vous en avez autorisé l’accès. Pour de plus amples informations, veuillez consulter Activation de l’accès aux balises dans les métadonnées d’instance.
Obtenir les valeurs des éléments de métadonnées
Ces exemples permettent d’obtenir les valeurs de certains des éléments de métadonnées de premier niveau qui ont été obtenus dans l’exemple précédent.
Obtenir la liste des clés publiques disponibles
Cet exemple permet d’obtenir la liste des clés publiques disponibles.
Montrer les formats pour lesquels une clé publique 0 est disponible
Cet exemple montre les formats pour lesquels une clé publique 0 est disponible.
Obtenir la clé publique 0 (au format clé OpenSSH)
Cet exemple permet d’obtenir la clé publique 0 (au format clé OpenSSH).
Obtenir l’ID de sous-réseau d’une instance
Cet exemple permet d’obtenir l’ID de sous-réseau pour une instance.
Obtenir les identifications d’une instance
Si l’accès aux balises d’instance dans les métadonnées d’instance est activé, vous pouvez obtenir les balises d’une instance à partir des métadonnées d’instance. Pour de plus amples informations, veuillez consulter Extraire les identifications à partir des métadonnées d’instance.