Interrogez les propriétés de l'instance, telles que les ID et les adresses IP, depuis une instance ECS, et appliquez le mode de renforcement de la sécurité pour prévenir les attaques SSRF.
Obtenir les métadonnées d'instance
Les métadonnées d'instance incluent des attributs tels que l'ID de l'instance, la configuration réseau et les identifiants d'accès.
Méthode 1 : Mode de renforcement de la sécurité (recommandé)
Obtenez un jeton d'accès temporaire, puis incluez-le dans votre requête de métadonnées.
Linux
Connectez-vous à l'instance.
-
Obtenez un jeton temporaire.
TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:21600"`Le paramètre X-aliyun-ecs-metadata-token-ttl-seconds spécifie la durée de vie du jeton (TTL) en secondes. Valeurs valides : 1 à 21600.
-
Incluez le jeton dans votre requête pour récupérer les métadonnées.
curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/instance-idRemplacez
instance-idpar d'autres éléments de métadonnées selon vos besoins, tels que mac ou hostname.En cas de succès, le terminal affiche uniquement la chaîne d'ID de l'instance, par exemple,
i-bp1******.
Windows
Connectez-vous à l'instance.
-
Obtenez un jeton temporaire.
$token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://100.100.100.200/latest/api/tokenLe paramètre X-aliyun-ecs-metadata-token-ttl-seconds spécifie la durée de vie du jeton (TTL) en secondes. Valeurs valides : 1 à 21600.
-
Incluez le jeton dans votre requête pour récupérer les métadonnées.
Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/instance-idRemplacez
instance-idpar d'autres éléments de métadonnées selon vos besoins, tels que mac ou hostname.En cas de succès, le terminal affiche uniquement la chaîne d'ID de l'instance, par exemple,
i-bp1******.
Méthode 2 : Mode normal
Le mode normal n'est pas sécurisé et n'est pas recommandé.
-
Linux :
# Send a GET request to get the instance ID. curl http://100.100.100.200/latest/meta-data/instance-id -
Windows :
# Send a GET request to get the instance ID. Invoke-RestMethod -Uri http://100.100.100.200/latest/meta-data/instance-id -Method Get
Activer uniquement le mode de renforcement de la sécurité
Activez le Security Hardening Mode afin que les métadonnées ne soient accessibles qu'avec un jeton. Les requêtes en mode normal renvoient une erreur 403 - Forbidden. Par défaut, les instances ECS autorisent l'accès sans jeton (mode normal), ce qui présente un risque élevé d'attaques SSRF.
Une attaque typique exploite une fonctionnalité d'application, telle que le téléchargement d'une image depuis une URL externe. Un attaquant conçoit une requête qui incite le serveur à interroger le service de métadonnées, volant ainsi les identifiants temporaires du rôle RAM. Si le rôle dispose d'autorisations élevées, l'attaquant pourrait prendre le contrôle de vos ressources cloud ou de l'intégralité de votre compte Alibaba Cloud.
Activer le mode de renforcement de la sécurité pour une nouvelle instance
Console
Lorsque vous créez une instance, définissez sur Security Hardening Mode.
Si le Security Hardening Mode n'est pas disponible lors de la création d'une instance à partir d'une image personnalisée, mettez à niveau l'image.
CLI
Appelez RunInstances ou CreateInstance avec HttpEndpoint=enabled et HttpTokens=required. Exemple :
Cet exemple crée une instance Linux en security hardening mode .
aliyun ecs RunInstances \
--region cn-hangzhou \
--RegionId 'cn-hangzhou' \
--ImageId 'aliyun_3_x64_20G_alibase_20250629.vhd' \
--InstanceType 'ecs.g7.large' \
--VSwitchId 'vsw-bp1******trg' \
--SecurityGroupId 'sg-bp1******dgl' \
--SystemDisk.Size 40 \
--SystemDisk.Category cloud_essd \
--HttpEndpoint enabled \
--HttpTokens required
API
Appelez RunInstances ou CreateInstance avec HttpEndpoint=enabled et HttpTokens=required.
Mettre à niveau une instance existante
Applicabilité
Instances Windows : le Security Hardening Mode n'est pas pris en charge. Forcer ce mode entraîne un échec de l'initialisation et empêche la modification du nom d'hôte ainsi que l'activation KMS.
Instances Linux : pris en charge. Effectuez les vérifications de dépendance et les modifications décrites dans les sections suivantes avant la mise à niveau.
Étape 1 : Vérifier et mettre à niveau le code et les dépendances
Avant de passer au Security Hardening Mode, assurez-vous que l'instance et toutes les applications déployées répondent aux exigences suivantes :
La version de Cloud-init doit être 23.2.2 ou ultérieure. Exécutez
cloud-init --versionpour vérifier. Si la version est antérieure à 23.2.2, mettez à niveau d'abord Cloud-init ; sinon, l'instance ne démarrera pas après le basculement.-
Tout le code d'application et les scripts doivent accéder aux métadonnées de l'instance en utilisant la Méthode 1 : Mode de renforcement de la sécurité.
ImportantSi votre code utilise la bibliothèque Credentials pour obtenir un jeton STS pour la configuration du SDK, mettez à niveau vers une version prenant en charge le mode de renforcement de la sécurité.
Après la mise à niveau, vérifiez qu'il ne reste aucun accès en mode normal. Consultez la section Comment détecter si une instance ECS est accessible en mode normal ?. Activez ensuite le Security Hardening Mode pour l'instance.
Étape 2 : Activer le mode de renforcement de la sécurité
Console
Accédez à la page Console ECS - Instances. Sélectionnez une région et un groupe de ressources.
Dans la colonne Actions, cliquez sur .
-
Activez l'option Enable Instance Metadata Access Channel , définissez le Instance Metadata Access Mode sur Security Hardening Mode , puis cliquez sur OK .
Lorsque vous sélectionnez le Security Hardening Mode , une boîte de dialogue apparaît, indiquant que l'activation de ce mode rejettera les requêtes en mode normal pour améliorer la sécurité. Avant de basculer, nous vous recommandons de consulter la page de surveillance ECS Metadata dans la console CloudMonitor pour confirmer que l'instance n'effectue aucun appel en mode normal.
CLI
Appelez ModifyInstanceMetadataOptions avec HttpEndpoint=enabled et HttpTokens=required pour activer le Security Hardening Mode . Exemple :
aliyun ecs ModifyInstanceMetadataOptions \
--region cn-hangzhou \
--RegionId 'cn-hangzhou' \
--InstanceId 'i-bp1******ke' \
--HttpEndpoint enabled \
--HttpTokens required
API
Appelez ModifyInstanceMetadataOptions avec HttpEndpoint=enabled et HttpTokens=required pour activer le Security Hardening Mode .
Après le basculement, surveillez l'accès aux métadonnées et l'état des applications. En cas de problème, revenez au Normal And Security Hardening Modes pour rétablir le service, puis répétez l'Étape 1 : Vérifier et mettre à niveau le code et les dépendances .
Détails des métadonnées d'instance
Les métadonnées sont organisées selon une hiérarchie de type répertoire. L'accès à un répertoire renvoie ses entrées ou sous-répertoires. Par exemple, meta-data/instance/ renvoie instance-name et instance-type.
Catégorie | Métadonnées | Description | Exemple |
Informations de base sur l'instance |
| L'ID de l'instance. |
|
| Le nom de l'instance. |
| |
| Le nom d'hôte. |
| |
| Le type d'instance. |
| |
| Le numéro de série. |
| |
| La région de l'instance. |
| |
| La zone de l'instance. |
| |
| L'ID du compte Alibaba Cloud du propriétaire de l'instance. |
| |
| La valeur d'un tag d'instance spécifié. Pour activer cette fonctionnalité, appelez ModifyInstanceMetadataOptions et définissez |
| |
| Nombre maximal de paquets par seconde (PPS) pour le type d'instance. Consultable uniquement pour les instances créées ou dont le type a été modifié après le 30 juin 2026. |
| |
| Nombre maximal de connexions pour le type d'instance. Consultable uniquement pour les instances créées ou dont le type a été modifié après le 30 juin 2026. |
| |
Informations sur l'image |
| L'ID de l'image utilisée pour créer l'instance. |
|
| Le code produit de l'image Alibaba Cloud Marketplace. |
| |
| La méthode de facturation de l'image Alibaba Cloud Marketplace. |
| |
| La source du gestionnaire de packages (tel que yum ou apt) utilisée par l'instance Linux pour les mises à jour. |
| |
Configuration réseau de base |
| Le type de réseau. Seul le VPC est pris en charge. |
|
| L'ID du VPC de l'instance. |
| |
| Le bloc CIDR du VPC de l'instance. |
| |
| L'ID du vSwitch de l'instance. |
| |
| Le bloc CIDR du vSwitch de l'instance. |
| |
| La bande passante sortante interne maximale du type d'instance. Unité : Kbit/s. |
| |
| La configuration DNS. |
| |
| L'adresse du serveur NTP. |
| |
Adresses IP de l'ENI principale |
| L'adresse MAC de l'instance. Pour les instances dotées de plusieurs cartes réseau, seule l'adresse MAC sur eth0 est renvoyée. |
|
| L'adresse IPv4 privée de l'ENI principale. |
| |
| L'adresse IPv4 publique de l'ENI principale de l'instance. |
| |
| L'adresse IPv4 publique statique ou l'Elastic IP Address associée à l'ENI principale. |
| |
Détails de l'interface réseau élastique (ENI) |
| L'ID de l'ENI. Remplacez [mac] par l'adresse MAC de l'instance issue de l'élément de métadonnées mac. Cela s'applique également aux éléments suivants. |
|
| L'ID du VPC de l'ENI. |
| |
| L'ID du vSwitch de l'ENI. |
| |
| L'adresse IP privée principale de l'ENI. |
| |
| Les adresses IPv4 privées attribuées à l'ENI. |
| |
| Les préfixes IPv4 privés attribués à l'ENI. |
| |
| Le masque de sous-réseau de l'ENI. |
| |
| La passerelle IPv4 de l'ENI. |
| |
| Le bloc CIDR IPv4 du vSwitch de l'ENI. |
| |
| Le bloc CIDR IPv4 du VPC de l'ENI. |
| |
| Les adresses IPv6 attribuées à l'ENI. Uniquement pour les instances de type VPC avec IPv6 configuré. |
| |
| Les préfixes IPv6 attribués à l'ENI. |
| |
| La passerelle IPv6 du VPC de l'ENI. |
| |
| Le bloc CIDR IPv6 du vSwitch de l'ENI. Uniquement pour les instances de type VPC avec IPv6 configuré. |
| |
| Le bloc CIDR IPv6 du VPC de l'ENI. Uniquement pour les instances de type VPC avec IPv6 configuré. |
| |
Informations sur les disques |
| Le numéro de série du disque. |
|
| L'ID du disque. |
| |
| Le nom du disque. |
| |
Sécurité et identifiants |
| La clé publique, disponible uniquement si elle a été fournie au lancement. |
|
| Les identifiants de sécurité temporaires du rôle RAM associé à l'instance. Remplacez [role-name] par le nom du rôle RAM. Les identifiants expirent à la date indiquée dans le champ Expiration ; effectuez un nouvel appel pour en obtenir de nouveaux. | | |
Attributs avancés de l'instance |
| La solution de virtualisation ECS. Virt 1.0 et Virt 2.0 sont pris en charge. |
|
| Le numéro de build interne. |
| |
| L'heure planifiée d'arrêt et de libération d'une instance spot, au format UTC+0 yyyy-MM-ddThh:mm:ssZ. |
| |
Configuration spécifique à Windows |
| Le serveur d'activation KMS pour les instances Windows. |
|
| Le serveur de mise à jour pour les instances Windows. |
| |
| Le serveur de surveillance de l'état des mises à jour pour les instances Windows. |
|
FAQ
-
Qu'est-ce qu'une attaque SSRF et comment le mode de durcissement de la sécurité permet-il de s'en protéger ?
Le SSRF (Server-Side Request Forgery) est une vulnérabilité qui permet à un attaquant de tromper un serveur afin qu'il effectue des requêtes réseau non autorisées pour accéder à des systèmes internes tels que le service de métadonnées ou des bases de données. Par exemple, un attaquant peut soumettre une URL contenant
http://100.100.100.200/latest/meta-data/pour inciter une application à récupérer et renvoyer des métadonnées sensibles.Par défaut, les instances ECS autorisent l'accès sans jeton (mode normal). Le mode de durcissement de la sécurité impose la validation du jeton : le client envoie d'abord une requête PUT pour obtenir un jeton temporaire, puis l'inclut dans les requêtes GET. Comme les attaques SSRF ne peuvent pas initier de requêtes PUT, elles ne peuvent pas obtenir de jeton, ce qui bloque efficacement l'accès non autorisé.
-
Je n'arrive pas à accéder aux métadonnées de l'instance à l'aide de commandes en mode de durcissement de la sécurité. Comment résoudre ce problème ?
Erreurs de commande courantes :
-
Le TTL de l'identifiant d'accès aux métadonnées de l'instance est hors plage (400 - Missing or Invalid Parameters)
Le TTL doit être compris entre 1 et 21 600 secondes. Les valeurs en dehors de cette plage renvoient l'erreur 400 - Missing or Invalid Parameters.
curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds: 21700" -
La requête contient l'en-tête X-Forwarded-For (403 - Forbidden)
curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-Forwarded-For: www.ba****.com" -
L'identifiant d'accès aux métadonnées de l'instance spécifié n'est pas valide (401 - Unauthorized)
curl -H "X-aliyun-ecs-metadata-token: aaa" -v http://100.100.100.200/latest/meta-data/
-
-
Que faire si mon accès fréquent au service de métadonnées est limité ?
Le service de métadonnées impose des limites de débit. Récupérez une seule fois au démarrage les éléments rarement modifiés, tels que instance-id, et mettez-les en cache localement avec un TTL raisonnable.
-
Mon application a cessé de fonctionner après avoir changé le mode d'accès aux métadonnées de l'instance pour le mode de durcissement de la sécurité. Comment résoudre ce problème ?
Une application ou un script sur l'instance utilise peut-être encore le mode normal. Suivez la procédure Mettre à niveau une instance existante pour les vérifier et les mettre à niveau.
-
Puis-je accéder à l'adresse des métadonnées depuis un hôte local ?
Non.
100.100.100.200est une adresse link-local accessible uniquement depuis une instance ECS via son interface réseau virtuelle. Les requêtes provenant de l'extérieur de l'instance ne peuvent pas être routées vers cette adresse. -
Que faire si je ne peux pas sélectionner le mode de durcissement de la sécurité lors de la création d'une instance à partir d'une image personnalisée ?
Lors de la création d'une instance ECS à partir d'une image Linux personnalisée, il se peut que l'option Security Hardening Mode ne soit pas disponible. Cela signifie que l'image ne répond pas aux exigences. Mettez à niveau l'image comme suit :
Créez une instance temporaire : Utilisez l'image personnalisée pour créer une instance ECS temporaire.
-
Modifiez l'instance temporaire : Sur l'instance temporaire, effectuez les modifications suivantes. Consultez la section Mettre à niveau une instance existante.
Mettez à niveau Cloud-init : Mettez à niveau Cloud-init vers la version 23.2.2 ou ultérieure.
Modifiez les applications et les scripts : Mettez à jour toutes les applications ou scripts qui utilisent le mode normal vers le mode de durcissement de la sécurité.
Créez une nouvelle image et mettez à jour ses attributs : Créez une nouvelle image personnalisée à partir de l'instance. Appelez ensuite ModifyImageAttribute pour définir
Features.ImdsSupportsurv2.Libérez les ressources : Libérez l'instance temporaire après la création de la nouvelle image.
-
Quelles versions de l'outil Credentials prennent en charge le mode de durcissement de la sécurité ?
Les versions antérieures de Credentials ne prennent pas en charge l'accès aux métadonnées en mode de durcissement de la sécurité. Le passage au mode de durcissement de la sécurité sans mise à niveau empêche le SDK d'obtenir des jetons STS, ce qui entraîne des interruptions de service.
Mettez à niveau la dépendance Credentials vers une version prise en charge avant de changer de mode :
Java : credentials-java version >=
0.3.10.Node.js : credentials version >=
2.3.1.PHP : credentials version >=
1.2.0.Python : alibabacloud_credentials version >=
0.3.6.Go : credentials-go version >=
1.3.10.
-
Comment détecter si une instance ECS est accédée en mode normal ?
Utilisez les méthodes suivantes pour détecter et localiser les processus qui accèdent aux métadonnées en mode normal.
Méthode 1 : Utiliser CloudMonitor pour vérifier l'accès en mode normal
Vérifiez les données de surveillance des métadonnées ECS dans la console CloudMonitor pour déterminer si l'instance a été accédée en mode normal.
Connectez-vous à la console CloudMonitor.
Dans le volet de navigation de gauche, choisissez . Recherchez et accédez à la page de surveillance ECS Metadata.
Consultez la métrique Successful Normal Mode Accesses pour l'instance cible.
Si cette métrique n'est pas égale à 0, l'instance est accédée en mode normal. Identifiez et mettez à niveau les applications utilisant le mode normal.
Méthode 2 : Utiliser un plug-in Cloud Assistant pour localiser un processus spécifique
Utilisez un plug-in Cloud Assistant pour localiser les processus qui accèdent aux métadonnées en mode normal.
Systèmes d'exploitation pris en charge
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3 Pro
Anolis OS 8
CentOS Stream 8/9
CentOS 8
Ubuntu : 20/24
Debian : 10, 11, 12
Fedora 35+
AlmaLinux 8/9
Rocky Linux 8/9
Red Hat Enterprise Linux 8/9
Pour Red Hat, téléchargez un package RPM pour installer Cloud Assistant Agent.
SUSE 15.1/15,2/15,3/15,4/15,5/15.6
OpenSuse 15.2/15,3/15,4/15,5/15,6
Procédure
-
Installez et activez le plug-in Cloud Assistant
Connectez-vous à l'instance ECS et installez le service de surveillance. Ce service consomme certaines ressources de l'instance.
# Deploy the monitoring service. sudo acs-plugin-manager --exec --plugin ACS-ECS-ImdsPacketAnalyzer # Check the status of the monitoring service. sudo systemctl status imds_tracer_tool[root@cockpit ~]# systemctl status imds_tracer_tool ● imds_tracer_tool.service - ImdsPacketAnalyzer IMDS detection tooling from Aliyun Loaded: loaded (/etc/systemd/system/imds_tracer_tool.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2025-04-01 11:27:46 CST; 1 day 4h ago Main PID: 3549929 (python3) Tasks: 1 (limit: 3246596) Memory: 100.0M CGroup: /system.slice/imds_tracer_tool.service └─3549929 /bin/python3 /usr/local/share/aliyun-assist/plugin/ACS-ECS-ImdsPacketAnalyzer/1.0/src/imds_snoop.py Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577803:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577804:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577805:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577806:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577807:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577808:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577809:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: Apr 02 15:58:34 cockpit python3[3549929]: [WARNING] imdsv1(!) (pid:3577810:curl argv:curl -s -o /dev/null --write-out 0.5 http://100.100.100.200) called by -> (pid:3565366:bash argv: -
Localisez le processus problématique Vérifiez quels processus accèdent toujours aux métadonnées en mode normal. Le journal affiche les ID de processus (PID).
cat /var/log/imds/imds-trace.* | grep WARNING[root@cockpit ~]# cat /var/log/imds/imds-trace.* | grep WARNING [2025-04-01 11:25:59,483] [WARNING] imdsv1(!) (pid:3534140:acs-plugin-mana argv:acs-plugin-manager --exec --plugin acs-ecs-imdspacketanalyzer) called by -> (pid:3534138:sudo argv:sudo acs-plugin-manager --exec --plugin acs-ecs-imdspacketanalyzer) -> (pid:3533211:bash argv:-bash) -> (pid:3533208:sshd argv:sshd: root@pts/0) req details: get /latest/meta-data/instance-id http/1.1, host: 100.100.100.200, user-agent: linux_386/2.2.4.920, content-type: application/x-www-form-urlencoded, accept-encoding: gzip, [2025-04-01 11:25:59,483] [WARNING] imdsv1(!) (pid:3534140:acs-plugin-mana argv:acs-plugin-manager --exec --plugin acs-ecs-imdspacketanalyzer) called by -> (pid:3534138:sudo argv:sudo acs-plugin-manager --exec --plugin acs-ecs-imdspacketanalyzer) -> (pid:3533211:bash argv:-bash) -> (pid:3533208:sshd argv:sshd: root@pts/0) req details: get /latest/meta-data/instance-id http/1.1, host: 100.100.100.200, user-agent: linux_386/2.2.4.920, content-type: application/x-www-form-urlencoded, accept-encoding: gzip, [root@cockpit ~]# Analysez et modifiez Trouvez les applications ou scripts correspondant aux PID et mettez-les à niveau vers le mode de durcissement de la sécurité.