[Lab] Explorer et utiliser EC2 Instance Metadata (IMDS)
Objectifs
Lancer une instance EC2 sous AWS.
Comprendre et utiliser Instance Metadata Service (IMDS).
Récupérer les métadonnées de l’instance depuis le terminal.
Expérimenter IMDSv2 pour une meilleure sécurité.
Prérequis
Un compte AWS actif.
Accès à la console AWS et à un terminal local avec AWS CLI installé.
Une clé SSH valide pour se connecter à l’instance.
Étape 1 : Création d’une instance EC2
Accéder à la console AWS
Connectez-vous à la console AWS : https://aws.amazon.com/console/
Recherchez EC2 dans la barre de recherche et ouvrez le service.
Lancer une nouvelle instance
Cliquez sur Instances → Launch instance.
Donnez un nom à votre instance (ex: Lab-EC2-Metadata).
Sélectionnez une image Amazon Machine Image (AMI), par exemple :
Amazon Linux 2023 (recommandé)
Choisissez un type d’instance : t2.micro (gratuite avec Free Tier).
Continuer sans paire de clés (Keypair)
Choisissez le VPC par défaut
Créer un groupe de sécurité qui autorise le trafic ssh depuis votre IP ou depuis Internet (0.0.0.0/0)
Configurer les paramètres avancés
Dans Advanced details, vérifiez que
Métadonnées accessibles = Activé
Version des métadonnées = V1 et V2 (jeton facultatif)
Lancer l’instance
Cliquez sur Launch instance et attendez quelques minutes que l’instance démarre.
Se connecter avec EC2 Instance connect
Allez dans la liste des instances.
Sélectionnez votre instance EC2 et cliquez sur Connect
Choisissez l’option EC2 Instance Connect.
Une fois connecté, vous devriez voir une invite de commande similaire à :
[ec2-user@ip-172-31-XX-XX ~]$
Étape 3 : Accéder aux métadonnées de l'instance
Le service IMDS fournit des informations sur l’instance via une requête HTTP.
Lister les catégories disponibles
curl http://169.254.169.254/latest/meta-data/
Exemple de sortie :
ami-id
instance-id
instance-type
local-ipv4
public-ipv4
security-groups
Récupérer l’ID de l’instance
i-0abc123def456gh78
Récupérer le type d’instance
curl http://169.254.169.254/latest/meta-data/instance-type
Récupérer l’adresse IP privée de l’instance
curl http://169.254.169.254/latest/meta-data/local-ipv4
Obtenir l’AMI utilisée pour lancer l’instance
curl http://169.254.169.254/latest/meta-data/ami-id
Étape 4 : Tester Instance Metadata Service v2 (IMDSv2)
Obtenir un jeton d’authentification
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
Utiliser le jeton pour récupérer des métadonnées
curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
Récupérer l’ID de l’instance avec IMDSv2
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id
Étape 5 : Automatiser la récupération des métadonnées
Créer un script Bash
#!/bin/bash
echo "Instance ID: $(curl -s http://169.254.169.254/latest/meta-data/instance-id)"
echo "Type: $(curl -s http://169.254.169.254/latest/meta-data/instance-type)"
echo "Local IP: $(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)"
echo "Public IP: $(curl -s http://169.254.169.254/latest/meta-data/public-ipv4)"
Enregistrer et quitter (CTRL + X, Y, ENTER)
Rendre le script exécutable et l’exécuter
bash
chmod +x metadata-info.sh
./metadata-info.sh
Étape 6 : Sécuriser l’accès aux métadonnées
Par défaut, IMDSv1 permet un accès facile mais peut être exploité. Il est recommandé de forcer l’utilisation d’IMDSv2 uniquement.
Forcer IMDSv2
A l’aide d’AWS CloudShell, exécutez la commande suivante sur AWS CLI en ayant renseigné avec l’id de votre instance en lieu et place de i-xxxxxxxxxx :
aws ec2 modify-instance-metadata-options --instance-id i-xxxxxxxxxx --http-tokens required
- Explication :
–http-tokens required oblige l’utilisation de IMDSv2 uniquement.
Tester après avoir désactivé IMDSv1
curl http://169.254.169.254/latest/meta-data/
Cela ne devrait plus marcher car IMDSv1 est désactivé.
Conclusion
Ce lab vous a permis de :
Lancer une instance EC2 et s’y connecter via SSH.
Accéder aux métadonnées d’une instance avec IMDSv1 et IMDSv2.
Expérimenter la sécurisation des métadonnées avec IMDSv2 uniquement.
Automatiser la récupération des informations EC2 avec un script.