Azure-Instanzmetadatendienst

Gilt für: ✔️ Linux-VMs ✔️ Windows-VMs ✔️ Flexible Skalierungsgruppen

Der Azure Instance Metadata Service (IMDS) stellt Informationen zu Instanzen virtueller Computer bereit, die derzeit ausgeführt werden. Sie können ihn zur Verwaltung und Konfiguration Ihrer virtuellen Computer verwenden. Hierzu gehören die SKU, der Speicher, Netzwerkkonfigurationen und bevorstehende Wartungsereignisse. Eine umfassende Liste der verfügbaren Daten finden Sie in der Übersicht über die Endpunktkategorien.

Der IMDS ist für das Ausführen von Instanzen virtueller Computer (VMs) und Skalierungsgruppeninstanzen verfügbar. Alle Endpunkte unterstützen VMs, die mit Azure Resource Manager erstellt und verwaltet werden. Nur die Kategorie „attested“ und der Teil „network“ der Kategorie „instance“ unterstützen VMs, die mithilfe des klassischen Bereitstellungsmodells erstellt wurden. Beim Endpunkt der Kategorie „attested“ erfolgt dies nur in begrenztem Umfang.

IMDS ist eine REST-API, die unter einer bekannten, nicht routingfähigen IP-Adresse (169.254.169.254) verfügbar ist. Sie können nur vom virtuellen Computer aus darauf zugreifen. Die Kommunikation zwischen dem virtuellen Computer und IMDS verlässt niemals den Host. Die HTTP-Clients sollten bei Abfragen von IMDS Webproxys innerhalb des virtuellen Computers umgehen und 169.254.169.254 gleich behandeln wie 168.63.129.16.

Verwendung

Zugreifen auf den Azure Instance Metadata Service

Um auf den IMDS zuzugreifen, erstellen Sie eine VM über Azure Resource Manager oder das Azure-Portal, und verwenden Sie die folgenden Beispiele. Weitere Beispiele finden Sie unter Azure Instance Metadata Samples.

Hier finden Sie ein Codebeispiel zum Abrufen aller Metadaten für eine Instanz. Für den Zugriff auf eine bestimmte Datenquelle finden Sie unter Endpunktkategorien eine Übersicht über alle verfügbaren Features.

Anforderung

Wichtig

In diesem Beispiel werden Proxys umgangen. Beim Abfragen von IMDS müssen Sie Proxys umgehen. Weitere Informationen finden Sie unter Proxys.

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 erfordert PowerShell V6 oder höher. Beispiele für ältere PowerShell-Versionen finden Sie in unserem Repository für Beispiele.

Antwort

Hinweis

Die Antwort stellt eine JSON-Zeichenfolge dar. Die folgende Beispielantwort wird zur besseren Lesbarkeit im Schöndruck gedruckt.

{
    "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"
        }]
    }
}

Sicherheit und Authentifizierung

Auf den Instance Metadata Service kann nur innerhalb einer ausgeführten VM-Instanz an einer nicht routingfähigen IP-Adresse zugegriffen werden. VMs können nur mit ihren eigenen Metadaten/Funktionen interagieren. Die API ist auf HTTP beschränkt und verlässt niemals den Host.

Um sicherzustellen, dass Anforderungen direkt für IMDS vorgesehen sind und keine unbeabsichtigten oder unerwünschten Umleitungen von Anforderungen erfolgen, müssen Anforderungen folgende Bedingungen erfüllen:

  • Sie müssen den Header Metadata: true enthalten.
  • Sie dürfen nicht den Header X-Forwarded-For enthalten.

Jede Anforderung, die nicht beide Voraussetzungen erfüllt, wird vom Dienst abgelehnt.

Wichtig

IMDS ist kein Kanal für vertrauliche Daten. Die API ist nicht authentifiziert und ist für alle Prozesse auf der VM geöffnet. Informationen, die über diesen Dienst verfügbar gemacht werden, sollten als freigegebene Informationen für alle Anwendungen betrachtet werden, die in der VM ausgeführt werden.

Wenn es nicht erforderlich ist, dass jeder Prozess auf der VM auf den IMDS-Endpunkt zugreift, können Sie lokale Firewallregeln festlegen, um den Zugriff zu beschränken. Wenn z. B. nur ein bekannter Systemdienst auf Instance Metadata Service zugreifen muss, können Sie eine Firewallregel auf dem IMDS-Endpunkt festlegen, die nur den spezifischen Prozessen den Zugriff gestattet oder den restlichen Prozessen den Zugriff verweigert.

Proxys

IMDS ist nicht für die Verwendung hinter einem Proxy vorgesehen. Dies wird nicht unterstützt. Die meisten HTTP-Clients bieten Ihnen die Möglichkeit, Proxys für Anforderungen zu deaktivieren. Diese Funktionalität muss bei der Kommunikation mit IMDS verwendet werden. Weitere Informationen finden Sie in der Dokumentation zu dem Client.

Wichtig

Auch wenn Sie die Proxykonfiguration in Ihrer Umgebung nicht kennen, müssen Sie dennoch alle Clientproxy-Standardeinstellungen außer Kraft setzen. Proxykonfigurationen können automatisch ermittelt werden. Falls solche Konfigurationen nicht umgangen werden, können erhebliche Probleme auftreten, wenn die Konfiguration des Computers in Zukunft geändert wird.

Ratenbegrenzung

Im Allgemeinen sind Anforderungen an IMDS auf fünf Anforderungen pro Sekunde (pro VM) beschränkt. Anforderungen, die diesen Schwellenwert überschreiten, werden mit der Antwort 429 abgelehnt. Anforderungen an die Kategorie Verwaltete Identität sind auf 20 Anforderungen pro Sekunde und 5 gleichzeitige Anforderungen beschränkt (pro VM).

HTTP-Verben

Die folgenden HTTP-Verben werden derzeit unterstützt:

Verb BESCHREIBUNG
GET Abrufen der angeforderten Ressource

Parameter

Endpunkte unterstützen möglicherweise erforderliche und/oder optionale Parameter. Weitere Informationen finden Sie unter Schema und in der Dokumentation für den jeweiligen Endpunkt.

Abfrageparameter

IMDS-Endpunkte unterstützen HTTP-Abfragezeichenfolgenparameter. Zum Beispiel:

http://169.254.169.254/metadata/instance/compute?api-version=2021-01-01&format=json

Gibt die Parameter an:

Name Wert
api-version 2021-01-01
format json

Anforderungen mit doppelten Abfrageparameternamen werden abgelehnt.

Routenparameter

Bei einigen Endpunkten, die größere JSON-Blobs zurückgeben, wird das Anfügen von Routenparametern an den Anforderungsendpunkt unterstützt, um nach einer Teilmenge der Antwort zu filtern:

http://169.254.169.254/metadata/<endpoint>/[<filter parameter>/...]?<query parameters>

Die Parameter entsprechen den Indizes/Schlüsseln, die zum Durchlaufen des JSON-Objekts verwendet werden, wenn Sie mit einer analysierten Darstellung interagieren.

/metadata/instance gibt z. B. das JSON-Objekt zurück:

{
    "compute": { ... },
    "network": {
        "interface": [
            {
                "ipv4": {
                   "ipAddress": [{
                        "privateIpAddress": "10.144.133.132",
                        "publicIpAddress": ""
                    }],
                    "subnet": [{
                        "address": "10.144.133.128",
                        "prefix": "26"
                    }]
                },
                "ipv6": {
                    "ipAddress": [
                     ]
                },
                "macAddress": "0011AAFFBB22"
            },
            ...
        ]
    }
}

Wenn Sie die Antwort nach der compute-Eigenschaft filtern möchten, senden Sie die Anforderung:

http://169.254.169.254/metadata/instance/compute?api-version=<version>

Wenn Sie nach einer geschachtelten Eigenschaft oder einem bestimmten Arrayelement filtern möchten, fügen Sie Schlüssel an:

http://169.254.169.254/metadata/instance/network/interface/0?api-version=<version>

filtert nach dem ersten Element in der Network.interface-Eigenschaft und gibt Folgendes zurück:

{
    "ipv4": {
       "ipAddress": [{
            "privateIpAddress": "10.144.133.132",
            "publicIpAddress": ""
        }],
        "subnet": [{
            "address": "10.144.133.128",
            "prefix": "26"
        }]
    },
    "ipv6": {
        "ipAddress": [
         ]
    },
    "macAddress": "0011AAFFBB22"
}

Hinweis

Beim Filtern nach einem Blattknoten kann format=json nicht verwendet werden. Für diese Abfragen muss format=text explizit angegeben werden, da das Standardformat JSON ist.

Schema

Datenformat

Standardmäßig gibt der IMDS Daten im JSON-Format (Content-Type: application/json) zurück. Endpunkte, die das Filtern von Antworten unterstützen (siehe Routenparameter), unterstützen jedoch auch das Format text.

Um auf ein nicht standardmäßiges Antwortformat zuzugreifen, geben Sie das angeforderte Format als QueryString-Parameter in der Anforderung an. Beispiel:

Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance?api-version=2017-08-01&format=text"

In JSON-Antworten sind alle Primitiven vom Typ string, und fehlende oder nicht anwendbare Werte sind immer enthalten, werden jedoch auf eine leere Zeichenfolge festgelegt.

Versionsverwaltung

Der Instance Metadata Service (IMDS) verwendet Versionsangaben, und die Angabe der API-Version in der HTTP-Anforderung ist zwingend erforderlich. Die einzige Ausnahme von dieser Anforderung ist der Endpunkt Versionen, der zum dynamischen Abrufen der verfügbaren API-Versionen verwendet werden kann.

Wenn neuere Versionen hinzugefügt werden, kann auf ältere Versionen aus Kompatibilitätsgründen weiterhin zugegriffen werden, falls Ihre Skripts von bestimmten Datenformaten abhängig sind.

Wenn Sie keine Version angeben, erhalten Sie eine Fehlermeldung mit einer Liste der neuesten unterstützten Versionen:

{
    "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"
    ]
}

Unterstützte API-Versionen

Hinweis

Version 2023-07-01 wird noch eingeführt; sie ist möglicherweise in einigen Regionen nicht verfügbar.

  • 2023-07-01
  • 2021-12-13
  • 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
  • 11.03.2019
  • 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

Swagger

Eine vollständige Swagger-Definition für IMDS finden Sie unter: https://github.com/Azure/azure-rest-api-specs/blob/main/specification/imds/data-plane/readme.md

Regionale Verfügbarkeit

Der Dienst ist in allen Azure-Clouds allgemein verfügbar.

Stammendpunkt

Der Stammendpunkt lautet http://169.254.169.254/metadata.

Endpunktkategorien

Die IMDS-API enthält mehrere Endpunktkategorien, die verschiedene Datenquellen darstellen, die jeweils einen oder mehrere Endpunkte enthalten. Ausführlichere Informationen finden Sie in der jeweiligen Kategorie.

Kategoriestamm BESCHREIBUNG Eingeführt in Version
/metadata/attested Siehe Bestätigte Daten 2018-10-01
/metadata/identity Siehe Verwaltete Identität 2018-02-01
/metadata/instance Siehe Instanzmetadaten 2017-04-02
/metadata/loadbalancer Weitere Informationen finden Sie unter Abrufen von Load Balancer Metadaten über IMDS 2020-10-01
/metadata/scheduledevents Siehe Geplante Ereignisse 2017-08-01
/metadata/versions Siehe Versionen

Versionen

Auflisten von API-Versionen

Gibt den Satz unterstützter API-Versionen zurück.

GET /metadata/versions

Parameter

Keine (dieser Endpunkt ist ohne Versionsangabe)

Antwort

{
  "apiVersions": [
    "2017-03-01",
    "2017-04-02",
    ...
  ]
}

Instanzmetadaten

Abrufen von VM-Metadaten

Macht die wichtigen Metadaten für die VM-Instanz verfügbar, einschließlich Compute, Netzwerk und Speicher.

GET /metadata/instance

Parameter

Name erforderlich/optional Beschreibung
api-version Erforderlich Die zum Durchführen der Anforderung verwendete Version
format Optional* Das Format (json oder text) der Antwort. *Hinweis: Ist möglicherweise erforderlich, wenn Anforderungsparameter verwendet werden.

Dieser Endpunkt unterstützt das Filtern von Antworten über Routenparameter.

Antwort

{
    "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"
        }]
    }
}

Aufschlüsselung des Schemas:

Compute

Daten BESCHREIBUNG Eingeführt in Version
azEnvironment Azure-Umgebung, in der die VM ausgeführt wird 2018-10-01
additionalCapabilities.hibernationEnabled Gibt an, ob der Ruhezustand auf der VM aktiviert ist. 2021-11-01
customData Dieses Feature ist in IMDS veraltet und wurde deaktiviert. Es wurde durch userData ersetzt 2019-02-01
evictionPolicy Hier wird festgelegt, wie eine Spot-VM entfernt wird. 2020-12-01
extendedLocation.type Typ des erweiterten Standorts der VM. 2021-03-01
extendedLocation.name Name des erweiterten Standorts der VM. 2021-03-01
host.id Der Name des Hosts der VM. Beachten Sie, dass eine VM entweder über einen Host oder über eine hostGroup verfügt, aber nicht über beides. 15.11.2021
hostGroup.id Der Name der hostGroup der VM. Beachten Sie, dass eine VM entweder über einen Host oder über eine hostGroup verfügt, aber nicht über beides. 15.11.2021
isHostCompatibilityLayerVm Gibt an, ob die VM auf der Hostkompatibilitätsebene ausgeführt wird 2020-06-01
licenseType Typ der Lizenz für Azure-Hybridvorteil. Dies ist nur für AHB-aktivierte VMs verfügbar. 2020-09-01
location Azure-Region, in der die VM ausgeführt wird 2017-04-02
name Name des virtuellen Computers 2017-04-02
offer Angebotsinformationen für das VM-Image, diese sind nur für Images vorhanden, die über den Azure-Imagekatalog bereitgestellt werden 2017-04-02
osProfile.adminUsername Gibt den Namen des Administratorkontos an. 2020-07-15
osProfile.computerName Gibt den Namen des Computers an. 2020-07-15
osProfile.disablePasswordAuthentication Gibt an, ob die Kennwortauthentifizierung deaktiviert ist. Dies ist nur für Linux-VMs verfügbar. 2020-10-01
osType Linux oder Windows 2017-04-02
placementGroupId Platzierungsgruppe Ihrer Skalierungsgruppe 2017-08-01
plan Der Plan mit Name, Produkt und Herausgeber für einen virtuellen Computer, wenn es sich um ein Azure Marketplace-Image handelt 2018-04-02
platformUpdateDomain Updatedomäne, in der die VM ausgeführt wird 2017-04-02
platformFaultDomain Fehlerdomäne, in der die VM ausgeführt wird 2017-04-02
platformSubFaultDomain Untere Fehlerdomäne, in der der virtuelle Computer ausgeführt wird (falls zutreffend) 2021-10-01
priority Dies ist die Priorität der VM. Weitere Informationen finden Sie unter Spot-VM. 2020-12-01
provider Anbieter des virtuellen Computers 2018-10-01
publicKeys Sammlung von öffentlichen Schlüsseln, dem virtuellen Computer und den entsprechenden Pfaden zugewiesen 2018-04-02
publisher Herausgeber des VM-Images 2017-04-02
resourceGroupName Ressourcengruppe für den virtuellen Computer 2017-08-01
resourceId Die vollqualifizierte ID der Ressource 11.03.2019
sku Spezifische SKU für das VM-Image 2017-04-02
securityProfile.secureBootEnabled Gibt an, ob UEFI Secure Boot auf der VM aktiviert ist 2020-06-01
securityProfile.virtualTpmEnabled Gibt an, ob das virtuelle Trusted Platform Module (TPM) auf der VM aktiviert ist 2020-06-01
securityProfile.encryptionAtHost Gibt an, ob Verschlüsselung beim Host auf der VM aktiviert ist. 2021-11-01
securityProfile.securityType Gibt an, ob es sich bei der VM um eine Vertrauenswürdige VM oder eine Vertrauliche VM handelt. 2021-12-13
storageProfile Siehe „Speicherprofil“ weiter unten 2019-06-01
subscriptionId Azure-Abonnement für den virtuellen Computer 2017-08-01
tags Tags für den virtuellen Computer 2017-08-01
tagsList Tags, die zur einfacheren programmgesteuerten Analyse als JSON-Arrays formatiert sind 2019-06-04
userData Der Datensatz, der beim Erstellen des virtuellen Computers zur Verwendung während oder nach der Bereitstellung (Base64-codiert) angegeben wurde 2021-01-01
version Version des VM-Image 2017-04-02
virtualMachineScaleSet.id Die ID der mit flexibler Orchestrierung erstellten VM-Skalierungsgruppe, zu der der virtuelle Computer gehört. Dieses Feld ist für VM-Skalierungsgruppen, die mit einheitlicher Orchestrierung erstellt wurden, nicht verfügbar. 2021-03-01
vmId Der eindeutiger Bezeichner für die VM. Der Blog, auf den verwiesen wird, eignet sich nur für VMs, die SMBIOS < 2.6 verwenden. Für VMs, die SMBIOS >= 2.6 verwenden, wird die UUID von DMI im Little-Endian-Format angezeigt, daher ist es nicht erforderlich, Bytes zu wechseln. 2017-04-02
vmScaleSetName VM-Skalierungsgruppenname Ihrer Skalierungsgruppe 2017-12-01
vmSize Größe des virtuellen Computers 2017-04-02
zone Verfügbarkeitszone Ihres virtuellen Computers 2017-12-01

† Diese Version ist noch nicht vollständig verfügbar und wird möglicherweise nicht in allen Regionen unterstützt.

Speicherprofil

Das Speicherprofil eines virtuellen Computers ist in drei Kategorien unterteilt: Imagereferenz, Betriebssystemdatenträger und Datenträger sowie ein zusätzliches Objekt für den lokalen temporären Datenträger.

Das Imagereferenzobjekt enthält die folgenden Informationen zum Betriebssystemimage. Beachten Sie, dass ein Image entweder von der Plattform, dem Marketplace, dem Communitykatalog oder dem direkten freigegebenen Katalog stammen könnte, aber nicht von beiden:

Daten BESCHREIBUNG Eingeführt in Version
id Ressourcen-ID 2019-06-01
offer Angebot des Plattform- oder Marketplace-Images 2019-06-01
publisher Herausgeber*in des Plattform- oder Marketplace-Images 2019-06-01
sku SKU des Plattform- oder Marketplace-Images 2019-06-01
version Version des Images 2019-06-01
communityGalleryImageId Ressourcen-ID des Communityimages, andernfalls leer 2023-07-01
sharedGalleryImageId Ressourcen-ID oder direktes freigegebenes Image, andernfalls leer 2023-07-01
exactVersion Version der Community oder des direkten freigegebenen Images 2023-07-01

Das Betriebssystemdatenträgerobjekt enthält die folgenden Informationen zum Betriebssystemdatenträger, der vom virtuellen Computer verwendet wird:

Daten BESCHREIBUNG
caching Cachinganforderungen
createOption Informationen zur Erstellung des virtuellen Computers
diffDiskSettings Einstellungen für kurzlebige Datenträger
diskSizeGB Größe des Datenträgers in GB
image Virtuelle Festplatte des Quellenbenutzerimages
managedDisk Parameter für verwaltete Datenträger
name Name des Datenträgers
vhd Virtuelle Festplatte
writeAcceleratorEnabled Gibt an, ob writeAccelerator für den Datenträger aktiviert ist.

Das Datenträgerarray für Daten enthält eine Liste der Datenträger für Daten, die an den virtuellen Computer angefügt sind. Jedes Datenträgerobjekt enthält die folgenden Informationen:

Daten BESCHREIBUNG Eingeführt in Version
bytesPerSecondThrottle* Kontingent für Lese-/Schreibvorgänge auf dem Datenträger in Byte 2021-05-01
caching Cachinganforderungen 2019-06-01
createOption Informationen zur Erstellung des virtuellen Computers 2019-06-01
diffDiskSettings Einstellungen für kurzlebige Datenträger 2019-06-01
diskCapacityBytes* Größe des Datenträgers in Byte 2021-05-01
diskSizeGB Größe des Datenträgers in GB 2019-06-01
encryptionSettings Verschlüsselungseinstellungen für den Datenträger 2019-06-01
image Virtuelle Festplatte des Quellenbenutzerimages 2019-06-01
isSharedDisk* Gibt an, ob der Datenträger von mehreren Ressourcen gemeinsam genutzt wird 2021-05-01
isUltraDisk Gibt an, ob der Datenträger vom Typ „Disk Ultra“ ist 2021-05-01
lun Logische Gerätenummer des Datenträgers 2019-06-01
managedDisk Parameter für verwaltete Datenträger 2019-06-01
name Name des Datenträgers 2019-06-01
opsPerSecondThrottle* Kontingent für Lese-/Schreibvorgänge auf dem Datenträger in IOPS 2021-05-01
osType Typ des Betriebssystems, das auf dem Datenträger enthalten ist 2019-06-01
vhd Virtuelle Festplatte 2019-06-01
writeAcceleratorEnabled Gibt an, ob writeAccelerator für den Datenträger aktiviert ist. 2019-06-01

*Diese Felder werden nur bei Ultra Disks ausgefüllt. Für Nicht-Ultra Disks sind es leere Zeichenfolgen.

Das Verschlüsselungseinstellungsblob enthält Daten zur Verschlüsselung des Datenträgers (wenn er verschlüsselt ist):

Daten BESCHREIBUNG Eingeführt in Version
diskEncryptionKey.sourceVault.id Der Speicherort des Datenträgerverschlüsselungsschlüssels. 2021-11-01
diskEncryptionKey.secretUrl Der Speicherort des Geheimnisses. 2021-11-01
keyEncryptionKey.sourceVault.id Der Speicherort des Schlüsselverschlüsselungsschlüssels. 2021-11-01
keyEncryptionKey.keyUrl Der Speicherort des Schlüssels. 2021-11-01

Das Ressourcendatenträgerobjekt enthält die Größe (in Kilobyte) des lokalen temporären Datenträgers, der an den virtuellen Computer angefügt ist (sofern vorhanden). Wenn kein lokaler temporärer Datenträger für die VM vorhanden ist, lautet dieser Wert 0.

Daten BESCHREIBUNG Eingeführt in Version
resourceDisk.size Größe des lokalen temporären Datenträgers für den virtuellen Computer (in KB) 2021-02-01

Network

Daten BESCHREIBUNG Eingeführt in Version
ipv4.privateIpAddress Lokale IPv4-Adresse der VM 2017-04-02
ipv4.publicIpAddress Öffentliche IPv4-Adresse der VM 2017-04-02
subnet.address Subnetzadresse der VM 2017-04-02
subnet.prefix Subnetzpräfix, Beispiel 24 2017-04-02
ipv6.ipAddress Lokale IPv6-Adresse der VM 2017-04-02
macAddress VM-Mac-Adresse 2017-04-02

Hinweis

Es ist nicht garantiert, dass die vom Netzwerkaufruf zurückgegebenen NICs in Ordnung sind.

Abrufen von Benutzerdaten

Beim Erstellen eines neuen virtuellen Computers können Sie einen Datensatz angeben, der während oder nach der Bereitstellung des virtuellen Computers verwendet werden soll, und ihn über IMDS abrufen. Überprüfen Sie hier die Erfahrungen mit den End-to-End-Daten der Benutzer.

Verwenden Sie zum Einrichten von Benutzerdaten diese Schnellstartvorlage. Das folgende Beispiel zeigt, wie diese Daten über IMDS abgerufen werden. Dieses Feature ist ab der Version 2021-01-01 freigegeben.

Hinweis

Sicherheitshinweis: IMDS ist für alle Anwendungen auf der VM geöffnet, vertrauliche Daten sollten nicht in den Benutzerdaten gespeichert werden.

$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))

Beispiel 1: Nachverfolgen einer in Azure ausgeführten VM

Als Dienstanbieter müssen Sie möglicherweise die Anzahl von VMs nachverfolgen, auf denen Ihre Software ausgeführt wird, oder benötigen Agents, die die Eindeutigkeit der VM überwachen müssen. Um eine eindeutige ID für eine VM abrufen zu können, verwenden Sie das Feld vmId des Instanzmetadatendiensts.

Anforderung

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"

Antwort

5c08b38e-4d57-4c23-ac45-aca61037f084

Beispiel 2: Platzierung unterschiedlicher Datenreplikate

In bestimmten Szenarien ist die Platzierung unterschiedlicher Datenreplikate von primärer Bedeutung. Beispielsweise müssen Sie bei der HDFS-Replikatplatzierung oder bei der Containerplatzierung über einen Orchestrator die platformFaultDomain und die platformUpdateDomain kennen, auf denen die VM ausgeführt wird. Sie können auch Verfügbarkeitszonen für die Instanzen nutzen, um diese Entscheidungen zu treffen. Sie können diese Daten direkt über den IMDS abfragen.

Anforderung

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"

Antwort

0

Beispiel 3: Abrufen von VM-Tags

VM-Tags sind in der Instanz-API unter dem Instanz/Compute/Tags-Endpunkt enthalten. Möglicherweise wurden Tags auf Ihre Azure-VM angewendet, um sie logisch in einer Taxonomie zu strukturieren. Die einer VM zugewiesenen Tags können mithilfe der Abfrage unten abgerufen werden.

Anforderung

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"

Antwort

Department:IT;ReferenceNumber:123456;TestStatus:Pending

Das tags Feld ist eine Zeichenfolge, in der die Tags durch Semikolons getrennt sind. Diese Ausgabe kann ein Problem darstellen, wenn in den Tags Semikolons verwendet werden. Wenn ein Parser geschrieben wurde, um die Tags programmgesteuert zu extrahieren, sollten Sie auf das Feld tagsList zurückgreifen. Das Feld tagsList ist ein JSON-Array ohne Trennzeichen und folglich einfacher zu analysieren. Die einer VM zugewiesene tagsList kann mithilfe der Abfrage unten abgerufen werden.

Anforderung

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

Antwort

{
    "value":  [
                  {
                      "name":  "Department",
                      "value":  "IT"
                  },
                  {
                      "name":  "ReferenceNumber",
                      "value":  "123456"
                  },
                  {
                      "name":  "TestStatus",
                      "value":  "Pending"
                  }
              ],
    "Count":  3
}

Beispiel 4: Abrufen von weiteren Informationen zur VM während einer Supportanfrage

Als Dienstanbieter erhalten Sie möglicherweise eine Supportanfrage, für die Sie weitere Informationen zur VM erfahren möchten. Wenn Sie den Kunden auffordern, die Computemetadaten weiterzuleiten, können Sie dem Supportmitarbeiter grundlegende Informationen über die Art von VM in Azure bereitstellen.

Anforderung

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

Antwort

Hinweis

Die Antwort stellt eine JSON-Zeichenfolge dar. Die folgende Beispielantwort wird zur besseren Lesbarkeit im Schöndruck gedruckt.

{
    "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",
    "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": ""
}

Beispiel 5: Abrufen der Azure-Umgebung, in der die VM ausgeführt wird

Azure verfügt über verschiedene Sovereign Clouds wie Azure Government. In manchen Fällen muss die Azure-Umgebung gewisse Laufzeitentscheidungen treffen. Im folgenden Beispiel wird gezeigt, wie Sie dieses Verhalten erzielen können.

Anforderung

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"

Antwort

AzurePublicCloud

Die Cloud und die Werte der Azure-Umgebung sind hier aufgelistet.

Cloud Azure-Umgebung
Alle allgemein verfügbaren globalen Azure-Regionen AzurePublicCloud
Azure Government AzureUSGovernmentCloud
Microsoft Azure, betrieben von 21Vianet AzureChinaCloud
Azure Deutschland AzureGermanCloud

Beispiel 6: Abrufen von Netzwerkinformationen

Anforderung

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

Antwort

{
  "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"
    }
  ]
}

Beispiel 7: Abrufen der öffentlichen IP-Adresse

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"

Hinweis

Bestätigte Daten

Abrufen bestätigter Daten

Mithilfe des IMDS kann sichergestellt werden, dass die bereitgestellten Daten aus Azure stammen. Microsoft signiert einen Teil dieser Informationen, sodass Sie bestätigen können, dass Sie ein Image in Azure Marketplace in Azure ausführen.

GET /metadata/attested/document

Parameter

Name erforderlich/optional Beschreibung
api-version Erforderlich Die zum Durchführen der Anforderung verwendete Version
nonce Optional Eine 10-stellige Zeichenfolge, die als kryptografische Nonce fungiert. Wenn kein Wert angegeben wird, verwendet IMDS den aktuellen UTC-Zeitstempel.

Antwort

{
    "encoding":"pkcs7",
    "signature":"MIIEEgYJKoZIhvcNAQcCoIIEAzCCA/8CAQExDzANBgkqhkiG9w0BAQsFADCBugYJKoZIhvcNAQcBoIGsBIGpeyJub25jZSI6IjEyMzQ1NjY3NjYiLCJwbGFuIjp7Im5hbWUiOiIiLCJwcm9kdWN0IjoiIiwicHVibGlzaGVyIjoiIn0sInRpbWVTdGFtcCI6eyJjcmVhdGVkT24iOiIxMS8yMC8xOCAyMjowNzozOSAtMDAwMCIsImV4cGlyZXNPbiI6IjExLzIwLzE4IDIyOjA4OjI0IC0wMDAwIn0sInZtSWQiOiIifaCCAj8wggI7MIIBpKADAgECAhBnxW5Kh8dslEBA0E2mIBJ0MA0GCSqGSIb3DQEBBAUAMCsxKTAnBgNVBAMTIHRlc3RzdWJkb21haW4ubWV0YWRhdGEuYXp1cmUuY29tMB4XDTE4MTEyMDIxNTc1N1oXDTE4MTIyMDIxNTc1NlowKzEpMCcGA1UEAxMgdGVzdHN1YmRvbWFpbi5tZXRhZGF0YS5henVyZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAML/tBo86ENWPzmXZ0kPkX5dY5QZ150mA8lommszE71x2sCLonzv4/UWk4H+jMMWRRwIea2CuQ5RhdWAHvKq6if4okKNt66fxm+YTVz9z0CTfCLmLT+nsdfOAsG1xZppEapC0Cd9vD6NCKyE8aYI1pliaeOnFjG0WvMY04uWz2MdAgMBAAGjYDBeMFwGA1UdAQRVMFOAENnYkHLa04Ut4Mpt7TkJFfyhLTArMSkwJwYDVQQDEyB0ZXN0c3ViZG9tYWluLm1ldGFkYXRhLmF6dXJlLmNvbYIQZ8VuSofHbJRAQNBNpiASdDANBgkqhkiG9w0BAQQFAAOBgQCLSM6aX5Bs1KHCJp4VQtxZPzXF71rVKCocHy3N9PTJQ9Fpnd+bYw2vSpQHg/AiG82WuDFpPReJvr7Pa938mZqW9HUOGjQKK2FYDTg6fXD8pkPdyghlX5boGWAMMrf7bFkup+lsT+n2tRw2wbNknO1tQ0wICtqy2VqzWwLi45RBwTGB6DCB5QIBATA/MCsxKTAnBgNVBAMTIHRlc3RzdWJkb21haW4ubWV0YWRhdGEuYXp1cmUuY29tAhBnxW5Kh8dslEBA0E2mIBJ0MA0GCSqGSIb3DQEBCwUAMA0GCSqGSIb3DQEBAQUABIGAld1BM/yYIqqv8SDE4kjQo3Ul/IKAVR8ETKcve5BAdGSNkTUooUGVniTXeuvDj5NkmazOaKZp9fEtByqqPOyw/nlXaZgOO44HDGiPUJ90xVYmfeK6p9RpJBu6kiKhnnYTelUk5u75phe5ZbMZfBhuPhXmYAdjc7Nmw97nx8NnprQ="
}

Das Signaturblob ist eine signierte pkcs7-Version des Dokuments. Es enthält das zum Signieren verwendete Zertifikat zusammen mit bestimmten VM-spezifischen Details.

Für VMs, die mithilfe von Azure Resource Manager erstellt wurden, umfasst das Dokument vmId, sku, nonce, subscriptionId und timeStamp für die Erstellung und den Ablauf des Dokuments sowie die Planinformationen über das Image. Die Planinformationen werden nur für Azure Marketplace-Images ausgefüllt.

Für VMs, die mithilfe des klassischen Bereitstellungsmodells erstellt wurden, wird sichergestellt, dass nur die vmId und subscriptionId ausgefüllt werden. Sie können das Zertifikat aus der Antwort extrahieren und mithilfe dieses Zertifikats bestätigen, dass die Antwort gültig ist und von Azure stammt.

Das decodierte Dokument enthält die folgenden Felder:

Daten BESCHREIBUNG Eingeführt in Version
licenseType Typ der Lizenz für Azure-Hybridvorteil. Dies ist nur für AHB-aktivierte VMs verfügbar. 2020-09-01
nonce Eine Zeichenfolge, die optional mit der Anforderung angegeben werden kann. Wenn kein nonce angegeben wurde, wird der aktuelle Zeitstempel der koordinierten Weltzeit verwendet. 2018-10-01
plan Der Plan für das Azure Marketplace-Image. Enthält die Plan-ID (name), das Produktimage oder -angebot (product) und die Herausgeber-ID (publisher). 2018-10-01
timestamp.createdOn Der UTC-Zeitstempel für den Zeitpunkt, an dem das signierte Dokument erstellt wurde 2018-20-01
timestamp.expiresOn Der UTC-Zeitstempel für den Zeitpunkt, an dem das signierte Dokument abläuft 2018-10-01
vmId Eindeutiger Bezeichner für die VM 2018-10-01
subscriptionId Azure-Abonnement für den virtuellen Computer 2019-04-30
sku Bestimmte SKU für das VM-Image (entspricht der compute/sku-Eigenschaft vom Instanzmetadatenendpunkt [/metadata/instance]) 2019-11-01

Hinweis

Bei klassischen VMs (Nicht-Azure Resource Manager-VMs) wird nur „vmId“ garantiert ausgefüllt.

Beispieldokument:

{
   "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"
}

Leitfaden zur Signaturüberprüfung

Bei der Überprüfung der Signatur müssen Sie sich vergewissern, dass die Signatur mit einem Zertifikat aus Azure erstellt wurde. Dazu wird der alternative Antragstellername (Subject Alternative Name, SAN) des Zertifikats überprüft.

SAN-Beispiel: DNS Name=eastus.metadata.azure.com, DNS Name=metadata.azure.com

Hinweis

Die Domäne für die öffentliche Cloud und die einzelnen Sovereign Clouds unterscheiden sich voneinander.

Cloud Domäne im SAN
Alle allgemein verfügbaren globalen Azure-Regionen *.metadata.azure.com
Azure Government *.metadata.azure.us
Azure operated by 21Vianet *.metadata.azure.cn
Azure Deutschland *.metadata.microsoftazure.de

Hinweis

Die Zertifikate enthalten möglicherweise keine exakte Übereinstimmung für die Domäne. Daher sollte bei der Zertifizierungsüberprüfung eine beliebige Unterdomäne akzeptiert werden. (Akzeptieren Sie in Public Cloud-Regionen mit allgemeiner Verfügbarkeit beispielsweise *.metadata.azure.com.)

Es wird davon abgeraten, Zwischenzertifikate anzuheften. Weitere Informationen finden Sie unter Was ist das Anheften von Zertifikaten?. Beachten Sie, dass Instance Metadata Service von Azure KEINE Benachrichtigungen für zukünftige Zertifizierungsstellenänderungen bereitstellt. Orientieren Sie sich stattdessen bei allen zukünftigen Updates am zentralisierten Artikel mit Details zur Azure-Zertifizierungsstelle.

Beispiel 1: Überprüfen der Ausführung des virtuellen Computers in Azure

Anbieter in Azure Marketplace möchten sicherstellen, dass ihre Software nur für die Ausführung in Azure lizenziert ist. Wenn jemand die virtuelle Festplatte (VHD) in eine lokale Umgebung kopiert, muss der Anbieter in der Lage sein, dies zu erkennen. Über den IMDS können diese Anbieter signierte Daten erhalten, die sicherstellen, dass Antworten nur von Azure stammen.

Hinweis

Für dieses Beispiel muss das Hilfsprogramm „jq“ installiert sein.

Überprüfung

# 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)

Vergewissern Sie sich, dass die Signatur von Microsoft Azure stammt, und überprüfen Sie die Zertifikatkette auf Fehler.

# 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

Die nonce im signierten Dokument kann verglichen werden, wenn Sie in der ursprünglichen Anforderung einen nonce-Parameter angegeben haben.

Verwaltete Identität

Eine verwaltete Identität, die vom System zugewiesen wird, kann auf der VM aktiviert werden. Sie können der VM auch eine oder mehrere vom Benutzer zugeordnete verwaltete Identitäten zuweisen. Sie können dann Token für verwaltete Identitäten vom IMDS anfordern. Verwenden Sie diese Token für die Authentifizierung bei anderen Azure-Diensten, z. B. Azure Key Vault.

Ausführliche Schritte zum Aktivieren dieses Features finden Sie unter Abrufen eines Zugriffstokens.

Load Balancer-Metadaten

Wenn Sie Instanzen von VMs oder VM-Gruppen hinter einer Azure Load Balancer Standard-Instanz platzieren, können Sie mit IMDS Metadaten zum Lastenausgleich und zu den Instanzen abrufen. Weitere Informationen finden Sie unter Abrufen von Informationen zum Lastenausgleich.

Geplante Ereignisse

Sie können den Status der geplanten Ereignisse mithilfe des IMDS abrufen. Dann kann der Benutzer eine Reihe von Aktionen festlegen, die bei diesen Ereignissen ausgeführt werden sollen. Weitere Informationen finden Sie unter Scheduled Events für Linux oder Scheduled Events für Windows.

Beispielcode in verschiedenen Sprachen

Die folgende Tabelle listet Beispiele für den Aufruf des IMDS mithilfe verschiedener Sprachen innerhalb der VM auf:

Sprache Beispiel
Bash https://github.com/Microsoft/azureimds/blob/master/IMDSSample.sh
C# https://github.com/Microsoft/azureimds/blob/master/IMDSSample.cs
Go https://github.com/Microsoft/azureimds/blob/master/imdssample.go
Java https://github.com/Microsoft/azureimds/blob/master/imdssample.java
NodeJS https://github.com/Microsoft/azureimds/blob/master/IMDSSample.js
Perl https://github.com/Microsoft/azureimds/blob/master/IMDSSample.pl
PowerShell https://github.com/Microsoft/azureimds/blob/master/IMDSSample.ps1
Puppet https://github.com/keirans/azuremetadata
Python https://github.com/Microsoft/azureimds/blob/master/IMDSSample.py
Ruby https://github.com/Microsoft/azureimds/blob/master/IMDSSample.rb

Fehler und Debuggen

Wenn ein Datenelement nicht gefunden wird oder eine Anforderung ungültig ist, gibt der Instanzmetadatendienst standardmäßige HTTP-Fehler zurück. Beispiel:

HTTP-Statuscode `Reason`
200 OK Die Anforderung wurde erfolgreich gesendet.
400 Bad Request Fehlender Metadata: true-Header oder fehlender format=json-Parameter beim Abfragen eines Blattknotens
404 Not Found Das angeforderte Element ist nicht vorhanden.
405 Method Not Allowed Die HTTP-Methode (Verb) wird für den Endpunkt nicht unterstützt.
410 Gone Wiederholen Sie den Vorgang später (nach max. 70 Sekunden).
429 Too Many Requests Die API-Ratenbegrenzungen wurden überschritten
500 Service Error Wiederholen Sie den Vorgang später.

Häufig gestellte Fragen

  • Ich erhalte die Fehlermeldung 400 Bad Request, Required metadata header not specified. Was bedeutet dies?

    • Für den IMDS muss der Header Metadata: true in der Anforderung übergeben werden. Die Übergabe dieses Headers im REST-Aufruf ermöglicht den Zugriff auf den IMDS.
  • Warum erhalte ich keine Compute-Informationen für meine VM?

    • Derzeit unterstützt der IMDS nur Instanzen, die mit Azure Resource Manager erstellt wurden.
  • Ich habe meine VM vor einiger Zeit mithilfe von Azure Resource Manager erstellt. Warum sehe ich keine Computemetadateninformationen?

    • Wenn Sie Ihre VM nach September 2016 erstellt haben, fügen Sie ein Tag hinzu, damit Computemetadaten angezeigt werden. Wenn Sie Ihre VM vor September 2016 erstellt haben, fügen Sie der VM-Instanz Erweiterungen oder Datenträger für Daten hinzu oder entfernen Sie diese, um die Metadaten zu aktualisieren.
  • Sind Benutzerdaten identisch mit benutzerdefinierten Daten?

    • Benutzerdaten bieten die gleiche Funktionalität wie benutzerdefinierte Daten, sodass Sie Ihre eigenen Metadaten an die VM-Instanz übergeben können. Der Unterschied besteht im Abrufen von Benutzerdaten über IMDS und bleibt über die gesamte Lebensdauer der VM-Instanz bestehen. Das vorhandene benutzerdefinierte Datenfeature funktioniert weiterhin, wie in diesem Artikel beschrieben. Sie können benutzerdefinierte Daten jedoch nur über den lokalen Systemordner und nicht über IMDS erhalten.
  • Warum werden nicht alle Daten für eine neue Version ausgefüllt?

    • Wenn Sie Ihre VM nach September 2016 erstellt haben, fügen Sie ein Tag hinzu, damit Computemetadaten angezeigt werden. Wenn Sie Ihre VM vor September 2016 erstellt haben, fügen Sie der VM-Instanz Erweiterungen oder Datenträger für Daten hinzu oder entfernen Sie diese, um die Metadaten zu aktualisieren.
  • Warum erhalte ich die Fehler 500 Internal Server Error oder 410 Resource Gone?

    • Wiederholen Sie die Anforderung. Weitere Informationen finden Sie unter Behandeln vorübergehender Fehler. Wenn das Problem weiterhin besteht, erstellen Sie im Azure-Portal ein Supportproblem für den virtuellen Computer.
  • Gilt dies auch für Skalierungsgruppeninstanzen?

    • Ja, IMDS ist für Skalierungsgruppeninstanzen verfügbar.
  • Ich habe die Tags in meinen Skalierungsgruppen aktualisiert, aber sie werden (im Gegensatz zu Einzelinstanz-VMs) nicht in den Instanzen angezeigt. Mache ich etwas falsch?

    • Derzeit werden Tags für Skalierungsgruppen in VMs nur nach einem Neustart, einer Neuerstellung des Images oder der Änderung eines Datenträgers für die Instanz angezeigt.
  • Warum sehe ich keine SKU-Informationen für meine VM in den instance/compute-Details?

    • Bei benutzerdefinierten Images, die von Azure Marketplace aus erstellt wurden, behält die Azure-Plattform keine SKU-Informationen für das benutzerdefinierte Image und die Details für VMs, die aus dem benutzerdefinierten Image erstellt wurden, bei. Dies ist entwurfsbedingt und wird daher nicht in den VM- instance/compute Details aufgeführt.
  • Warum ist bei meiner Anforderung für meinen Dienstaufruf ein Timeout aufgetreten (oder konnte keine Verbindung hergestellt werden)?

    • Metadatenaufrufe müssen über die primäre IP-Adresse erfolgen, die der primären Netzwerkkarte des virtuellen Computers zugewiesen ist. Wenn Sie die Routen geändert haben, muss außerdem eine Route für die Adresse 169.254.169.254/32 in der lokalen Routingtabelle des virtuellen Computers vorhanden sein.

      1. Erstellen Sie eine Sicherung der lokalen Routingtabelle, und suchen Sie den IMDS-Eintrag. Zum Beispiel:

        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) ...
        
      2. Überprüfen Sie, ob eine Route für 169.254.169.254 vorhanden ist, und notieren Sie sich die entsprechende Netzwerkschnittstelle (z. B. 172.16.69.7).

      3. Erstellen Sie eine Sicherung der Schnittstellenkonfiguration, und suchen Sie die Schnittstelle, die der in der Routingtabelle referenzierten Schnittstelle entspricht. Notieren Sie sich die (physische) MAC-Adresse.

        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) ...
        
      4. Vergewissern Sie sich, dass die Schnittstelle der primären NIC und der primären IP-Adresse des virtuellen Computers entspricht. Sie finden die primäre NIC und primäre IP-Adresse in der Netzwerkkonfiguration im Azure-Portal oder durch Suchen mithilfe der Azure-Befehlszeilenschnittstelle. Notieren Sie sich die privaten IP-Adressen (und bei Verwendung der Azure CLI auch die MAC-Adresse). Hier ist ein PowerShell-CLI-Beispiel:

        $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
        
      5. Wenn sie nicht übereinstimmen, aktualisieren Sie die Routingtabelle so, dass die primäre NIC und die primäre IP-Adresse als Ziel festgelegt sind.


  • Failoverclustering in Windows Server

    • Wenn Sie den IMDS mit Failoverclustering abfragen, ist es gelegentlich erforderlich, der Routingtabelle eine Route hinzuzufügen. Gehen Sie dabei folgendermaßen vor:

      1. Öffnen Sie eine Eingabeaufforderung mit Administratorrechten.

      2. Führen Sie den folgenden Befehl aus, und notieren Sie die Adresse der Schnittstelle für das Netzwerkziel (0.0.0.0) in der IPv4-Routingtabelle.

      route print
      

      Hinweis

      Die folgende Beispielausgabe stammt aus einer Windows Server-VM mit aktiviertem Failovercluster. Der Einfachheit halber enthält die Ausgabe nur die IPv4-Routingtabelle.

      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
      

      Führen Sie den folgenden Befehl aus, und verwenden Sie dabei die Adresse der Schnittstelle für das Netzwerkziel (0.0.0.0), in diesem Beispiel 10.0.1.10.

      route add 169.254.169.254/32 10.0.1.10 metric 1 -p
      

Support

Wenn Sie nach mehreren Versuchen keine Metadatenantwort erhalten, können Sie ein Supportproblem im Azure-Portal erstellen.

Produktfeedback

Sie können hier in unserem Kanal für Benutzerfeedback unter „VMs“ > „Instance Metadata Service“ Feedback zu Produkten geben und Ideen unterbreiten.

Nächste Schritte