Azure Instance Metadata Service

Gäller för: ✔️ Virtuella Linux-datorer ✔️ med virtuella Windows-datorer ✔️ – flexibla skalningsuppsättningar

Azure Instance Metadata Service (IMDS) innehåller information om instanser av virtuella datorer som körs just nu. Du kan använda den till att hantera och konfigurera dina virtuella datorer. Den här informationen omfattar SKU, lagring, nätverkskonfigurationer och kommande underhållshändelser. En fullständig lista över tillgängliga data finns i Sammanfattning av slutpunktskategorier.

IMDS är tillgängligt för att köra instanser av virtuella datorer (VM) och skalningsuppsättningsinstanser. Alla slutpunkter stöder virtuella datorer som skapats och hanteras med hjälp av Azure Resource Manager. Endast kategorin Attested och nätverksdelen i kategorin Instans stöder virtuella datorer som skapats med hjälp av den klassiska distributionsmodellen. Den attesterade slutpunkten gör det endast i begränsad utsträckning.

IMDS är ett REST-API som är tillgängligt på en välkänd, icke-dirigerbar IP-adress (169.254.169.254). Du kan bara komma åt den från den virtuella datorn. Kommunikationen mellan den virtuella datorn och IMDS lämnar aldrig värden. Låt dina HTTP-klienter kringgå webbproxys i den virtuella datorn när du frågar IMDS och behandla 169.254.169.254 samma som 168.63.129.16.

Användning

Åtkomst till Azure Instance Metadata Service

Om du vill komma åt IMDS skapar du en virtuell dator från Azure Resource Manager eller Azure-portalen och använder följande exempel. Fler exempel finns i Exempel på Azure-instansmetadata.

Här är exempelkoden för att hämta alla metadata för en instans. Information om hur du kommer åt en specifik datakälla finns i Slutpunktskategorier för en översikt över alla tillgängliga funktioner.

Begär

Viktigt!

Det här exemplet kringgår proxyservrar. Du måste kringgå proxyservrar när du kör frågor mot IMDS. Mer information finns i Proxyservrar .

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 kräver PowerShell V6 eller senare. Se vår exempellagringsplats för exempel med äldre PowerShell-versioner.

Svar

Kommentar

Svaret är en JSON-sträng. Följande exempelsvar är ganska skrivet för läsbarhet.

{
    "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äkerhet och autentisering

Instansmetadatatjänsten är endast tillgänglig från en virtuell datorinstans som körs på en ip-adress som inte kan dirigeras. Virtuella datorer kan bara interagera med sina egna metadata/funktioner. API:et är endast HTTP och lämnar aldrig värden.

För att säkerställa att begäranden är direkt avsedda för IMDS och förhindra oavsiktlig eller oönskad omdirigering av begäranden:

  • Måste innehålla rubriken Metadata: true
  • Får inte innehålla ett X-Forwarded-For huvud

Alla begäranden som inte uppfyller båda dessa krav avvisas av tjänsten.

Viktigt!

IMDS är inte en kanal för känsliga data. API:et är oautentiserat och öppet för alla processer på den virtuella datorn. Information som exponeras via den här tjänsten bör betraktas som delad information till alla program som körs i den virtuella datorn.

Om det inte är nödvändigt för varje process på den virtuella datorn att få åtkomst till IMDS-slutpunkten kan du ange lokala brandväggsregler för att begränsa åtkomsten. Om till exempel bara en känd systemtjänst behöver komma åt instansmetadatatjänsten kan du ange en brandväggsregel på IMDS-slutpunkten, endast tillåta att den specifika processen(es) får åtkomst eller neka åtkomst för resten av processerna.

Proxyservrar

IMDS är inte avsett att användas bakom en proxy och det stöds inte. De flesta HTTP-klienter erbjuder ett alternativ för att inaktivera proxyservrar för dina begäranden, och den här funktionen måste användas när du kommunicerar med IMDS. Mer information finns i klientens dokumentation.

Viktigt!

Även om du inte känner till någon proxykonfiguration i din miljö måste du fortfarande åsidosätta alla standardinställningar för klientproxy. Proxykonfigurationer kan identifieras automatiskt och om du inte kringgår sådana konfigurationer utsätts du för avbrottsrisker om datorns konfiguration ändras i framtiden.

Frekvensbegränsning

I allmänhet är begäranden till IMDS begränsade till 5 begäranden per sekund (per virtuell dator). Begäranden som överskrider det här tröskelvärdet avvisas med 429-svar. Begäranden till kategorin Hanterad identitet är begränsade till 20 begäranden per sekund och 5 samtidiga begäranden (per virtuell dator).

HTTP-verb

Följande HTTP-verb stöds för närvarande:

Verb beskrivning
GET Hämta den begärda resursen

Parametrar

Slutpunkter kan ha stöd för obligatoriska och/eller valfria parametrar. Mer information finns i Schema och dokumentationen för den aktuella slutpunkten.

Frågeparametrar

IMDS-slutpunkter stöder HTTP-frågesträngsparametrar. Till exempel:

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

Anger parametrarna:

Name Värde
api-version 2021-01-01
format json

Begäranden med duplicerade frågeparameternamn avvisas.

Routningsparametrar

För vissa slutpunkter som returnerar större json-blobar har vi stöd för att lägga till vägparametrar till begärandeslutpunkten för att filtrera ned till en delmängd av svaret:

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

Parametrarna motsvarar de index/nycklar som skulle användas för att gå nedåt i json-objektet om du interagerade med en parsad representation.

Returnerar till exempel /metadata/instance json-objektet:

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

Om vi vill filtrera ned svaret till bara beräkningsegenskapen skickar vi begäran:

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

På samma sätt, om vi vill filtrera till en kapslad egenskap eller ett specifikt matriselement fortsätter vi att lägga till nycklar:

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

skulle filtrera till det första elementet Network.interface från egenskapen och returnera:

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

Kommentar

När du filtrerar till en lövnod format=json fungerar det inte. För dessa frågor format=text måste anges uttryckligen eftersom standardformatet är json.

Schema

Dataformat

Som standard returnerar IMDS data i JSON-format (Content-Type: application/json). Slutpunkter som stöder svarsfiltrering (se Routningsparametrar) stöder dock också formatet text.

Om du vill komma åt ett svarsformat som inte är standard anger du det begärda formatet som en frågesträngsparameter i begäran. Till exempel:

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

I json-svar kommer alla primitiver att vara av typen string, och saknade eller inapplicerbara värden inkluderas alltid men anges till en tom sträng.

Versionshantering

IMDS är versionshanterad och det är obligatoriskt att ange API-versionen i HTTP-begäran. Det enda undantaget till det här kravet är versionsslutpunkten , som kan användas för att dynamiskt hämta tillgängliga API-versioner.

När nyare versioner läggs till kan äldre versioner fortfarande nås för kompatibilitet om skripten har beroenden för specifika dataformat.

När du inte anger en version får du ett fel med en lista över de senaste versioner som stöds:

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

API-versioner som stöds

Kommentar

Version 2023-07-01 distribueras fortfarande, den kanske inte är tillgänglig i vissa regioner.

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

Swagger

En fullständig Swagger-definition för IMDS finns på: https://github.com/Azure/azure-rest-api-specs/blob/main/specification/imds/data-plane/readme.md

Regional tillgänglighet

Tjänsten är allmänt tillgänglig i alla Azure-moln.

Rotslutpunkt

Rotslutpunkten är http://169.254.169.254/metadata.

Slutpunktskategorier

IMDS-API:et innehåller flera slutpunktskategorier som representerar olika datakällor, som var och en innehåller en eller flera slutpunkter. Mer information finns i varje kategori.

Kategorirot beskrivning Version introducerad
/metadata/attested Se Attesterade data 2018-10-01
/metadata/identity Se Hanterad identitet via IMDS 2018-02-01
/metadata/instance Se Instansmetadata 2017-04-02
/metadata/loadbalancer Se Hämta Load Balancer-metadata via IMDS 2020-10-01
/metadata/scheduledevents Se Schemalagda händelser via IMDS 2017-08-01
/metadata/versions Se versioner Ej tillämpligt

Versioner

Lista API-versioner

Returnerar uppsättningen api-versioner som stöds.

GET /metadata/versions

Parametrar

Ingen (den här slutpunkten är oversionerad).

Response

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

Instansmetadata

Hämta vm-metadata

Exponerar viktiga metadata för den virtuella datorinstansen, inklusive beräkning, nätverk och lagring.

GET /metadata/instance

Parameters

Name Obligatoriskt/valfritt beskrivning
api-version Obligatoriskt Den version som används för att hantera begäran.
format Valfri* Formatet (json eller text) för svaret. *Obs! Kan krävas när du använder parametrar för begäran

Den här slutpunkten stöder svarsfiltrering via routningsparametrar.

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

Schemauppdelning:

Beräkning

Data beskrivning Version introducerad
azEnvironment Azure Environment där den virtuella datorn körs i 2018-10-01
additionalCapabilities.hibernationEnabled Identifierar om viloläge är aktiverat på den virtuella datorn 2021-11-01
customData Den här funktionen är inaktuell och inaktiverad i IMDS. Den har ersatts av userData 2019-02-01
evictionPolicy Anger hur en virtuell dator med oanvänd kapacitet ska avlägsnas. 2020-12-01
extendedLocation.type Typ av den utökade platsen för den virtuella datorn. 2021-03-01
extendedLocation.name Namn på den utökade platsen för den virtuella datorn 2021-03-01
host.id Namnet på den virtuella datorns värd. Observera att en virtuell dator antingen har en värd eller en hostGroup, men inte båda. 2021-11-15
hostGroup.id Namnet på den virtuella datorns värdgrupp. Observera att en virtuell dator antingen har en värd eller en hostGroup, men inte båda. 2021-11-15
isHostCompatibilityLayerVm Identifierar om den virtuella datorn körs på värdkompatibilitetsskiktet 2020-06-01
licenseType Typ av licens för Azure Hybrid-förmån. Detta finns bara för AHB-aktiverade virtuella datorer 2020-09-01
location Azure-region som den virtuella datorn körs i 2017-04-02
name Namn på den virtuella datorn 2017-04-02
offer Erbjudandeinformation för vm-avbildningen och finns endast för avbildningar som distribuerats från Azure-avbildningsgalleriet 2017-04-02
osProfile.adminUsername Anger namnet på administratörskontot 2020-07-15
osProfile.computerName Anger namnet på datorn 2020-07-15
osProfile.disablePasswordAuthentication Anger om lösenordsautentisering är inaktiverat. Detta finns bara för virtuella Linux-datorer 2020-10-01
osType Linux eller Windows 2017-04-02
placementGroupId Placeringsgrupp för din skalningsuppsättning 2017-08-01
plan Planera innehållande namn, produkt och utgivare för en virtuell dator om det är en Azure Marketplace-avbildning 2018-04-02
platformUpdateDomain Uppdatera domänen som den virtuella datorn körs i 2017-04-02
platformFaultDomain Feldomän som den virtuella datorn körs i 2017-04-02
platformSubFaultDomain Underfeldomän som den virtuella datorn körs i, om tillämpligt. 2021-10-01
priority Prioritet för den virtuella datorn. Mer information finns i Virtuella datorer med oanvänd kapacitet 2020-12-01
provider Provider för den virtuella datorn 2018-10-01
publicKeys Samling offentliga nycklar som tilldelats den virtuella datorn och sökvägar 2018-04-02
publisher Utgivare av VM-avbildningen 2017-04-02
resourceGroupName Resursgrupp för den virtuella datorn 2017-08-01
resourceId Resursens fullständigt kvalificerade ID 2019-03-11
sku Specifik SKU för VM-avbildningen 2017-04-02
securityProfile.secureBootEnabled Identifierar om säker UEFI-start är aktiverad på den virtuella datorn 2020-06-01
securityProfile.virtualTpmEnabled Identifierar om den virtuella betrodda plattformsmodulen (TPM) är aktiverad på den virtuella datorn 2020-06-01
securityProfile.encryptionAtHost Identifierar om kryptering på värden är aktiverat på den virtuella datorn 2021-11-01
securityProfile.securityType Identifierar om den virtuella datorn är en betrodd virtuell dator eller en konfidentiell virtuell dator 2021-12-13
storageProfile Se Lagringsprofil nedan 2019-06-01
subscriptionId Azure-prenumeration för den virtuella datorn 2017-08-01
tags Taggar för den virtuella datorn 2017-08-01
tagsList Taggar som är formaterade som en JSON-matris för enklare programmatisk parsning 2019-06-04
userData Den uppsättning data som angavs när den virtuella datorn skapades för användning under eller efter etableringen (Base64-kodad) 2021-01-01
version Version av VM-avbildningen 2017-04-02
virtualMachineScaleSet.id ID för vm-skalningsuppsättningen som skapats med flexibel orkestrering som den virtuella datorn ingår i. Det här fältet är inte tillgängligt för vm-skalningsuppsättningar som skapats med enhetlig orkestrering. 2021-03-01
vmId Unik identifierare för den virtuella datorn. Bloggen refererade endast till passar för virtuella datorer som har SMBIOS < 2.6. För virtuella datorer som har SMBIOS >= 2.6 visas UUID från DMI i lite endianskt format, vilket innebär att det inte finns något krav på att växla byte. 2017-04-02
vmScaleSetName Vm-skalningsuppsättningens namn på din skalningsuppsättning 2017-12-01
vmSize Storlek på virtuell dator 2017-04-02
zone Tillgänglighetszon för den virtuella datorn 2017-12-01

† Den här versionen är inte helt tillgänglig än och stöds kanske inte i alla regioner.

Lagringsprofil

Lagringsprofilen för en virtuell dator är uppdelad i tre kategorier: avbildningsreferens, OS-disk och datadiskar, plus ytterligare ett objekt för den lokala temporära disken.

Bildreferensobjektet innehåller följande information om OS-avbildningen. Observera att en bild kan komma antingen från plattformen, marknadsplatsen, communitygalleriet eller det direkt delade galleriet, men inte båda:

Data beskrivning Version introducerad
id Resurs-ID 2019-06-01
offer Erbjudande för plattforms- eller marketplace-avbildningen 2019-06-01
publisher Utgivare av plattforms- eller marketplace-avbildningen 2019-06-01
sku SKU för plattforms- eller marketplace-avbildningen 2019-06-01
version Version av avbildningen 2019-06-01
communityGalleryImageId Resurs-ID för community-avbildningen, tomt annars 2023-07-01
sharedGalleryImageId Resurs-ID o direkt delad avbildning, tomt annars 2023-07-01
exactVersion Version av communityn eller direkt delad avbildning 2023-07-01

OS-diskobjektet innehåller följande information om os-disken som används av den virtuella datorn:

Data beskrivning
caching Cachelagring krav
createOption Information om hur den virtuella datorn skapades
diffDiskSettings Tillfälliga diskinställningar
diskSizeGB Storlek på disken i GB
image Virtuell hårddisk för källanvändare
managedDisk Hanterade diskparametrar
name Disknamn
vhd Virtuell hårddisk
writeAcceleratorEnabled Om writeAccelerator är aktiverat på disken eller inte

Matrisen datadiskar innehåller en lista över datadiskar som är anslutna till den virtuella datorn. Varje datadiskobjekt innehåller följande information:

Data beskrivning Version introducerad
bytesPerSecondThrottle* Diskläsnings-/skrivkvot i byte 2021-05-01
caching Cachelagring krav 2019-06-01
createOption Information om hur den virtuella datorn skapades 2019-06-01
diffDiskSettings Tillfälliga diskinställningar 2019-06-01
diskCapacityBytes* Storleken på disken i byte 2021-05-01
diskSizeGB Storlek på disken i GB 2019-06-01
encryptionSettings Krypteringsinställningar för disken 2019-06-01
image Virtuell hårddisk för källanvändare 2019-06-01
isSharedDisk* Identifierar om disken delas mellan resurser 2021-05-01
isUltraDisk Identifierar om datadisken är en Ultra Disk 2021-05-01
lun Diskens logiska enhetsnummer 2019-06-01
managedDisk Hanterade diskparametrar 2019-06-01
name Disknamn 2019-06-01
opsPerSecondThrottle* Diskläsnings-/skrivkvot i IOPS 2021-05-01
osType Typ av operativsystem som ingår i disken 2019-06-01
vhd Virtuell hårddisk 2019-06-01
writeAcceleratorEnabled Om writeAccelerator är aktiverat på disken eller inte 2019-06-01

*De här fälten fylls bara i för Ultra Disks. de är tomma strängar från icke-Ultra Disks.

Krypteringsinställningsbloben innehåller data om hur disken krypteras (om den är krypterad):

Data beskrivning Version introducerad
diskEncryptionKey.sourceVault.id Platsen för diskkrypteringsnyckeln 2021-11-01
diskEncryptionKey.secretUrl Platsen för hemligheten 2021-11-01
keyEncryptionKey.sourceVault.id Platsen för nyckelkrypteringsnyckeln 2021-11-01
keyEncryptionKey.keyUrl Platsen för nyckeln 2021-11-01

Resursdiskobjektet innehåller storleken på den lokala tempdisken som är ansluten till den virtuella datorn, om den har en, i kilobyte. Om det inte finns någon lokal temporär disk för den virtuella datorn är det här värdet 0.

Data beskrivning Version introducerad
resourceDisk.size Storleken på den lokala temporära disken för den virtuella datorn (i kB) 2021-02-01

Nätverk

Data beskrivning Version introducerad
ipv4.privateIpAddress Lokal IPv4-adress för den virtuella datorn 2017-04-02
ipv4.publicIpAddress Offentlig IPv4-adress för den virtuella datorn 2017-04-02
subnet.address Undernätsadress för den virtuella datorn 2017-04-02
subnet.prefix Undernätsprefix, exempel 24 2017-04-02
ipv6.ipAddress Lokal IPv6-adress för den virtuella datorn 2017-04-02
macAddress Mac-adress för virtuell dator 2017-04-02

Kommentar

Nätverkskorten som returneras av nätverksanropet är inte garanterade att vara i ordning.

Hämta användardata

När du skapar en ny virtuell dator kan du ange en uppsättning data som ska användas under eller efter etableringen av den virtuella datorn och hämta dem via IMDS. Kontrollera användardataupplevelsen från slutpunkt till slutpunkt här.

Om du vill konfigurera användardata använder du snabbstartsmallen här. Exemplet nedan visar hur du hämtar dessa data via IMDS. Den här funktionen släpps med version 2021-01-01 och senare.

Kommentar

Säkerhetsmeddelande: IMDS är öppet för alla program på den virtuella datorn, känsliga data ska inte placeras i användardata.

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

Exempel 1: Spåra virtuella datorer som körs i Azure

Som tjänstleverantör kan du behöva spåra antalet virtuella datorer som kör programvaran eller ha agenter som behöver spåra unikhet för den virtuella datorn. Om du vill kunna hämta ett unikt ID för en virtuell dator använder du fältet vmId från Instance Metadata Service.

Begär

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"

Response

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

Exempel 2: Placering av olika datarepliker

För vissa scenarier är placeringen av olika datarepliker av största vikt. Till exempel kan HDFS-replikplacering eller containerplacering via en orkestrerare kräva att du känner platformFaultDomain till och platformUpdateDomain att den virtuella datorn körs på. Du kan också använda Tillgänglighetszoner för instanserna för att fatta dessa beslut. Du kan köra frågor mot dessa data direkt via IMDS.

Begär

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"

Response

0

Exempel 3: Hämta VM-taggar

VM-taggar ingår i instans-API:et under slutpunkten för instans/beräkning/taggar. Taggar kan ha tillämpats på den virtuella Azure-datorn för att logiskt organisera dem i en taxonomi. Taggarna som tilldelats till en virtuell dator kan hämtas med hjälp av begäran nedan.

Begär

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"

Response

Department:IT;ReferenceNumber:123456;TestStatus:Pending

Fältet tags är en sträng med taggarna avgränsade med semikolon. Det här utdata kan vara ett problem om semikolon används i själva taggarna. Om en parser skrivs för att programmatiskt extrahera taggarna bör du förlita dig på fältet tagsList . Fältet tagsList är en JSON-matris utan avgränsare och därmed enklare att parsa. Den tagsList som tilldelats till en virtuell dator kan hämtas med hjälp av begäran nedan.

Begär

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

Response

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

Exempel 4: Få mer information om den virtuella datorn under supportärende

Som tjänstleverantör kan du få ett supportsamtal där du vill veta mer om den virtuella datorn. Att be kunden att dela beräkningsmetadata kan ge grundläggande information till supportpersonalen om vilken typ av virtuell dator som finns i Azure.

Begär

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

Svar

Kommentar

Svaret är en JSON-sträng. Följande exempelsvar är ganska skrivet för läsbarhet.

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

Exempel 5: Hämta Azure-miljön där den virtuella datorn körs

Azure har olika nationella moln som Azure Government. Ibland behöver du Azure Environment för att fatta vissa körningsbeslut. Följande exempel visar hur du kan uppnå det här beteendet.

Begär

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"

Response

AzurePublicCloud

Molnet och värdena för Azure-miljön visas här.

Moln Azure-miljö
Alla allmänt tillgängliga globala Azure-regioner AzurePublicCloud
Azure Government AzureUSGovernmentCloud
Microsoft Azure drivs av 21Vianet AzureChinaCloud
Azure Tyskland AzureGermanCloud

Exempel 6: Hämta nätverksinformation

Begär

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

Response

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

Exempel 7: Hämta offentlig IP-adress

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"

Kommentar

  • Om du vill hämta IMDS-information för offentlig IP-adress för Standard SKU läser du Metadata-API för lastbalanserare för mer information.

Attesterade data

Hämta attesterade data

IMDS hjälper till att ge garantier för att de data som tillhandahålls kommer från Azure. Microsoft signerar en del av den här informationen så att du kan bekräfta att en avbildning på Azure Marketplace är den som du kör i Azure.

GET /metadata/attested/document

Parameters

Name Obligatoriskt/valfritt beskrivning
api-version Obligatoriskt Den version som används för att hantera begäran.
nonce Valfritt En tiosiffrig sträng som fungerar som en kryptografisk nonce. Om inget värde anges använder IMDS den aktuella UTC-tidsstämpeln.

Response

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

Signaturbloben är en pkcs7-signerad version av dokumentet. Den innehåller certifikatet som används för signering tillsammans med viss VM-specifik information.

För virtuella datorer som skapats med hjälp av Azure Resource Manager innehåller vmIddokumentet , sku, nonce, , subscriptionIdtimeStamp för skapande och förfallodatum för dokumentet och planinformationen om avbildningen. Planinformationen fylls bara i för Azure Marketplace-avbildningar.

För virtuella datorer som skapats med hjälp av den klassiska distributionsmodellen är det bara och vmIdsubscriptionId som garanterat fylls i. Du kan extrahera certifikatet från svaret och använda det för att bekräfta att svaret är giltigt och kommer från Azure.

Det avkodade dokumentet innehåller följande fält:

Data beskrivning Version introducerad
licenseType Typ av licens för Azure Hybrid-förmån. Detta finns bara för AHB-aktiverade virtuella datorer. 2020-09-01
nonce En sträng som kan tillhandahållas med begäran. Om inget nonce angavs används den aktuella tidsstämpeln för koordinerad universell tid. 2018-10-01
plan Azure Marketplace Image-planen. Innehåller plan-ID (namn), produktbild eller erbjudande (produkt) och utgivar-ID (utgivare). 2018-10-01
timestamp.createdOn UTC-tidsstämpeln för när det signerade dokumentet skapades 2018-20-01
timestamp.expiresOn UTC-tidsstämpeln för när det signerade dokumentet upphör att gälla 2018-10-01
vmId Unik identifierare för den virtuella datorn 2018-10-01
subscriptionId Azure-prenumeration för den virtuella datorn 2019-04-30
sku Specifik SKU för VM-avbildningen (korrelerar med compute/sku egenskapen från slutpunkten för instansmetadata [/metadata/instance]) 2019-11-01

Kommentar

För klassiska (icke-Azure Resource Manager) virtuella datorer är det bara vmId som garanterat fylls i.

Exempeldokument:

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

Vägledning för signaturverifiering

När du verifierar signaturen bör du bekräfta att signaturen har skapats med ett certifikat från Azure. Detta görs genom att verifiera certifikatmottagarens alternativa namn (SAN).

Exempel på SAN DNS Name=eastus.metadata.azure.com, DNS Name=metadata.azure.com

Kommentar

Domänen för det offentliga molnet och varje nationellt moln kommer att vara olika.

Moln Domän i SAN
Alla allmänt tillgängliga globala Azure-regioner *.metadata.azure.com
Azure Government *.metadata.azure.us
Azure drivs av 21Vianet *.metadata.azure.cn
Azure Tyskland *.metadata.microsoftazure.de

Kommentar

Certifikaten kanske inte har någon exakt matchning för domänen. Därför bör certifieringsverifieringen godkänna alla underdomäner (till exempel i offentliga moln accepterar *.metadata.azure.comallmänna tillgänglighetsregioner ).

Vi rekommenderar inte att certifikat fästs för mellanliggande certifikat. Mer information finns i Fäst certifikat – Pinning av certifikat och Azure-tjänster. Observera att Azure Instance Metadata Service INTE kommer att erbjuda meddelanden för framtida ändringar av certifikatutfärdare. I stället måste du följa artikeln om centraliserad Azure Certificate Authority-information för alla framtida uppdateringar.

Exempel 1: Verifiera att den virtuella datorn körs i Azure

Leverantörer på Azure Marketplace vill se till att deras programvara endast är licensierad att köras i Azure. Om någon kopierar den virtuella hårddisken till en lokal miljö måste leverantören kunna identifiera den. Via IMDS kan dessa leverantörer få signerade data som endast garanterar svar från Azure.

Kommentar

Det här exemplet kräver att jq-verktyget installeras.

Validering

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

Kontrollera att signaturen kommer från Microsoft Azure och kontrollerar om det finns fel i certifikatkedjan.

# 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

I nonce det signerade dokumentet kan jämföras om du angav en nonce parameter i den första begäran.

Hanterad identitet

En hanterad identitet, tilldelad av systemet, kan aktiveras på den virtuella datorn. Du kan också tilldela en eller flera användartilldelade hanterade identiteter till den virtuella datorn. Du kan sedan begära token för hanterade identiteter från IMDS. Använd dessa token för att autentisera med andra Azure-tjänster, till exempel Azure Key Vault.

Detaljerade steg för att aktivera den här funktionen finns i Hämta en åtkomsttoken.

Load Balancer Metadata

När du placerar virtuella datorer eller virtuella datoruppsättningsinstanser bakom en Azure Standard Load Balancer kan du använda IMDS för att hämta metadata relaterade till lastbalanseraren och instanserna. Mer information finns i Hämta information om lastbalanserare.

Schemalagda händelser

Du kan hämta status för de schemalagda händelserna med hjälp av IMDS. Sedan kan användaren ange en uppsättning åtgärder som ska köras vid dessa händelser. Mer information finns i Schemalagda händelser för Linux eller Schemalagda händelser för Windows.

Exempelkod på olika språk

I följande tabell visas exempel på hur du anropar IMDS med hjälp av olika språk på den virtuella datorn:

Språk Exempel
Bash https://github.com/Microsoft/azureimds/blob/master/IMDSSample.sh
C# https://github.com/Microsoft/azureimds/blob/master/IMDSSample.cs
Kör 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

Fel och felsökning

Om det inte går att hitta ett dataelement eller en felaktig begäran returnerar Instansmetadatatjänsten standard-HTTP-fel. Till exempel:

HTTP-statuskod Anledning
200 OK Begäran lyckades.
400 Bad Request Rubrik Metadata: true saknas eller parameter saknas format=json när du kör frågor mot en lövnod
404 Not Found Det begärda elementet finns inte
405 Method Not Allowed HTTP-metoden (verb) stöds inte på slutpunkten.
410 Gone Försök igen efter en tid i högst 70 sekunder
429 Too Many Requests API: s hastighetsgränser har överskridits
500 Service Error Försök igen efter en stund

Vanliga frågor och svar

  • Jag får felet 400 Bad Request, Required metadata header not specified. Vad betyder det?

    • IMDS kräver att rubriken Metadata: true skickas i begäran. Om du skickar det här huvudet i REST-anropet får du åtkomst till IMDS.
  • Varför får jag inte beräkningsinformation för min virtuella dator?

    • För närvarande stöder IMDS endast instanser som skapats med Azure Resource Manager.
  • Jag skapade min virtuella dator via Azure Resource Manager för en tid sedan. Varför visas inte information om beräkningsmetadata?

    • Om du skapade den virtuella datorn efter september 2016 lägger du till en tagg för att börja se beräkningsmetadata. Om du skapade den virtuella datorn före september 2016 lägger du till eller tar bort tillägg eller datadiskar i den virtuella datorinstansen för att uppdatera metadata.
  • Är användardata samma som anpassade data?

    • Användardata erbjuder liknande funktioner som anpassade data, så att du kan skicka dina egna metadata till den virtuella datorinstansen. Skillnaden är att användardata hämtas via IMDS och är beständiga under den virtuella datorinstansens livslängd. Den befintliga funktionen för anpassade data fortsätter att fungera enligt beskrivningen i den här artikeln. Du kan dock bara hämta anpassade data via den lokala systemmappen, inte via IMDS.
  • Varför visas inte alla data ifyllda för en ny version?

    • Om du skapade den virtuella datorn efter september 2016 lägger du till en tagg för att börja se beräkningsmetadata. Om du skapade den virtuella datorn före september 2016 lägger du till eller tar bort tillägg eller datadiskar i den virtuella datorinstansen för att uppdatera metadata.
  • Varför får jag felet 500 Internal Server Error eller 410 Resource Gone?

    • Gör om begäran. Mer information finns i Tillfällig felhantering. Om problemet kvarstår skapar du ett supportproblem i Azure-portalen för den virtuella datorn.
  • Skulle detta fungera för skalningsuppsättningsinstanser?

    • Ja, IMDS är tillgängligt för skalningsuppsättningsinstanser.
  • Jag har uppdaterat mina taggar i mina skalningsuppsättningar, men de visas inte i instanserna (till skillnad från virtuella datorer med en enda instans). Gör jag något fel?

    • För närvarande visas taggar för skalningsuppsättningar endast för den virtuella datorn vid omstart, omimering eller diskändring till instansen.
  • Varför ser jag inte SKU-informationen för min virtuella dator i instance/compute detalj?

    • För anpassade avbildningar som skapats från Azure Marketplace behåller Inte Azure-plattformen SKU-informationen för den anpassade avbildningen och information om virtuella datorer som skapats från den anpassade avbildningen. Detta är avsiktligt och visas därför inte i vm-informationen instance/compute .
  • Varför överskrids tidsgränsen för min begäran (eller misslyckades att ansluta) för mitt samtal till tjänsten?

    • Metadataanrop måste göras från den primära IP-adressen som tilldelats den virtuella datorns primära nätverkskort. Om du har ändrat dina vägar måste det dessutom finnas en väg för adressen 169.254.169.254/32 i den virtuella datorns lokala routningstabell.

      1. Dumpa din lokala routningstabell och leta efter POSTEN IMDS. Till exempel:

        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. Kontrollera att det finns en väg för 169.254.169.254och notera motsvarande nätverksgränssnitt (till exempel 172.16.69.7).

      3. Dumpa gränssnittskonfigurationen och hitta det gränssnitt som motsvarar det som refereras i routningstabellen och notera MAC-adressen (fysisk).

        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. Bekräfta att gränssnittet motsvarar den virtuella datorns primära nätverkskort och primära IP-adress. Du hittar det primära nätverkskortet och IP-adressen genom att titta på nätverkskonfigurationen i Azure-portalen eller genom att leta upp det med Azure CLI. Observera de privata IP-adresserna (och MAC-adressen om du använder CLI). Här är ett PowerShell CLI-exempel:

        $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. Om de inte matchar uppdaterar du routningstabellen så att det primära nätverkskortet och IP-adressen är riktade.


  • Redundansklustring i Windows Server

    • När du kör frågor mot IMDS med redundanskluster är det ibland nödvändigt att lägga till en väg i routningstabellen. Så här gör du:

      1. Öppna en kommandotolk med administratörsbehörighet.

      2. Kör följande kommando och notera adressen till Gränssnittet för nätverksmål (0.0.0.0) i IPv4-routningstabellen.

      route print
      

      Kommentar

      Följande exempelutdata kommer från en virtuell Windows Server-dator med redundanskluster aktiverat. För enkelhetens skull innehåller utdata endast IPv4-routningstabellen.

      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
      

      Kör följande kommando och använd adressen till Gränssnittet för nätverksmål (0.0.0.0), som är (10.0.1.10) i det här exemplet.

      route add 169.254.169.254/32 10.0.1.10 metric 1 -p
      

Support

Om du inte kan få ett metadatasvar efter flera försök kan du skapa ett supportproblem i Azure-portalen.

Produktfeedback

Du kan ge produktfeedback och idéer till vår kanal för användarfeedback under Virtual Machines > Instance Metadata Service här

Nästa steg