Service de métadonnées d’instance Azure
S’applique à : ✔️ Machines virtuelles Linux ✔️ Machines virtuelles Windows ✔️ Groupes identiques flexibles
Azure Instance Metadata Service fournit des informations sur les instances de machine virtuelle en cours d’exécution. Vous pouvez l’utiliser pour gérer et configurer vos machines virtuelles. Ces information comprennent la référence SKU, le stockage, les configurations réseau et les événements de maintenance à venir. Pour connaître la liste complète des données disponibles, consultez le Résumé des catégories de points de terminaison.
IMDS est disponible pour les instances de machine virtuelle et les instances de groupe identique en cours d’exécution. Tous les points de terminaison prennent en charge les machines virtuelles créées et gérées avec Azure Resource Manager. Seules la catégorie Attesté et la partie Réseau de la catégorie Instance prennent en charge les machines virtuelles créées avec le modèle de déploiement Classic. Le point de terminaison Attesté le fait seulement dans une certaine mesure.
IMDS est une API REST disponible à une adresse IP connue et non routable (169.254.169.254
). On ne peut y accéder qu’à partir de la machine virtuelle. La communication entre la machine virtuelle et IMDS ne quitte jamais l’hôte.
Demandez à vos clients HTTP de contourner les proxys web de la machine virtuelle lorsqu’ils interrogent IMDS.
Utilisation
Accéder à Azure Instance Metadata Service
Pour accéder à IMDS, créez une machine virtuelle à partir d’Azure Resource Manager ou du portail Azure, puis utilisez les exemples suivants. Pour obtenir plus d’exemples, consultez Exemples Azure Instance Metadata.
Voici un exemple de code permettant de récupérer toutes les métadonnées d’une instance. Pour obtenir une vue d’ensemble de toutes les fonctionnalités disponibles dans le but d’accéder à une source de données spécifique, consultez Catégories de points de terminaison.
Requête
Important
Dans cet exemple, les proxys sont contournés. Vous devez contourner les proxys lorsque vous interrogez IMDS. Pour plus d’informations, consultez Proxys.
Remarque
Les requêtes IMDS doivent être envoyées en utilisant la carte réseau primaire de la machine virtuelle et l’adresse IP primaire. Le protocole DHCP doit être activé.
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance?api-version=2021-02-01" | ConvertTo-Json -Depth 64
-NoProxy
nécessite PowerShell V6 ou version ultérieure. Consultez notre référentiel d’échantillons pour obtenir des exemples de versions PowerShell plus anciennes.
Réponse
Notes
La réponse est une chaîne JSON. L’exemple de réponse suivant est imprimé avec soin par souci de lisibilité.
{
"compute": {
"azEnvironment": "AZUREPUBLICCLOUD",
"additionalCapabilities": {
"hibernationEnabled": "true"
},
"hostGroup": {
"id": "testHostGroupId"
},
"extendedLocation": {
"type": "edgeZone",
"name": "microsoftlosangeles"
},
"evictionPolicy": "",
"isHostCompatibilityLayerVm": "true",
"licenseType": "Windows_Client",
"location": "westus",
"name": "examplevmname",
"offer": "WindowsServer",
"osProfile": {
"adminUsername": "admin",
"computerName": "examplevmname",
"disablePasswordAuthentication": "true"
},
"osType": "Windows",
"placementGroupId": "f67c14ab-e92c-408c-ae2d-da15866ec79a",
"plan": {
"name": "planName",
"product": "planProduct",
"publisher": "planPublisher"
},
"platformFaultDomain": "36",
"platformSubFaultDomain": "",
"platformUpdateDomain": "42",
"priority": "Regular",
"publicKeys": [{
"keyData": "ssh-rsa 0",
"path": "/home/user/.ssh/authorized_keys0"
},
{
"keyData": "ssh-rsa 1",
"path": "/home/user/.ssh/authorized_keys1"
}
],
"publisher": "RDFE-Test-Microsoft-Windows-Server-Group",
"resourceGroupName": "macikgo-test-may-23",
"resourceId": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/virtualMachines/examplevmname",
"securityProfile": {
"secureBootEnabled": "true",
"virtualTpmEnabled": "false",
"encryptionAtHost": "true",
"securityType": "TrustedLaunch"
},
"sku": "2019-Datacenter",
"storageProfile": {
"dataDisks": [{
"bytesPerSecondThrottle": "979202048",
"caching": "None",
"createOption": "Empty",
"diskCapacityBytes": "274877906944",
"diskSizeGB": "1024",
"image": {
"uri": ""
},
"isSharedDisk": "false",
"isUltraDisk": "true",
"lun": "0",
"managedDisk": {
"id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampledatadiskname",
"storageAccountType": "StandardSSD_LRS"
},
"name": "exampledatadiskname",
"opsPerSecondThrottle": "65280",
"vhd": {
"uri": ""
},
"writeAcceleratorEnabled": "false"
}],
"imageReference": {
"id": "",
"offer": "WindowsServer",
"publisher": "MicrosoftWindowsServer",
"sku": "2019-Datacenter",
"version": "latest",
"communityGalleryImageId": "/CommunityGalleries/testgallery/Images/1804Gen2/Versions/latest",
"sharedGalleryImageId": "/SharedGalleries/1P/Images/gen2/Versions/latest",
"exactVersion": "1.1686127202.30113"
},
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage",
"diskSizeGB": "30",
"diffDiskSettings": {
"option": "Local"
},
"encryptionSettings": {
"enabled": "false",
"diskEncryptionKey": {
"sourceVault": {
"id": "/subscriptions/test-source-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
},
"secretUrl": "https://test-disk.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
},
"keyEncryptionKey": {
"sourceVault": {
"id": "/subscriptions/test-key-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
},
"keyUrl": "https://test-key.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
}
},
"image": {
"uri": ""
},
"managedDisk": {
"id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampleosdiskname",
"storageAccountType": "StandardSSD_LRS"
},
"name": "exampleosdiskname",
"osType": "Windows",
"vhd": {
"uri": ""
},
"writeAcceleratorEnabled": "false"
},
"resourceDisk": {
"size": "4096"
}
},
"subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"tags": "baz:bash;foo:bar",
"userData": "Zm9vYmFy",
"version": "15.05.22",
"virtualMachineScaleSet": {
"id": "/subscriptions/xxxxxxxx-xxxxx-xxx-xxx-xxxx/resourceGroups/resource-group-name/providers/Microsoft.Compute/virtualMachineScaleSets/virtual-machine-scale-set-name"
},
"vmId": "02aab8a4-74ef-476e-8182-f6d2ba4166a6",
"vmScaleSetName": "crpteste9vflji9",
"vmSize": "Standard_A3",
"zone": ""
},
"network": {
"interface": [{
"ipv4": {
"ipAddress": [{
"privateIpAddress": "10.144.133.132",
"publicIpAddress": ""
}],
"subnet": [{
"address": "10.144.133.128",
"prefix": "26"
}]
},
"ipv6": {
"ipAddress": [
]
},
"macAddress": "0011AAFFBB22"
}]
}
}
Sécurité et authentification
Instance Metadata Service n’est accessible qu’à partir d’une instance de machine virtuelle en cours d’exécution sur une adresse IP non routable. Les machines virtuelles peuvent interagir seulement avec leurs propres métadonnées/fonctionnalités. L’API est HTTP uniquement. Elle ne quitte jamais l’hôte.
Les demandes doivent respecter les conditions suivantes pour être directement destinées à IMDS et éviter toute redirection involontaire ou indésirable :
- Elles doivent contenir l’en-tête
Metadata: true
. - Elles ne doivent pas contenir l’en-tête
X-Forwarded-For
.
Toutes les requêtes qui ne respectent pas ces deux exigences sont rejetées par le service.
Important
IMDS n’est pas un canal pour les données sensibles. L’API n’est pas authentifiée. Elle est ouverte à tous les processus de la machine virtuelle. Les informations exposées par le biais de ce service doivent être considérées comme des informations partagées pour toutes les applications exécutées dans la machine virtuelle.
S’il n’est pas nécessaire pour chaque processus sur la machine virtuelle d’accéder au point de terminaison IMDS, vous pouvez définir des règles de pare-feu local pour limiter l’accès. Par exemple, si seul un service système connu a besoin d’accéder au service de métadonnées d’instance, vous pouvez définir une règle de pare-feu sur le point de terminaison IMDS, en autorisant uniquement le ou les processus spécifiques auxquels accéder ou en refusant l’accès pour le reste des processus.
Proxies
IMDS n’est pas destiné à être utilisé derrière un proxy, ce qui n’est pas pris en charge. La plupart des clients HTTP proposent une option vous permettant de désactiver les proxys sur vos demandes. Cette fonctionnalité doit être utilisée lors de la communication avec IMDS. Pour plus d’informations, consultez la documentation de votre client.
Important
Même si vous n’avez connaissance d’aucune configuration de proxy dans votre environnement, vous devez toujours remplacer les paramètres de proxy client par défaut. Les configurations de proxy peuvent être découvertes automatiquement. Si vous ne les contournez pas, vous vous exposez à des risques de panne en cas de modification ultérieure de la configuration de la machine.
Limitation du débit
En général, les demandes adressées à IMDS sont limitées à 5 par seconde (par machine virtuelle). Celles qui dépassent ce seuil sont rejetées avec une réponse 429. Les demandes adressées à la catégorie Identité managée sont limitées à 20 par seconde et à 5 demandes simultanément (par machine virtuelle).
Verbes HTTP
Sont actuellement pris en charge les verbes HTTP suivants :
Verbe | Description |
---|---|
GET |
Récupère la ressource demandée |
Paramètres
Les points de terminaison peuvent prendre en charge les paramètres obligatoires et facultatifs. Pour plus d’informations, consultez Schéma et la documentation du point de terminaison en question.
Paramètres de requête
Les points de terminaison IMDS prennent en charge les paramètres de chaîne de requête HTTP. Exemple :
http://169.254.169.254/metadata/instance/compute?api-version=2021-01-01&format=json
Spécifie les paramètres :
Nom | Valeur |
---|---|
api-version |
2021-01-01 |
format |
json |
Les demandes comportant des noms de paramètres de requête en double sont rejetées.
Paramètres d’itinéraire
Dans le cas de certains points de terminaison qui retournent des objets blob JSON volumineux, l’ajout de paramètres d’itinéraire au point de terminaison de la demande est pris en charge pour filtrer la réponse sur un sous-ensemble :
http://169.254.169.254/metadata/<endpoint>/[<filter parameter>/...]?<query parameters>
Les paramètres correspondent aux index/clés qui seraient utilisés pour parcourir l’objet JSON si l’on interagissait avec une représentation analysée.
Par exemple, /metadata/instance
retourne l’objet JSON suivant :
{
"compute": { ... },
"network": {
"interface": [
{
"ipv4": {
"ipAddress": [{
"privateIpAddress": "10.144.133.132",
"publicIpAddress": ""
}],
"subnet": [{
"address": "10.144.133.128",
"prefix": "26"
}]
},
"ipv6": {
"ipAddress": [
]
},
"macAddress": "0011AAFFBB22"
},
...
]
}
}
Pour filtrer la réponse sur la propriété compute, la demande envoyée serait la suivante :
http://169.254.169.254/metadata/instance/compute?api-version=<version>
De même, pour appliquer un filtre sur une propriété imbriquée ou un élément de tableau spécifique, des clés seraient encore ajoutées :
http://169.254.169.254/metadata/instance/network/interface/0?api-version=<version>
Cette demande appliquerait un filtre sur le premier élément de la propriété Network.interface
et retournerait la réponse suivante :
{
"ipv4": {
"ipAddress": [{
"privateIpAddress": "10.144.133.132",
"publicIpAddress": ""
}],
"subnet": [{
"address": "10.144.133.128",
"prefix": "26"
}]
},
"ipv6": {
"ipAddress": [
]
},
"macAddress": "0011AAFFBB22"
}
Notes
En cas de filtrage sur un nœud terminal, format=json
ne fonctionne pas. Pour ces requêtes, format=text
doit être spécifié explicitement si le format par défaut est json.
schéma
Format de données
Par défaut, IMDS retourne les données au format JSON (Content-Type: application/json
). Toutefois, les points de terminaison qui prennent en charge le filtrage de réponse (cf. Paramètres d’itinéraire) prennent également en charge le format text
.
Pour accéder à un format de réponse autre que le format par défaut, spécifiez le format demandé en tant que paramètre de chaîne de requête dans la demande. Par exemple :
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance?api-version=2017-08-01&format=text"
Dans les réponses JSON, toutes les primitives sont de type string
. Les valeurs manquantes et les valeurs non applicables sont toujours incluses, mais définies sur une chaîne vide.
Contrôle de version
IMDS est versionné. Il est obligatoire de spécifier la version de l’API dans la requête HTTP. La seule exception à cette exigence est le point de terminaison versions, qui peut être utilisé pour récupérer dynamiquement les versions d’API disponibles.
Au fur et à mesure que des versions plus récentes sont ajoutées, les versions antérieures sont toujours accessibles pour des questions de compatibilité si vos scripts ont des dépendances sur des formats de données spécifiques.
Si vous ne spécifiez pas de version, vous recevez une erreur accompagnée de la liste des dernières versions prises en charge :
{
"error": "Bad request. api-version was not specified in the request. For more information refer to aka.ms/azureimds",
"newest-versions": [
"2020-10-01",
"2020-09-01",
"2020-07-15"
]
}
Versions d'API prises en charge
Remarque
La version 2023-11-15 est toujours déployée, mais elle n’est peut-être pas disponible dans certaines régions.
- 2023-11-15
- 2023-07-01
- 13-12-2021
- 15-11-2021
- 2021-11-01
- 2021-10-01
- 2021-08-01
- 2021-05-01
- 2021-03-01
- 2021-02-01
- 2021-01-01
- 2020-12-01
- 2020-10-01
- 2020-09-01
- 2020-07-15
- 2020-06-01
- 2019-11-01
- 2019-08-15
- 2019-08-01
- 2019-06-04
- 2019-06-01
- 2019-04-30
- 2019-03-11
- 2019-02-01
- 2018-10-01
- 2018-04-02
- 2018-02-01
- 2017-12-01
- 2017-10-01
- 2017-08-01
- 2017-04-02
- 2017-03-01
Fichier Swagger
Une définition Swagger complète pour IMDS est disponible à l’adresse https://github.com/Azure/azure-rest-api-specs/blob/main/specification/imds/data-plane/readme.md.
Disponibilité régionale
Le service est en disponibilité générale dans tous les clouds Azure.
Point de terminaison racine
Le point de terminaison racine est http://169.254.169.254/metadata
.
Catégories de points de terminaison
L’API IMDS contient plusieurs catégories de points de terminaison qui représentent des sources de données différentes, chacune contenant un ou plusieurs points de terminaison. Examinez chaque catégorie pour plus de détails.
Racine de la catégorie | Description | Version introduite |
---|---|---|
/metadata/attested |
Voir Données attestées | 2018-10-01 |
/metadata/identity |
Voir Identité managée via IMDS | 2018-02-01 |
/metadata/instance |
Voir Métadonnées d’instance | 2017-04-02 |
/metadata/loadbalancer |
Voir Récupérer les métadonnées de l’équilibreur de charge à l’aide d’IMDS | 2020-10-01 |
/metadata/scheduledevents |
Voir Scheduled Events via IMDS | 2017-08-01 |
/metadata/versions |
Voir Versions | N/A |
Versions
Liste des versions d’API
Retourne l’ensemble des versions d’API prises en charge.
GET /metadata/versions
Paramètres
Aucun (ce point de terminaison n’est pas versionné).
response
{
"apiVersions": [
"2017-03-01",
"2017-04-02",
...
]
}
Métadonnées d’instance
Récupération des métadonnées de machine virtuelle
Expose les métadonnées importantes pour l’instance de machine virtuelle, notamment le calcul, le réseau et le stockage.
GET /metadata/instance
Paramètres
Nom | Obligatoires/facultatif | Description |
---|---|---|
api-version |
Obligatoire | Version utilisée pour traiter la demande. |
format |
Facultatif* | Format (json ou text ) de la réponse. *Remarque : Peut être obligatoire si les paramètres de demande sont utilisés. |
Ce point de terminaison prend en charge le filtrage de la réponse avec les paramètres de routage.
response
{
"compute": {
"azEnvironment": "AZUREPUBLICCLOUD",
"additionalCapabilities": {
"hibernationEnabled": "true"
},
"hostGroup": {
"id": "testHostGroupId"
},
"extendedLocation": {
"type": "edgeZone",
"name": "microsoftlosangeles"
},
"evictionPolicy": "",
"isHostCompatibilityLayerVm": "true",
"licenseType": "Windows_Client",
"location": "westus",
"name": "examplevmname",
"offer": "WindowsServer",
"osProfile": {
"adminUsername": "admin",
"computerName": "examplevmname",
"disablePasswordAuthentication": "true"
},
"osType": "Windows",
"placementGroupId": "f67c14ab-e92c-408c-ae2d-da15866ec79a",
"plan": {
"name": "planName",
"product": "planProduct",
"publisher": "planPublisher"
},
"platformFaultDomain": "36",
"platformSubFaultDomain": "",
"platformUpdateDomain": "42",
"priority": "Regular",
"publicKeys": [{
"keyData": "ssh-rsa 0",
"path": "/home/user/.ssh/authorized_keys0"
},
{
"keyData": "ssh-rsa 1",
"path": "/home/user/.ssh/authorized_keys1"
}
],
"publisher": "RDFE-Test-Microsoft-Windows-Server-Group",
"resourceGroupName": "macikgo-test-may-23",
"resourceId": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/virtualMachines/examplevmname",
"securityProfile": {
"secureBootEnabled": "true",
"virtualTpmEnabled": "false",
"encryptionAtHost": "true",
"securityType": "TrustedLaunch"
},
"sku": "2019-Datacenter",
"storageProfile": {
"dataDisks": [{
"bytesPerSecondThrottle": "979202048",
"caching": "None",
"createOption": "Empty",
"diskCapacityBytes": "274877906944",
"diskSizeGB": "1024",
"image": {
"uri": ""
},
"isSharedDisk": "false",
"isUltraDisk": "true",
"lun": "0",
"managedDisk": {
"id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampledatadiskname",
"storageAccountType": "StandardSSD_LRS"
},
"name": "exampledatadiskname",
"opsPerSecondThrottle": "65280",
"vhd": {
"uri": ""
},
"writeAcceleratorEnabled": "false"
}],
"imageReference": {
"id": "",
"offer": "WindowsServer",
"publisher": "MicrosoftWindowsServer",
"sku": "2019-Datacenter",
"version": "latest",
"communityGalleryImageId": "/CommunityGalleries/testgallery/Images/1804Gen2/Versions/latest",
"sharedGalleryImageId": "/SharedGalleries/1P/Images/gen2/Versions/latest",
"exactVersion": "1.1686127202.30113"
},
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage",
"diskSizeGB": "30",
"diffDiskSettings": {
"option": "Local"
},
"encryptionSettings": {
"enabled": "false",
"diskEncryptionKey": {
"sourceVault": {
"id": "/subscriptions/test-source-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
},
"secretUrl": "https://test-disk.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
},
"keyEncryptionKey": {
"sourceVault": {
"id": "/subscriptions/test-key-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
},
"keyUrl": "https://test-key.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
}
},
"image": {
"uri": ""
},
"managedDisk": {
"id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampleosdiskname",
"storageAccountType": "StandardSSD_LRS"
},
"name": "exampleosdiskname",
"osType": "Windows",
"vhd": {
"uri": ""
},
"writeAcceleratorEnabled": "false"
},
"resourceDisk": {
"size": "4096"
}
},
"subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"tags": "baz:bash;foo:bar",
"userData": "Zm9vYmFy",
"version": "15.05.22",
"virtualMachineScaleSet": {
"id": "/subscriptions/xxxxxxxx-xxxxx-xxx-xxx-xxxx/resourceGroups/resource-group-name/providers/Microsoft.Compute/virtualMachineScaleSets/virtual-machine-scale-set-name"
},
"vmId": "02aab8a4-74ef-476e-8182-f6d2ba4166a6",
"vmScaleSetName": "crpteste9vflji9",
"vmSize": "Standard_A3",
"zone": ""
},
"network": {
"interface": [{
"ipv4": {
"ipAddress": [{
"privateIpAddress": "10.144.133.132",
"publicIpAddress": ""
}],
"subnet": [{
"address": "10.144.133.128",
"prefix": "26"
}]
},
"ipv6": {
"ipAddress": [
]
},
"macAddress": "0011AAFFBB22"
}]
}
}
Décomposition du schéma :
Calcul
Données | Description | Version introduite |
---|---|---|
azEnvironment |
Environnement Azure dans lequel s’exécute la machine virtuelle | 2018-10-01 |
additionalCapabilities.hibernationEnabled |
Identifie si la mise en veille prolongée est activée sur la machine virtuelle | 2021-11-01 |
customData |
Cette fonctionnalité est déconseillée et désactivée dans IMDS. Elle a été remplacée par userData . |
2019-02-01 |
evictionPolicy |
Définit le mode de suppression d’une machine virtuelle spot. | 2020-12-01 |
extendedLocation.type |
Type de l’emplacement étendu de la machine virtuelle. | 2021-03-01 |
extendedLocation.name |
Nom de l’emplacement étendu de la machine virtuelle | 2021-03-01 |
host.id |
Nom de l’hôte de la machine virtuelle. Notez qu’une machine virtuelle aura un hôte ou un groupe hôte, mais pas les deux. | 15-11-2021 |
hostGroup.id |
Nom du groupe hôte de la machine virtuelle. Notez qu’une machine virtuelle aura un hôte ou un groupe hôte, mais pas les deux. | 15-11-2021 |
isHostCompatibilityLayerVm |
Indique si la machine virtuelle s’exécute sur la couche de compatibilité de l’ordinateur hôte | 2020-06-01 |
licenseType |
Type de licence pour Azure Hybrid Benefit. Présent seulement pour les machines virtuelles dotées d’AHB | 2020-09-01 |
location |
Région Azure dans laquelle la machine virtuelle est en cours d’exécution | 2017-04-02 |
name |
Nom de la machine virtuelle | 2017-04-02 |
offer |
Fournit des informations pour l’image de machine virtuelle et ne sont présentes que pour les images déployées à partir de la galerie d’images Azure | 2017-04-02 |
osProfile.adminUsername |
Spécifie le nom du compte administrateur | 2020-07-15 |
osProfile.computerName |
Spécifie le nom de l’ordinateur | 2020-07-15 |
osProfile.disablePasswordAuthentication |
Spécifie si l'authentification par mot de passe est désactivée. Présent seulement pour les machines virtuelles Linux | 2020-10-01 |
osType |
Linux ou Windows | 2017-04-02 |
physicalZone |
Zone physique de la machine virtuelle | 2023-11-15 |
placementGroupId |
Groupe de placement de votre groupe identique | 2017-08-01 |
plan |
Plan contenant le nom, le produit et l’éditeur pour une machine virtuelle s’il s’agit d’une image de la Place de marché Azure | 2018-04-02 |
platformUpdateDomain |
Domaine de mise à jour dans lequel la machine virtuelle est en cours d’exécution | 2017-04-02 |
platformFaultDomain |
Domaine par défaut dans lequel la machine virtuelle est en cours d’exécution | 2017-04-02 |
platformSubFaultDomain |
Sous-domaine d’erreur où la machine virtuelle s’exécute, le cas échéant. | 2021-10-01 |
priority |
Priorité de la machine virtuelle. Pour en savoir plus, consultez la section Machines virtuelles spot | 2020-12-01 |
provider |
Fournisseur de la machine virtuelle | 2018-10-01 |
publicKeys |
Collection de clés publiques affectée à la machine virtuelle et aux chemins | 2018-04-02 |
publisher |
Éditeur de l’image de machine virtuelle | 2017-04-02 |
resourceGroupName |
Groupe de ressources de votre machine virtuelle | 2017-08-01 |
resourceId |
L’ID complet de la ressource | 2019-03-11 |
sku |
Référence (SKU) spécifique pour l’image de machine virtuelle | 2017-04-02 |
securityProfile.secureBootEnabled |
Indique si le démarrage sécurisé UEFI est activé sur la machine virtuelle | 2020-06-01 |
securityProfile.virtualTpmEnabled |
Indique si le Module de plateforme sécurisée (TPM) virtuel est activé sur la machine virtuelle | 2020-06-01 |
securityProfile.encryptionAtHost |
Identifie si le chiffrement sur l’hôte est activé sur la machine virtuelle | 2021-11-01 |
securityProfile.securityType |
Identifie si la machine virtuelle est une machine virtuelle approuvée ou une machine virtuelle confidentielle | 13-12-2021 |
storageProfile |
Voir Profil de stockage ci-dessous | 2019-06-01 |
subscriptionId |
Abonnement Azure pour la machine virtuelle | 2017-08-01 |
tags |
Étiquettes de votre machine virtuelle | 2017-08-01 |
tagsList |
Balises mises en forme en tant que tableau JSON pour faciliter l’analyse programmatique | 2019-06-04 |
userData |
Jeu de données spécifié lors de la création de la machine virtuelle à utiliser pendant ou après l’approvisionnement (encodé en base64) | 2021-01-01 |
version |
Version de l’image de machine virtuelle | 2017-04-02 |
virtualMachineScaleSet.id |
ID du groupe de machines virtuelles identiques créé avec une orchestration flexible dont la machine virtuelle fait partie. Ce champ n’est pas disponible pour les groupe de machines virtuelles identiques créés avec l’orchestration uniforme. | 2021-03-01 |
vmId |
Identificateur unique de la machine virtuelle. Le blog référencé ne convient qu’aux machines virtuelles dotées de SMBIOS < 2.6. Pour les machines virtuelles avec un SMBIOS >= 2.6, l’UUID issu de DMI s’affiche au format Little Endian et il n’est donc pas nécessaire d’intervertir les octets. | 2017-04-02 |
vmScaleSetName |
Nom du groupe de machines virtuelles identiques de votre groupe identique | 2017-12-01 |
vmSize |
Taille de la machine virtuelle | 2017-04-02 |
zone |
Zone de disponibilité de votre machine virtuelle | 2017-12-01 |
† Cette version n’est pas encore entièrement disponible et peut ne pas être prise en charge dans toutes les régions.
Profil de stockage
Le profil de stockage d’une machine virtuelle est divisé en trois catégories : la référence de l’image, le disque de système d’exploitation et les disques de données, plus un objet supplémentaire pour le disque temporaire local.
L’objet de référence d’image contient les informations suivantes sur l’image du système d’exploitation, notez qu’une image peut provenir de la plateforme, de la place de marché, de la galerie de la communauté ou de la galerie partagée directe, mais pas les deux :
Données | Description | Version introduite |
---|---|---|
id |
ID de ressource | 2019-06-01 |
offer |
Offre de la plateforme ou de l’image de la Place de marché | 2019-06-01 |
publisher |
Éditeur de l’image de la plateforme ou de la place de marché | 2019-06-01 |
sku |
SKU de l’image de la plateforme ou de la place de marché | 2019-06-01 |
version |
Version de l’image | 2019-06-01 |
communityGalleryImageId |
ID de ressource de l’image de la communauté (vide sinon) | 2023-07-01 |
sharedGalleryImageId |
ID de ressource de l’image partagée directe (vide sinon) | 2023-07-01 |
exactVersion |
Version de l’image de la communauté ou partagée directe | 2023-07-01 |
L’objet de disque du système d’exploitation contient les informations suivantes sur le disque du système d’exploitation utilisé par la machine virtuelle :
Données | Description |
---|---|
caching |
Exigences de la mise en cache |
createOption |
Informations sur la façon dont la machine virtuelle a été créée |
diffDiskSettings |
Paramètres du disque éphémère |
diskSizeGB |
Taille du disque en Go |
image |
Disque dur virtuel de l’image utilisateur source |
managedDisk |
Paramètres des disques managés |
name |
Nom du disque |
vhd |
Disque dur virtuel |
writeAcceleratorEnabled |
Indique si writeAccelerator est activé ou non sur le disque |
Le tableau des disques de données contient la liste des disques de données attachés à la machine virtuelle. Chaque objet de disque de données contient les informations suivantes :
Données | Description | Version introduite |
---|---|---|
bytesPerSecondThrottle * |
Quota de lecture/écriture sur le disque en octets | 2021-05-01 |
caching |
Exigences de la mise en cache | 2019-06-01 |
createOption |
Informations sur la façon dont la machine virtuelle a été créée | 2019-06-01 |
diffDiskSettings |
Paramètres du disque éphémère | 2019-06-01 |
diskCapacityBytes * |
Taille du disque en octets | 2021-05-01 |
diskSizeGB |
Taille du disque en Go | 2019-06-01 |
encryptionSettings |
Paramètres de chiffrement du disque | 2019-06-01 |
image |
Disque dur virtuel de l’image utilisateur source | 2019-06-01 |
isSharedDisk * |
Indique si le disque est partagé entre les ressources | 2021-05-01 |
isUltraDisk |
Indique si le disque de données est un disque Ultra | 2021-05-01 |
lun |
Numéro d’unité logique du disque | 2019-06-01 |
managedDisk |
Paramètres des disques managés | 2019-06-01 |
name |
Nom du disque | 2019-06-01 |
opsPerSecondThrottle * |
Quota de lecture/écriture sur le disque en E/S par seconde | 2021-05-01 |
osType |
Type de système d’exploitation inclus dans le disque | 2019-06-01 |
vhd |
Disque dur virtuel | 2019-06-01 |
writeAcceleratorEnabled |
Indique si writeAccelerator est activé ou non sur le disque | 2019-06-01 |
*Ces champs sont remplis seulement pour disques Ultra. Ce sont des chaînes vides pour les disques non-Ultra.
L’objet blob des paramètres de chiffrement contient des données sur le mode de chiffrement du disque (si celui-ci est chiffré) :
Données | Description | Version introduite |
---|---|---|
diskEncryptionKey.sourceVault.id |
Emplacement de la clé de chiffrement du disque | 2021-11-01 |
diskEncryptionKey.secretUrl |
Emplacement du secret | 2021-11-01 |
keyEncryptionKey.sourceVault.id |
Emplacement de la clé de chiffrement de la clé | 2021-11-01 |
keyEncryptionKey.keyUrl |
Emplacement de la clé | 2021-11-01 |
L’objet de disque de ressources contient la taille du disque temporaire local attaché à la machine virtuelle, le cas échéant, en kilo-octets. S’il n’existe aucun disque temporaire local pour la machine virtuelle, cette valeur est 0.
Données | Description | Version introduite |
---|---|---|
resourceDisk.size |
Taille du disque temporaire local de la machine virtuelle (en ko) | 2021-02-01 |
Réseau
Données | Description | Version introduite |
---|---|---|
ipv4.privateIpAddress |
Adresse IPv4 locale de la machine virtuelle | 2017-04-02 |
ipv4.publicIpAddress |
Adresse IPv4 publique de la machine virtuelle | 2017-04-02 |
subnet.address |
Adresse de sous-réseau de la machine virtuelle | 2017-04-02 |
subnet.prefix |
Préfixe de sous-réseau, par exemple 24 | 2017-04-02 |
ipv6.ipAddress |
Adresse IPv6 locale de la machine virtuelle | 2017-04-02 |
macAddress |
Adresse MAC de la machine virtuelle | 2017-04-02 |
Notes
L’ordre des cartes réseau retournées par l’appel réseau n’est pas garanti.
Obtenir les données utilisateur
Lorsque vous créez une machine virtuelle, vous pouvez spécifier un jeu de données à utiliser pendant ou après l’approvisionnement de la machine virtuelle, puis le récupérer via IMDS. Vérifiez ici l’expérience de données d’utilisateur de bout en bout.
Pour configurer les données utilisateur, utilisez le modèle de démarrage rapide fourni ici. L’exemple ci-dessous montre comment récupérer ces données par le biais d’IMDS. Cette fonctionnalité est proposée avec la version 2021-01-01
et versions supérieures.
Notes
Avis de sécurité : IMDS est ouvert à toutes les applications sur la machine virtuelle ; les données sensibles ne doivent pas être placées dans les données utilisateur.
$userData = Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/userData?api-version=2021-01-01&format=text"
[System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($userData))
Exemple 1 : Suivi de la machine virtuelle s’exécutant sur Azure
En tant que fournisseur de service, vous aurez peut-être besoin de suivre le nombre de machines virtuelles s’exécutant sur votre logiciel ou de disposer d’agents effectuant le suivi de l’unicité de la machine virtuelle. Pour pouvoir obtenir un ID unique pour une machine virtuelle, utilisez le champ vmId
du service de métadonnées d’instance.
Requête
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/vmId?api-version=2017-08-01&format=text"
Réponse
5c08b38e-4d57-4c23-ac45-aca61037f084
Exemple 2 : Positionnement de différents réplicas de données
Pour certains scénarios, le positionnement des différents réplicas de données est de première importance. Par exemple, pour le positionnement du réplica HDFS ou le positionnement des conteneurs via un orchestrateur, vous devez connaître les domaines platformFaultDomain
et platformUpdateDomain
sur lesquels la machine virtuelle s’exécute.
Vous pouvez également utiliser les Zones de disponibilité pour les instances pour prendre ces décisions.
Vous pouvez interroger ces données directement via IMDS.
Requête
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/platformFaultDomain?api-version=2017-08-01&format=text"
Réponse
0
Exemple 3 : Obtenir les balises de machines virtuelles
Les balises de machine virtuelle sont incluses dans l’API d’instance sous le point de terminaison instance/compute/tags. Des balises peuvent être appliqués à votre machine virtuelle Azure pour les organiser de manière logique dans une taxonomie. Les balises affectées à une machine virtuelle peuvent être récupérées à l’aide de la requête ci-dessous.
Requête
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/tags?api-version=2017-08-01&format=text"
Réponse
Department:IT;ReferenceNumber:123456;TestStatus:Pending
Le champ tags
est une chaîne dont les étiquettes sont délimitées par des points-virgules. Cette sortie peut constituer un problème si des points-virgules sont utilisés dans les étiquettes proprement dites. Si un analyseur est écrit pour extraire les balises par programmation, vous devez vous appuyer sur le champ tagsList
. Le champ tagsList
est un tableau JSON sans délimiteur et, par conséquent plus facile à analyser. Le tagsList attribué à une machine virtuelle peut être récupéré à l’aide de la requête ci-dessous.
Requête
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/tagsList?api-version=2019-06-04" | ConvertTo-Json -Depth 64
Réponse
{
"value": [
{
"name": "Department",
"value": "IT"
},
{
"name": "ReferenceNumber",
"value": "123456"
},
{
"name": "TestStatus",
"value": "Pending"
}
],
"Count": 3
}
Exemple 4 : Obtenir plus d’informations sur la machine virtuelle dans le cadre du support technique
En tant que fournisseur de services, vous recevrez peut-être un appel du support pour lequel vous devrez connaître les informations de la machine virtuelle. Demandez au client de partager les métadonnées de calcul afin que l’équipe du support dispose des informations de base concernant le type de machine virtuelle sur Azure.
Requête
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute?api-version=2020-09-01" | ConvertTo-Json -Depth 64
Réponse
Notes
La réponse est une chaîne JSON. L’exemple de réponse suivant est imprimé avec soin par souci de lisibilité.
{
"azEnvironment": "AZUREPUBLICCLOUD",
"extendedLocation": {
"type": "edgeZone",
"name": "microsoftlosangeles"
},
"evictionPolicy": "",
"additionalCapabilities": {
"hibernationEnabled": "false"
},
"hostGroup": {
"id": "testHostGroupId"
},
"isHostCompatibilityLayerVm": "true",
"licenseType": "Windows_Client",
"location": "westus",
"name": "examplevmname",
"offer": "WindowsServer",
"osProfile": {
"adminUsername": "admin",
"computerName": "examplevmname",
"disablePasswordAuthentication": "true"
},
"osType": "Windows",
"placementGroupId": "f67c14ab-e92c-408c-ae2d-da15866ec79a",
"plan": {
"name": "planName",
"product": "planProduct",
"publisher": "planPublisher"
},
"platformFaultDomain": "36",
"platformUpdateDomain": "42",
"priority": "Regular",
"publicKeys": [{
"keyData": "ssh-rsa 0",
"path": "/home/user/.ssh/authorized_keys0"
},
{
"keyData": "ssh-rsa 1",
"path": "/home/user/.ssh/authorized_keys1"
}
],
"publisher": "RDFE-Test-Microsoft-Windows-Server-Group",
"physicalZone": "useast-AZ01",
"resourceGroupName": "macikgo-test-may-23",
"resourceId": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/virtualMachines/examplevmname",
"securityProfile": {
"secureBootEnabled": "true",
"virtualTpmEnabled": "false",
"encryptionAtHost": "true",
"securityType": "TrustedLaunch"
},
"sku": "2019-Datacenter",
"storageProfile": {
"dataDisks": [{
"bytesPerSecondThrottle": "979202048",
"caching": "None",
"createOption": "Empty",
"diskCapacityBytes": "274877906944",
"diskSizeGB": "1024",
"image": {
"uri": ""
},
"isSharedDisk": "false",
"isUltraDisk": "true",
"lun": "0",
"managedDisk": {
"id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/MicrosoftCompute/disks/exampledatadiskname",
"storageAccountType": "StandardSSD_LRS"
},
"name": "exampledatadiskname",
"opsPerSecondThrottle": "65280",
"vhd": {
"uri": ""
},
"writeAcceleratorEnabled": "false"
}],
"imageReference": {
"id": "",
"offer": "WindowsServer",
"publisher": "MicrosoftWindowsServer",
"sku": "2019-Datacenter",
"version": "latest",
"communityGalleryImageId": "/CommunityGalleries/testgallery/Images/1804Gen2/Versions/latest",
"sharedGalleryImageId": "/SharedGalleries/1P/Images/gen2/Versions/latest",
"exactVersion": "1.1686127202.30113"
},
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage",
"diskSizeGB": "30",
"diffDiskSettings": {
"option": "Local"
},
"encryptionSettings": {
"enabled": "false",
"diskEncryptionKey": {
"sourceVault": {
"id": "/subscriptions/test-source-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
},
"secretUrl": "https://test-disk.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
},
"keyEncryptionKey": {
"sourceVault": {
"id": "/subscriptions/test-key-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
},
"keyUrl": "https://test-key.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
}
},
"image": {
"uri": ""
},
"managedDisk": {
"id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampleosdiskname",
"storageAccountType": "StandardSSD_LRS"
},
"name": "exampleosdiskname",
"osType": "Windows",
"vhd": {
"uri": ""
},
"writeAcceleratorEnabled": "false"
},
"resourceDisk": {
"size": "4096"
}
},
"subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"tags": "baz:bash;foo:bar",
"version": "15.05.22",
"virtualMachineScaleSet": {
"id": "/subscriptions/xxxxxxxx-xxxxx-xxx-xxx-xxxx/resourceGroups/resource-group-name/providers/Microsoft.Compute/virtualMachineScaleSets/virtual-machine-scale-set-name"
},
"vmId": "02aab8a4-74ef-476e-8182-f6d2ba4166a6",
"vmScaleSetName": "crpteste9vflji9",
"vmSize": "Standard_A3",
"zone": "3"
}
Exemple 5 : Obtenir l’environnement Azure dans lequel s’exécute la machine virtuelle
Azure dispose de plusieurs clouds souverains comme Azure Government. Vous avez parfois besoin de l’environnement Azure pour prendre certaines décisions liées au runtime. L’exemple suivant vous montre comment obtenir ce comportement.
Requête
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/azEnvironment?api-version=2018-10-01&format=text"
Réponse
AzurePublicCloud
Le cloud et les valeurs de l’environnement Azure sont listés ici.
Cloud | Environnement Azure |
---|---|
Toutes les régions Azure mondiales en disponibilité générale | AzurePublicCloud |
Azure Government | AzureUSGovernmentCloud |
Microsoft Azure géré par 21Vianet | AzureChinaCloud |
Azure Allemagne | AzureGermanCloud |
Exemple 6 : Récupérer des informations sur le réseau
Requête
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/network?api-version=2017-08-01" | ConvertTo-Json -Depth 64
Réponse
{
"interface": [
{
"ipv4": {
"ipAddress": [
{
"privateIpAddress": "10.1.0.4",
"publicIpAddress": "X.X.X.X"
}
],
"subnet": [
{
"address": "10.1.0.0",
"prefix": "24"
}
]
},
"ipv6": {
"ipAddress": []
},
"macAddress": "000D3AF806EC"
}
]
}
Exemple 7 : Récupérer l’IP publique
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-08-01&format=text"
Notes
- Si vous cherchez à récupérer les informations IMDS pour l’adresse IP publique de la référence SKU Standard, consultez API de métadonnées de l’équilibreur de charge pour plus d’informations.
Données attestées
Récupération de données attestées
IMDS permet de garantir que les données fournies proviennent d’Azure. Microsoft signe une partie de ces informations : vous pouvez donc vérifier qu’une image de la Place de marché Azure est bien celle que vous exécutez sur Azure.
GET /metadata/attested/document
Paramètres
Nom | Obligatoires/facultatif | Description |
---|---|---|
api-version |
Obligatoire | Version utilisée pour traiter la demande. |
nonce |
Facultatif | Chaîne à 10 chiffres servant de nonce de chiffrement. Si aucune valeur n’est fournie, IMDS utilise l’horodatage UTC actuel. |
response
{
"encoding":"pkcs7",
"signature":"MIIEEgYJKoZIhvcNAQcCoIIEAzCCA/8CAQExDzANBgkqhkiG9w0BAQsFADCBugYJKoZIhvcNAQcBoIGsBIGpeyJub25jZSI6IjEyMzQ1NjY3NjYiLCJwbGFuIjp7Im5hbWUiOiIiLCJwcm9kdWN0IjoiIiwicHVibGlzaGVyIjoiIn0sInRpbWVTdGFtcCI6eyJjcmVhdGVkT24iOiIxMS8yMC8xOCAyMjowNzozOSAtMDAwMCIsImV4cGlyZXNPbiI6IjExLzIwLzE4IDIyOjA4OjI0IC0wMDAwIn0sInZtSWQiOiIifaCCAj8wggI7MIIBpKADAgECAhBnxW5Kh8dslEBA0E2mIBJ0MA0GCSqGSIb3DQEBBAUAMCsxKTAnBgNVBAMTIHRlc3RzdWJkb21haW4ubWV0YWRhdGEuYXp1cmUuY29tMB4XDTE4MTEyMDIxNTc1N1oXDTE4MTIyMDIxNTc1NlowKzEpMCcGA1UEAxMgdGVzdHN1YmRvbWFpbi5tZXRhZGF0YS5henVyZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAML/tBo86ENWPzmXZ0kPkX5dY5QZ150mA8lommszE71x2sCLonzv4/UWk4H+jMMWRRwIea2CuQ5RhdWAHvKq6if4okKNt66fxm+YTVz9z0CTfCLmLT+nsdfOAsG1xZppEapC0Cd9vD6NCKyE8aYI1pliaeOnFjG0WvMY04uWz2MdAgMBAAGjYDBeMFwGA1UdAQRVMFOAENnYkHLa04Ut4Mpt7TkJFfyhLTArMSkwJwYDVQQDEyB0ZXN0c3ViZG9tYWluLm1ldGFkYXRhLmF6dXJlLmNvbYIQZ8VuSofHbJRAQNBNpiASdDANBgkqhkiG9w0BAQQFAAOBgQCLSM6aX5Bs1KHCJp4VQtxZPzXF71rVKCocHy3N9PTJQ9Fpnd+bYw2vSpQHg/AiG82WuDFpPReJvr7Pa938mZqW9HUOGjQKK2FYDTg6fXD8pkPdyghlX5boGWAMMrf7bFkup+lsT+n2tRw2wbNknO1tQ0wICtqy2VqzWwLi45RBwTGB6DCB5QIBATA/MCsxKTAnBgNVBAMTIHRlc3RzdWJkb21haW4ubWV0YWRhdGEuYXp1cmUuY29tAhBnxW5Kh8dslEBA0E2mIBJ0MA0GCSqGSIb3DQEBCwUAMA0GCSqGSIb3DQEBAQUABIGAld1BM/yYIqqv8SDE4kjQo3Ul/IKAVR8ETKcve5BAdGSNkTUooUGVniTXeuvDj5NkmazOaKZp9fEtByqqPOyw/nlXaZgOO44HDGiPUJ90xVYmfeK6p9RpJBu6kiKhnnYTelUk5u75phe5ZbMZfBhuPhXmYAdjc7Nmw97nx8NnprQ="
}
L’objet blob de signature est une version signée pkcs7 du document. Il contient le certificat utilisé pour la signature, ainsi que certains détails spécifiques de la machine virtuelle.
Pour les machines virtuelles créées avec Azure Resource Manager, le document comprend vmId
, sku
, nonce
, subscriptionId
et timeStamp
pour la création et l’expiration du document, et les informations de plan de l’image. Les informations du plan ne sont fournies que pour les images de la Place de marché Azure.
Pour les machines virtuelles créées avec le modèle de déploiement classique, seul le remplissage de vmId
et subscriptionId
est garanti. Vous pouvez extraire le certificat de la réponse et l’utiliser pour vérifier que la réponse est valide et qu’elle provient d’Azure.
Le document décodé contient les champs suivants :
Données | Description | Version introduite |
---|---|---|
licenseType |
Type de licence pour Azure Hybrid Benefit. Présent seulement pour les machines virtuelles dotées d’AHB | 2020-09-01 |
nonce |
Chaîne qui peut être éventuellement fournie avec la requête. Si la valeur de nonce n’a pas été fournie, l’horodatage UTC actuel est utilisé. |
2018-10-01 |
plan |
Plan d’image de la Place de marché Azure. Contient l’ID de plan (name), l’image de produit ou l’offre (product) et l’ID d’éditeur (publisher). | 2018-10-01 |
timestamp.createdOn |
Horodatage UTC de création du document signé. | 2018-20-01 |
timestamp.expiresOn |
Horodatage UTC d’expiration du document signé. | 2018-10-01 |
vmId |
Identificateur unique de la machine virtuelle | 2018-10-01 |
subscriptionId |
Abonnement Azure pour la machine virtuelle | 2019-04-30 |
sku |
Référence SKU spécifique pour l’image de machine virtuelle (correspond à la propriété compute/sku du point de terminaison Instance Metadata [/metadata/instance ]) |
2019-11-01 |
Notes
Pour les machines virtuelles Classic (hors Azure Resource Manager), seul le remplissage de vmId est garanti.
Exemple de document :
{
"nonce":"20201130-211924",
"plan":{
"name":"planName",
"product":"planProduct",
"publisher":"planPublisher"
},
"sku":"Windows-Server-2012-R2-Datacenter",
"subscriptionId":"8d10da13-8125-4ba9-a717-bf7490507b3d",
"timeStamp":{
"createdOn":"11/30/20 21:19:19 -0000",
"expiresOn":"11/30/20 21:19:24 -0000"
},
"vmId":"02aab8a4-74ef-476e-8182-f6d2ba4166a6"
}
Conseils sur la validation de la signature
Lors de la validation de la signature, vous devez confirmer que la signature a été créée avec un certificat à partir d’Azure. Pour ce faire, validez le certificat Autre nom de l’objet (SAN).
Exemple de DNS Name=eastus.metadata.azure.com, DNS Name=metadata.azure.com
SAN
Remarque
Le domaine est différent pour le cloud public et pour chaque cloud souverain.
Cloud | Domaine dans SAN |
---|---|
Toutes les régions Azure mondiales en disponibilité générale | *.metadata.azure.com |
Azure Government | *.metadata.azure.us |
Azure géré par 21Vianet | *.metadata.azure.cn |
Azure Allemagne | *.metadata.microsoftazure.de |
Remarque
Les certificats peuvent ne pas avoir de correspondance exacte pour le domaine. Pour cette raison, la validation de la certification doit accepter n’importe quel sous-domaine (par exemple, dans les régions de disponibilité générale du cloud public, elle doit accepter *.metadata.azure.com
).
Nous déconseillons l’épinglage de certificat pour les certificats intermédiaires. Pour obtenir des conseils supplémentaires, consultez Épinglage de certificat : épinglage de certificats et services Azure. Notez qu’Azure Instance Metadata Service n’offre PAS de notifications pour les futures modifications de l’autorité de certification. Au lieu de cela, vous devez suivre l’article Détails sur l’autorité de certification Azure centralisé pour les mises à jour futures.
Exemple 1 : Vérifier que la machine virtuelle s’exécute dans Azure
Les fournisseurs de la Place de marché Azure veulent être sûrs que la licence de leur logiciel autorise l’exécution seulement dans Azure. Si quelqu’un copie le disque dur virtuel dans un environnement local, le fournisseur doit pouvoir le détecter. Via IMDS, ces fournisseurs peuvent recevoir des données signées qui garantissent une réponse seulement depuis Azure.
Notes
Cet exemple nécessite l’installation de l’utilitaire jq.
Validation
# Get the signature
$attestedDoc = Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri http://169.254.169.254/metadata/attested/document?api-version=2020-09-01
# Decode the signature
$signature = [System.Convert]::FromBase64String($attestedDoc.signature)
Vérifiez que la signature provient de Microsoft Azure et recherchez les erreurs dans la chaîne de certificats.
# Get certificate chain
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]($signature)
$chain = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Chain
$chain.Build($cert)
# Print the Subject of each certificate in the chain
foreach($element in $chain.ChainElements)
{
Write-Host $element.Certificate.Subject
}
# Get the content of the signed document
Add-Type -AssemblyName System.Security
$signedCms = New-Object -TypeName System.Security.Cryptography.Pkcs.SignedCms
$signedCms.Decode($signature);
$content = [System.Text.Encoding]::UTF8.GetString($signedCms.ContentInfo.Content)
Write-Host "Attested data: " $content
$json = $content | ConvertFrom-Json
# Do additional validation here
La valeur de nonce
dans le document signé peut être comparée si vous avez fourni un paramètre nonce
dans la requête initiale.
Identité gérée
Une identité managée, affectée par le système, peut être activée sur la machine virtuelle. Vous pouvez aussi affecter une ou plusieurs identités managées affectées par l’utilisateur à la machine virtuelle. Vous pouvez ensuite demander des jetons pour les identités gérées auprès d’IMDS. Utilisez ces jetons pour l’authentification auprès d’autres services Azure, comme Azure Key Vault.
Pour plus d’informations sur la procédure d’activation de cette fonctionnalité, consultez Obtenir un jeton d’accès.
Métadonnées de l’équilibreur de charge
Lorsque vous placez des instances de machine virtuelle ou de groupe de machines virtuelles derrière Azure Standard Load Balancer, utilisez IMDS pour récupérer les métadonnées relatives à l’équilibreur de charge et aux instances. Pour en savoir plus, consultez la section Récupérer les informations de l’équilibreur de charge.
Événements planifiés
Vous pouvez obtenir l’état des événements planifiés en utilisant IMDS. L’utilisateur peut ensuite spécifier un ensemble d’actions à exécuter pour ces événements. Pour plus d’informations, consultez Événements planifiés pour Linux ou Événements planifiés pour Windows.
Exemple de code dans différents langages
Le tableau suivant liste des exemples d’appel d’IMDS avec différents langages dans la machine virtuelle :
Erreurs et débogage
Si un élément de données est introuvable ou qu’une requête est mal formée, Instance Metadata Service retourne des erreurs HTTP standard. Par exemple :
Code d'état HTTP | Motif |
---|---|
200 OK |
La demande a abouti. |
400 Bad Request |
En-tête Metadata: true manquant ou paramètre format=json manquant lors de l’interrogation d’un nœud terminal |
404 Not Found |
L’élément demandé n’existe pas |
405 Method Not Allowed |
La méthode (verbe) HTTP n’est pas prise en charge sur le point de terminaison. |
410 Gone |
Recommencez l’opération dans un délai maximum de 70 secondes |
429 Too Many Requests |
Les limites de débit de l’API ont été dépassées |
500 Service Error |
Recommencez l’opération plus tard |
Forum aux questions
J’obtiens l’erreur
400 Bad Request, Required metadata header not specified
. Qu’est-ce que cela signifie ?- IMDS requiert que l’en-tête
Metadata: true
soit passé dans la requête. Passer cet en-tête dans l’appel REST permet d’accéder à IMDS.
- IMDS requiert que l’en-tête
Pourquoi je n’obtiens pas les informations de calcul pour ma machine virtuelle ?
- Actuellement, IMDS prend en charge seulement les instances créées avec Azure Resource Manager.
J’ai créé ma machine virtuelle par l’intermédiaire d’Azure Resource Manager il y a quelque temps. Pourquoi ne puis-je pas voir les informations de métadonnées de calcul ?
- Si vous avez créé votre machine virtuelle après septembre 2016, ajoutez une étiquette pour commencer à voir les métadonnées de calcul. Si vous avez créé votre machine virtuelle avant septembre 2016, ajoutez ou supprimez des extensions ou des disques de données aux instances de machine virtuelle pour actualiser les métadonnées.
Les données utilisateur sont-elles identiques aux données personnalisées ?
- Les données utilisateur offrent une fonctionnalité similaire aux données personnalisées, vous permettant de transmettre vos propres métadonnées à l’instance de machine virtuelle. La différence est que les données utilisateur sont récupérées via IMDS et sont persistantes pendant toute la durée de vie de l’instance de machine virtuelle. La fonctionnalité existante de données personnalisées continuera à fonctionner comme décrit dans cet article. Toutefois, vous pouvez uniquement récupérer des données personnalisées par le biais du dossier système local, et non par le biais d’IMDS.
Pourquoi je ne vois pas toutes les données renseignées pour une nouvelle version ?
- Si vous avez créé votre machine virtuelle après septembre 2016, ajoutez une étiquette pour commencer à voir les métadonnées de calcul. Si vous avez créé votre machine virtuelle avant septembre 2016, ajoutez ou supprimez des extensions ou des disques de données aux instances de machine virtuelle pour actualiser les métadonnées.
Pourquoi est-ce que je reçois l’erreur
500 Internal Server Error
ou410 Resource Gone
?- Réessayez votre requête. Pour plus d’informations, consultez Gestion des erreurs transitoires. Si le problème persiste, créez un ticket de support dans le portail Azure pour la machine virtuelle.
Ceci fonctionne-t-il pour des instances de groupe identique ?
- Oui, IMDS est disponible pour les instances de groupe identique.
J’ai mis à jour mes étiquettes dans mes groupes identiques, mais elles n’apparaissent pas dans les instances (contrairement aux machines virtuelles mono-instances). Ai-je fait une erreur quelque part ?
- Actuellement, les étiquettes pour les groupes identiques s’affichent seulement sur la machine virtuelle lors d’un redémarrage, d’un réimageage ou d’un changement de disque de l’instance.
Pourquoi les informations de référence SKU n’apparaissent-elles pas pour ma machine virtuelle dans les détails de
instance/compute
?- Pour les images personnalisées créées à partir de la Place de marché Azure, la plateforme Azure ne conserve ni les informations de référence SKU de l’image personnalisée ni les détails des machines virtuelles créées à partir de cette image. Elle est conçue ainsi, d’où l’absence d’exposition dans les détails
instance/compute
de la machine virtuelle.
- Pour les images personnalisées créées à partir de la Place de marché Azure, la plateforme Azure ne conserve ni les informations de référence SKU de l’image personnalisée ni les détails des machines virtuelles créées à partir de cette image. Elle est conçue ainsi, d’où l’absence d’exposition dans les détails
Pourquoi ma requête dépasse le délai d’attente (ou subit un échec de connexion) pour mon appel au service ?
Les appels de métadonnées doivent être effectués à partir de l’adresse IP principale affectée à la carte réseau principale de la machine virtuelle. De plus, si vous avez changé vos routes, il doit y avoir une route pour l’adresse 169.254.169.254/32 dans la table de routage locale de votre machine virtuelle.
Produisez une image mémoire de votre table de routage locale et recherchez l’entrée IMDS. Par exemple :
route print
IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 172.16.69.1 172.16.69.7 10 127.0.0.0 255.0.0.0 On-link 127.0.0.1 331 127.0.0.1 255.255.255.255 On-link 127.0.0.1 331 127.255.255.255 255.255.255.255 On-link 127.0.0.1 331 168.63.129.16 255.255.255.255 172.16.69.1 172.16.69.7 11 169.254.169.254 255.255.255.255 172.16.69.1 172.16.69.7 11 ... (continues) ...
Vérifiez qu’il existe une route pour
169.254.169.254
et notez l’interface réseau correspondante (par exemple172.16.69.7
).Produisez une image mémoire de la configuration de l’interface et recherchez l’interface qui correspond à celle référencée dans la table de routage, en notant l’adresse MAC (physique).
ipconfig /all
... (continues) ... Ethernet adapter Ethernet: Connection-specific DNS Suffix . : xic3mnxjiefupcwr1mcs1rjiqa.cx.internal.cloudapp.net Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter Physical Address. . . . . . . . . : 00-0D-3A-E5-1C-C0 DHCP Enabled. . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : fe80::3166:ce5a:2bd5:a6d1%3(Preferred) IPv4 Address. . . . . . . . . . . : 172.16.69.7(Preferred) Subnet Mask . . . . . . . . . . . : 255.255.255.0 ... (continues) ...
Vérifiez que l’interface correspond à la carte réseau principale et à l’adresse IP principale de la machine virtuelle. Vous pouvez trouver la carte réseau et l’adresse IP principales en examinant la configuration réseau dans le portail Azure ou en la recherchant avec Azure CLI. Notez les adresses IP privées (et l’adresse MAC si vous utilisez l’interface CLI). Voici un exemple PowerShell CLI :
$ResourceGroup = '<Resource_Group>' $VmName = '<VM_Name>' $NicNames = az vm nic list --resource-group $ResourceGroup --vm-name $VmName | ConvertFrom-Json | Foreach-Object { $_.id.Split('/')[-1] } foreach($NicName in $NicNames) { $Nic = az vm nic show --resource-group $ResourceGroup --vm-name $VmName --nic $NicName | ConvertFrom-Json Write-Host $NicName, $Nic.primary, $Nic.macAddress }
wintest767 True 00-0D-3A-E5-1C-C0
Si elles ne correspondent pas, mettez à jour la table de routage afin de cibler la carte réseau et l’adresse IP principales.
Clustering de basculement dans Windows Server
Quand vous interrogez IMDS avec le clustering de basculement, il est parfois nécessaire d’ajouter une route à la table de routage. Voici comment faire :
Ouvrez une invite de commandes avec les privilèges Administrateur.
Exécutez la commande suivante et notez l’adresse de l’interface pour la destination réseau (
0.0.0.0
) dans la table de routage IPv4.
route print
Notes
L’exemple de sortie suivant provient d’une machine virtuelle Windows Server avec le cluster de basculement activé. Pour simplifier, la sortie contient seulement la table de routage IPv4.
IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 10.0.1.1 10.0.1.10 266 10.0.1.0 255.255.255.192 On-link 10.0.1.10 266 10.0.1.10 255.255.255.255 On-link 10.0.1.10 266 10.0.1.15 255.255.255.255 On-link 10.0.1.10 266 10.0.1.63 255.255.255.255 On-link 10.0.1.10 266 127.0.0.0 255.0.0.0 On-link 127.0.0.1 331 127.0.0.1 255.255.255.255 On-link 127.0.0.1 331 127.255.255.255 255.255.255.255 On-link 127.0.0.1 331 169.254.0.0 255.255.0.0 On-link 169.254.1.156 271 169.254.1.156 255.255.255.255 On-link 169.254.1.156 271 169.254.255.255 255.255.255.255 On-link 169.254.1.156 271 224.0.0.0 240.0.0.0 On-link 127.0.0.1 331 224.0.0.0 240.0.0.0 On-link 169.254.1.156 271 255.255.255.255 255.255.255.255 On-link 127.0.0.1 331 255.255.255.255 255.255.255.255 On-link 169.254.1.156 271 255.255.255.255 255.255.255.255 On-link 10.0.1.10 266
Exécutez la commande suivante et notez l’adresse de l’interface pour la destination réseau (
0.0.0.0
) qui est (10.0.1.10
) dans cet exemple.route add 169.254.169.254/32 10.0.1.10 metric 1 -p
Support
Si vous ne pouvez pas obtenir une réponse de métadonnées après plusieurs tentatives, vous pouvez créer un ticket de support dans le portail Azure.
Commentaires sur le produit
Vous pouvez formuler des commentaires sur le produit et des idées sur notre canal de commentaires des utilisateurs, sous Machines virtuelles > Instance Metadata Service ici