Udostępnij za pośrednictwem


Azure Instance Metadata Service

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux Maszyny wirtualne z systemem Windows — elastyczne zestawy ✔️ ✔️ skalowania

Usługa Azure Instance Metadata Service (IMDS) udostępnia informacje o aktualnie uruchomionych wystąpieniach maszyn wirtualnych. Można ją wykorzystać do zarządzania maszynami wirtualnymi i konfigurowania ich. Informacje te obejmują jednostkę SKU, magazyn, konfiguracje sieci i nadchodzące zdarzenia konserwacji. Aby uzyskać pełną listę dostępnych danych, zobacz Podsumowanie kategorii punktów końcowych.

Usługa IMDS jest dostępna do uruchamiania wystąpień maszyn wirtualnych i wystąpień zestawu skalowania. Wszystkie punkty końcowe obsługują maszyny wirtualne utworzone i zarządzane przy użyciu usługi Azure Resource Manager. Tylko kategoria Attest i część Sieć kategorii Wystąpienie obsługują maszyny wirtualne utworzone przy użyciu klasycznego modelu wdrażania. Testowany punkt końcowy robi to tylko w ograniczonym zakresie.

IMDS to interfejs API REST dostępny pod dobrze znanym, nieruchomym adresem IP (169.254.169.254). Dostęp do niego można uzyskać tylko z poziomu maszyny wirtualnej. Komunikacja między maszyną wirtualną a usługą IMDS nigdy nie opuszcza hosta. Klienci HTTP pomijają internetowe serwery proxy na maszynie wirtualnej podczas wykonywania zapytań dotyczących usług IMDS i traktują 169.254.169.254 je tak samo jak 168.63.129.16.

Użycie

Uzyskiwanie dostępu do usługi Azure Instance Metadata Service

Aby uzyskać dostęp do usługi IMDS, utwórz maszynę wirtualną z poziomu usługi Azure Resource Manager lub witryny Azure Portal i skorzystaj z poniższych przykładów. Aby uzyskać więcej przykładów, zobacz Przykłady metadanych wystąpienia platformy Azure.

Oto przykładowy kod umożliwiający pobranie wszystkich metadanych dla wystąpienia. Aby uzyskać dostęp do określonego źródła danych, zobacz Kategorie punktów końcowych, aby zapoznać się z omówieniem wszystkich dostępnych funkcji.

Zażądaj

Ważne

W tym przykładzie pomijane są serwery proxy. Podczas wykonywania zapytań w usłudze IMDS należy pominąć serwery proxy. Aby uzyskać dodatkowe informacje, zobacz Serwery proxy .

Uwaga

Żądania IMDS muszą być wysyłane przy użyciu podstawowej karty sieciowej i podstawowego adresu IP maszyny wirtualnej, a protokół DHCP musi być włączony.

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 program wymaga programu PowerShell w wersji 6 lub nowszej. Zobacz nasze repozytorium przykładów, aby zapoznać się ze starszymi wersjami programu PowerShell.

Odpowiedź

Uwaga

Odpowiedź jest ciągiem JSON. Następująca przykładowa odpowiedź jest dość drukowana w celu zapewnienia czytelności.

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

Zabezpieczenia i uwierzytelnianie

Usługa metadanych wystąpienia jest dostępna tylko z poziomu uruchomionego wystąpienia maszyny wirtualnej na nieobsługiwanym adresie IP. Maszyny wirtualne mogą korzystać tylko z własnych metadanych/funkcji. Interfejs API jest tylko http i nigdy nie opuszcza hosta.

Aby zapewnić, że żądania są bezpośrednio przeznaczone dla usług IMDS i zapobiegać niezamierzonemu lub niechcianemu przekierowywaniu żądań, żądania:

  • Musi zawierać nagłówek Metadata: true
  • Nie może zawierać nagłówka X-Forwarded-For

Każde żądanie, które nie spełnia obu tych wymagań, zostanie odrzucone przez usługę.

Ważne

ImDS nie jest kanałem danych poufnych. Interfejs API jest nieuwierzytelniony i otwarty dla wszystkich procesów na maszynie wirtualnej. Informacje udostępniane za pośrednictwem tej usługi powinny być traktowane jako informacje udostępnione wszystkim aplikacjom działającym wewnątrz maszyny wirtualnej.

Jeśli nie jest konieczne, aby każdy proces na maszynie wirtualnej mógł uzyskać dostęp do punktu końcowego usługi IMDS, możesz ustawić lokalne reguły zapory, aby ograniczyć dostęp. Jeśli na przykład tylko znana usługa systemowa musi uzyskać dostęp do usługi metadanych wystąpienia, możesz ustawić regułę zapory w punkcie końcowym USŁUGI IMDS, zezwalając tylko określonym procesom na dostęp lub odmawiając dostępu do pozostałych procesów.

Serwery proxy

Usługa IMDS nie jest przeznaczona do użycia za serwerem proxy i nie jest obsługiwana. Większość klientów HTTP zapewnia opcję wyłączenia serwerów proxy na żądaniach, a ta funkcja musi być używana podczas komunikacji z usługami IMDS. Aby uzyskać szczegółowe informacje, zapoznaj się z dokumentacją klienta.

Ważne

Nawet jeśli nie znasz żadnej konfiguracji serwera proxy w danym środowisku, nadal musisz zastąpić wszystkie domyślne ustawienia serwera proxy klienta. Konfiguracje serwera proxy można odnaleźć automatycznie i nie można pominąć takich konfiguracji, co powoduje ryzyko wystąpienia awarii, jeśli konfiguracja maszyny zostanie zmieniona w przyszłości.

Rate limiting (Ograniczanie szybkości)

Ogólnie rzecz biorąc, żądania do usług IMDS są ograniczone do 5 żądań na sekundę (na podstawie maszyny wirtualnej). Żądania przekraczające ten próg zostaną odrzucone z 429 odpowiedziami. Żądania do kategorii Tożsamość zarządzana są ograniczone do 20 żądań na sekundę i 5 współbieżnych żądań (na podstawie maszyny wirtualnej).

Czasowniki HTTP

Obecnie obsługiwane są następujące czasowniki HTTP:

Czasownik opis
GET Pobieranie żądanego zasobu

Parametry

Punkty końcowe mogą obsługiwać wymagane parametry i/lub opcjonalne. Aby uzyskać szczegółowe informacje, zobacz Schemat i dokumentację dla konkretnego punktu końcowego.

Parametry zapytań

Punkty końcowe IMDS obsługują parametry ciągu zapytania HTTP. Na przykład:

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

Określa parametry:

Nazwa/nazwisko Wartość
api-version 2021-01-01
format json

Żądania z zduplikowanymi nazwami parametrów zapytania zostaną odrzucone.

Parametry tras

W przypadku niektórych punktów końcowych, które zwracają większe obiekty blob json, obsługujemy dołączanie parametrów trasy do punktu końcowego żądania w celu filtrowania w dół do podzestawu odpowiedzi:

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

Parametry odpowiadają indeksom/kluczom, które byłyby używane do przechodzenia w dół obiektu json, gdyby interakcja z analizowaną reprezentacją.

Na przykład /metadata/instance zwraca obiekt json:

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

Jeśli chcemy przefiltrować odpowiedź tylko do właściwości obliczeniowej, wyślemy żądanie:

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

Podobnie, jeśli chcemy filtrować do właściwości zagnieżdżonej lub określonego elementu tablicy, nadal dołączamy klucze:

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

filtruje do pierwszego elementu z Network.interface właściwości i zwraca:

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

Uwaga

Podczas filtrowania do węzła format=json liścia nie działa. W przypadku tych zapytań format=text należy jawnie określić, ponieważ domyślny format to json.

Schemat

Format danych

Domyślnie usługa IMDS zwraca dane w formacie JSON (Content-Type: application/json). Jednak punkty końcowe obsługujące filtrowanie odpowiedzi (zobacz Parametry trasy) obsługują również format text.

Aby uzyskać dostęp do formatu odpowiedzi innego niż domyślny, określ żądany format jako parametr ciągu zapytania w żądaniu. Na przykład:

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

W odpowiedziach w formacie JSON wszystkie elementy pierwotne będą typu string, a brakujące lub niestosowalne wartości są zawsze uwzględniane, ale zostaną ustawione na pusty ciąg.

Wersje

Usługa IMDS jest wersjonowana i określenie wersji interfejsu API w żądaniu HTTP jest obowiązkowe. Jedynym wyjątkiem od tego wymagania jest punkt końcowy wersji , który może służyć do dynamicznego pobierania dostępnych wersji interfejsu API.

W miarę dodawania nowszych wersji starsze wersje mogą być nadal dostępne w celu zapewnienia zgodności, jeśli skrypty mają zależności od określonych formatów danych.

Jeśli nie określisz wersji, zostanie wyświetlony błąd z listą najnowszych obsługiwanych wersji:

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

Obsługiwane wersje interfejsu API

Uwaga

Wersja 2023-11-15 jest nadal wdrażana, ale może nie być dostępna w niektórych regionach.

  • 2023-11-15
  • 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

Pełna definicja struktury Swagger dla usługi IMDS jest dostępna pod adresem: https://github.com/Azure/azure-rest-api-specs/blob/main/specification/imds/data-plane/readme.md

Dostępność w regionach

Usługa jest ogólnie dostępna we wszystkich chmurach platformy Azure.

Główny punkt końcowy

Główny punkt końcowy to http://169.254.169.254/metadata.

Kategorie punktów końcowych

Interfejs API IMDS zawiera wiele kategorii punktów końcowych reprezentujących różne źródła danych, z których każdy zawiera co najmniej jeden punkt końcowy. Aby uzyskać szczegółowe informacje, zobacz każdą kategorię.

Katalog główny kategorii opis Wprowadzona wersja
/metadata/attested Zobacz Dane testowane 2018-10-01
/metadata/identity Zobacz Tożsamość zarządzana za pośrednictwem usług IMDS 2018-02-01
/metadata/instance Zobacz Metadane wystąpienia 2017-04-02
/metadata/loadbalancer Zobacz Pobieranie metadanych modułu równoważenia obciążenia za pośrednictwem usługi IMDS 2020-10-01
/metadata/scheduledevents Zobacz Zaplanowane zdarzenia za pośrednictwem usługi IMDS 2017-08-01
/metadata/versions Zobacz wersje Nie dotyczy

Wersje

Wyświetlanie listy wersji interfejsu API

Zwraca zestaw obsługiwanych wersji interfejsu API.

GET /metadata/versions

Parametry

Brak (ten punkt końcowy jest niewersjowany).

Response

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

Metadane wystąpienia

Pobieranie metadanych maszyny wirtualnej

Uwidacznia ważne metadane dla wystąpienia maszyny wirtualnej, w tym obliczenia, sieć i magazyn.

GET /metadata/instance

Parametry

Nazwisko Wymagane/opcjonalnie opis
api-version Wymagania Wersja używana do obsługi żądania.
format Fakultatywny* Format (json lub text) odpowiedzi. *Uwaga: może być wymagane w przypadku korzystania z parametrów żądania

Ten punkt końcowy obsługuje filtrowanie odpowiedzi za pomocą parametrów trasy.

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

Podział schematu:

Środowisko obliczeniowe

Dane opis Wprowadzona wersja
azEnvironment Środowisko platformy Azure, w którym uruchomiono maszynę wirtualną 2018-10-01
additionalCapabilities.hibernationEnabled Określa, czy hibernacji jest włączona na maszynie wirtualnej 2021-11-01
customData Ta funkcja jest przestarzała i wyłączona w usłudze IMDS. Został zastąpiony przez userData 2019-02-01
evictionPolicy Ustawia sposób wykluczania maszyny wirtualnej typu spot. 2020-12-01
extendedLocation.type Typ rozszerzonej lokalizacji maszyny wirtualnej. 2021-03-01
extendedLocation.name Nazwa rozszerzonej lokalizacji maszyny wirtualnej 2021-03-01
host.id Nazwa hosta maszyny wirtualnej. Należy pamiętać, że maszyna wirtualna będzie mieć hosta lub grupę hostów, ale nie obie. 2021-11-15
hostGroup.id Nazwa grupy hostów maszyny wirtualnej. Należy pamiętać, że maszyna wirtualna będzie mieć hosta lub grupę hostów, ale nie obie. 2021-11-15
isHostCompatibilityLayerVm Określa, czy maszyna wirtualna działa w warstwie zgodności hosta 2020-06-01
licenseType Typ licencji dla Korzyść użycia hybrydowego platformy Azure. Dotyczy to tylko maszyn wirtualnych z obsługą usługi AHB 2020-09-01
location Region świadczenia usługi Azure, w którym jest uruchomiona maszyna wirtualna 2017-04-02
name Nazwa maszyny wirtualnej 2017-04-02
offer Informacje o ofercie obrazu maszyny wirtualnej i są obecne tylko dla obrazów wdrożonych z galerii obrazów platformy Azure 2017-04-02
osProfile.adminUsername Określa nazwę konta administratora 2020-07-15
osProfile.computerName Określa nazwę komputera 2020-07-15
osProfile.disablePasswordAuthentication Określa, czy uwierzytelnianie haseł jest wyłączone. Dotyczy to tylko maszyn wirtualnych z systemem Linux 2020-10-01
osType Linux czy Windows 2017-04-02
physicalZone Strefa fizyczna maszyny wirtualnej 2023-11-15
placementGroupId Grupa umieszczania zestawu skalowania 2017-08-01
plan Plan zawierający nazwę, produkt i wydawcę dla maszyny wirtualnej, jeśli jest to obraz witryny Azure Marketplace 2018-04-02
platformUpdateDomain Aktualizowanie domeny uruchomionej na maszynie wirtualnej 2017-04-02
platformFaultDomain Domena błędów uruchomiona na maszynie wirtualnej 2017-04-02
platformSubFaultDomain Domena błędów podrzędnych, w których działa maszyna wirtualna, jeśli ma to zastosowanie. 2021-10-01
priority Priorytet maszyny wirtualnej. Aby uzyskać więcej informacji, zobacz Maszyny wirtualne typu spot 2020-12-01
provider Dostawca maszyny wirtualnej 2018-10-01
publicKeys Kolekcja kluczy publicznych przypisanych do maszyny wirtualnej i ścieżek 2018-04-02
publisher Wydawca obrazu maszyny wirtualnej 2017-04-02
resourceGroupName Grupa zasobów dla maszyny wirtualnej 2017-08-01
resourceId W pełni kwalifikowany identyfikator zasobu 2019-03-11
sku Określona jednostka SKU dla obrazu maszyny wirtualnej 2017-04-02
securityProfile.secureBootEnabled Określa, czy bezpieczny rozruch UEFI jest włączony na maszynie wirtualnej 2020-06-01
securityProfile.virtualTpmEnabled Określa, czy wirtualny moduł TPM (Trusted Platform Module) jest włączony na maszynie wirtualnej 2020-06-01
securityProfile.encryptionAtHost Określa, czy szyfrowanie na hoście jest włączone na maszynie wirtualnej 2021-11-01
securityProfile.securityType Określa, czy maszyna wirtualna jest zaufaną maszyną wirtualną lub poufnej maszyny wirtualnej 2021-12-13
storageProfile Zobacz profil magazynu poniżej 2019-06-01
subscriptionId Subskrypcja platformy Azure dla maszyny wirtualnej 2017-08-01
tags Tagi maszyny wirtualnej 2017-08-01
tagsList Tagi sformatowane jako tablica JSON w celu łatwiejszego programowego analizowania 2019-06-04
userData Zestaw danych określony podczas aprowizacji maszyny wirtualnej lub po jej utworzeniu (zakodowany w formacie Base64) 2021-01-01
version Wersja obrazu maszyny wirtualnej 2017-04-02
virtualMachineScaleSet.id Identyfikator zestawu skalowania maszyn wirtualnych utworzony za pomocą elastycznej aranżacji , której częścią jest maszyna wirtualna. To pole nie jest dostępne dla zestawów skalowania maszyn wirtualnych utworzonych z jednolitą aranżacją. 2021-03-01
vmId Unikatowy identyfikator maszyny wirtualnej. W blogu odwoływali się tylko maszyny wirtualne, które mają protokół SMBIOS < 2.6. W przypadku maszyn wirtualnych, które mają wartość SMBIOS >= 2.6, identyfikator UUID z DMI jest wyświetlany w formacie mało endianu, dlatego nie ma potrzeby przełączania bajtów. 2017-04-02
vmScaleSetName Nazwa zestawu skalowania maszyn wirtualnych zestawu skalowania 2017-12-01
vmSize Rozmiar maszyny wirtualnej 2017-04-02
zone Strefa dostępności maszyny wirtualnej 2017-12-01

† Ta wersja nie jest jeszcze w pełni dostępna i może nie być obsługiwana we wszystkich regionach.

Profil magazynu

Profil magazynu maszyny wirtualnej jest podzielony na trzy kategorie: odwołanie do obrazu, dysk systemu operacyjnego i dyski danych oraz dodatkowy obiekt dla lokalnego dysku tymczasowego.

Obiekt odwołania do obrazu zawiera następujące informacje o obrazie systemu operacyjnego. Należy pamiętać, że obraz może pochodzić z platformy, witryny Marketplace, galerii społeczności lub bezpośredniej galerii udostępnionej, ale nie obu tych elementów:

Dane opis Wprowadzona wersja
id Identyfikator zasobu 2019-06-01
offer Oferta obrazu platformy lub witryny Marketplace 2019-06-01
publisher Wydawca obrazu platformy lub witryny Marketplace 2019-06-01
sku Jednostka SKU obrazu platformy lub witryny Marketplace 2019-06-01
version Wersja obrazu 2019-06-01
communityGalleryImageId Identyfikator zasobu obrazu społeczności, pusty w przeciwnym razie 2023-07-01
sharedGalleryImageId Identyfikator zasobu o obrazie udostępnionym bezpośrednio, pusty w przeciwnym razie 2023-07-01
exactVersion Wersja społeczności lub bezpośredni udostępniony obraz 2023-07-01

Obiekt dysku systemu operacyjnego zawiera następujące informacje o dysku systemu operacyjnego używanego przez maszynę wirtualną:

Dane opis
caching Wymagania dotyczące buforowania
createOption Informacje o sposobie tworzenia maszyny wirtualnej
diffDiskSettings Ustawienia dysku efemerycznego
diskSizeGB Rozmiar dysku w GB
image Wirtualny dysk twardy obrazu użytkownika źródłowego
managedDisk Parametry dysku zarządzanego
name Disk name
vhd Wirtualny dysk twardy
writeAcceleratorEnabled Określa, czy na dysku jest włączony moduł writeAccelerator

Tablica dysków danych zawiera listę dysków danych dołączonych do maszyny wirtualnej. Każdy obiekt dysku danych zawiera następujące informacje:

Dane opis Wprowadzona wersja
bytesPerSecondThrottle* Limit przydziału odczytu/zapisu dysku w bajtach 2021-05-01
caching Wymagania dotyczące buforowania 2019-06-01
createOption Informacje o sposobie tworzenia maszyny wirtualnej 2019-06-01
diffDiskSettings Ustawienia dysku efemerycznego 2019-06-01
diskCapacityBytes* Rozmiar dysku w bajtach 2021-05-01
diskSizeGB Rozmiar dysku w GB 2019-06-01
encryptionSettings Ustawienia szyfrowania dysku 2019-06-01
image Wirtualny dysk twardy obrazu użytkownika źródłowego 2019-06-01
isSharedDisk* Określa, czy dysk jest współużytkowany między zasobami 2021-05-01
isUltraDisk Określa, czy dysk danych jest dyskiem w warstwie Ultra Disk 2021-05-01
lun Numer jednostki logicznej dysku 2019-06-01
managedDisk Parametry dysku zarządzanego 2019-06-01
name Disk name 2019-06-01
opsPerSecondThrottle* Limit przydziału odczytu/zapisu dysku na sekundę 2021-05-01
osType Typ systemu operacyjnego dołączonego do dysku 2019-06-01
vhd Wirtualny dysk twardy 2019-06-01
writeAcceleratorEnabled Określa, czy na dysku jest włączony moduł writeAccelerator 2019-06-01

*Te pola są wypełniane tylko dla dysków w warstwie Ultra; są pustymi ciągami z dysków innych niż Ultra Disk.

Obiekt blob ustawień szyfrowania zawiera dane dotyczące sposobu szyfrowania dysku (jeśli jest zaszyfrowany):

Dane opis Wprowadzona wersja
diskEncryptionKey.sourceVault.id Lokalizacja klucza szyfrowania dysku 2021-11-01
diskEncryptionKey.secretUrl Lokalizacja wpisu tajnego 2021-11-01
keyEncryptionKey.sourceVault.id Lokalizacja klucza szyfrowania klucza 2021-11-01
keyEncryptionKey.keyUrl Lokalizacja klucza 2021-11-01

Obiekt dysku zasobu zawiera rozmiar lokalnego dysku tymczasowego dołączonego do maszyny wirtualnej, jeśli ma go w kilobajtach. Jeśli dla maszyny wirtualnej nie ma lokalnego dysku tymczasowego, ta wartość to 0.

Dane opis Wprowadzona wersja
resourceDisk.size Rozmiar lokalnego dysku tymczasowego maszyny wirtualnej (w kB) 2021-02-01

Sieciowe

Dane opis Wprowadzona wersja
ipv4.privateIpAddress Lokalny adres IPv4 maszyny wirtualnej 2017-04-02
ipv4.publicIpAddress Publiczny adres IPv4 maszyny wirtualnej 2017-04-02
subnet.address Adres podsieci maszyny wirtualnej 2017-04-02
subnet.prefix Prefiks podsieci, przykład 24 2017-04-02
ipv6.ipAddress Lokalny adres IPv6 maszyny wirtualnej 2017-04-02
macAddress Adres mac maszyny wirtualnej 2017-04-02

Uwaga

Karty sieciowe zwrócone przez wywołanie sieciowe nie są gwarantowane w kolejności.

Pobieranie danych użytkownika

Podczas tworzenia nowej maszyny wirtualnej można określić zestaw danych, które mają być używane podczas aprowizacji maszyny wirtualnej lub po niej, i pobrać go za pośrednictwem usługi IMDS. Sprawdź środowisko danych użytkownika końcowego tutaj.

Aby skonfigurować dane użytkownika, skorzystaj z szablonu szybkiego startu tutaj. W poniższym przykładzie pokazano, jak pobrać te dane za pośrednictwem usługi IMDS. Ta funkcja jest udostępniana z wersją 2021-01-01 i nowszymi wersjami.

Uwaga

Powiadomienie o zabezpieczeniach: usługa IMDS jest otwarta dla wszystkich aplikacji na maszynie wirtualnej. Poufne dane nie powinny być umieszczane w danych użytkownika.

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

Przykład 1. Śledzenie maszyny wirtualnej uruchomionej na platformie Azure

Jako dostawca usług może być konieczne śledzenie liczby maszyn wirtualnych z uruchomionym oprogramowaniem lub agentów, którzy muszą śledzić unikatowość maszyny wirtualnej. Aby uzyskać unikatowy identyfikator maszyny wirtualnej, użyj vmId pola z usługi metadanych wystąpienia.

Zażądaj

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

Przykład 2. Umieszczanie różnych replik danych

W przypadku niektórych scenariuszy umieszczanie różnych replik danych ma kluczowe znaczenie. Na przykład umieszczanie repliki hdFS lub umieszczanie kontenera za pośrednictwem orkiestratora może wymagać znajomości platformFaultDomain elementu i platformUpdateDomain uruchomionej maszyny wirtualnej. Do podejmowania tych decyzji można również użyć Strefy dostępności dla wystąpień. Możesz wykonywać zapytania dotyczące tych danych bezpośrednio za pośrednictwem usług IMDS.

Zażądaj

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

Przykład 3. Pobieranie tagów maszyn wirtualnych

Tagi maszyn wirtualnych są dołączane do interfejsu API wystąpienia w punkcie końcowym wystąpienia/obliczeń/tagów. Tagi mogły zostać zastosowane do maszyny wirtualnej platformy Azure w celu logicznego zorganizowania ich w taksonomię. Tagi przypisane do maszyny wirtualnej można pobrać przy użyciu poniższego żądania.

Zażądaj

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

Pole tags to ciąg z tagami rozdzielanymi średnikami. Te dane wyjściowe mogą być problemem, jeśli średniki są używane w samych tagach. Jeśli analizator jest zapisywany w celu programowego wyodrębniania tagów, należy polegać na tagsList polu. Pole tagsList jest tablicą JSON bez ograniczników, a w związku z tym łatwiejsze do analizowania. TagiList przypisane do maszyny wirtualnej można pobrać przy użyciu poniższego żądania.

Zażądaj

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
}

Przykład 4. Uzyskiwanie dodatkowych informacji o maszynie wirtualnej podczas zgłoszenia do pomocy technicznej

Jako dostawca usług możesz uzyskać telefon pomocy technicznej, w którym chcesz dowiedzieć się więcej o maszynie wirtualnej. Prośba klienta o udostępnienie metadanych obliczeniowych może dostarczyć podstawowych informacji dla specjalistów pomocy technicznej, aby wiedzieć o rodzaju maszyny wirtualnej na platformie Azure.

Zażądaj

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

Odpowiedź

Uwaga

Odpowiedź jest ciągiem JSON. Następująca przykładowa odpowiedź jest dość drukowana w celu zapewnienia czytelności.

{
    "azEnvironment": "AZUREPUBLICCLOUD",
    "extendedLocation": {
      "type": "edgeZone",
      "name": "microsoftlosangeles"
    },
    "evictionPolicy": "",
    "additionalCapabilities": {
        "hibernationEnabled": "false"
    },
    "hostGroup": {
      "id": "testHostGroupId"
    },
    "isHostCompatibilityLayerVm": "true",
    "licenseType":  "Windows_Client",
    "location": "westus",
    "name": "examplevmname",
    "offer": "WindowsServer",
    "osProfile": {
        "adminUsername": "admin",
        "computerName": "examplevmname",
        "disablePasswordAuthentication": "true"
    },
    "osType": "Windows",
    "placementGroupId": "f67c14ab-e92c-408c-ae2d-da15866ec79a",
    "plan": {
        "name": "planName",
        "product": "planProduct",
        "publisher": "planPublisher"
    },
    "platformFaultDomain": "36",
    "platformUpdateDomain": "42",
    "priority": "Regular",
    "publicKeys": [{
            "keyData": "ssh-rsa 0",
            "path": "/home/user/.ssh/authorized_keys0"
        },
        {
            "keyData": "ssh-rsa 1",
            "path": "/home/user/.ssh/authorized_keys1"
        }
    ],
    "publisher": "RDFE-Test-Microsoft-Windows-Server-Group",
    "physicalZone": "useast-AZ01",
    "resourceGroupName": "macikgo-test-may-23",
    "resourceId": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/virtualMachines/examplevmname",
    "securityProfile": {
        "secureBootEnabled": "true",
        "virtualTpmEnabled": "false",
        "encryptionAtHost": "true",
        "securityType": "TrustedLaunch"
    },
    "sku": "2019-Datacenter",
    "storageProfile": {
        "dataDisks": [{
            "bytesPerSecondThrottle": "979202048",
            "caching": "None",
            "createOption": "Empty",
            "diskCapacityBytes": "274877906944",
            "diskSizeGB": "1024",
            "image": {
              "uri": ""
            },
            "isSharedDisk": "false",
            "isUltraDisk": "true",
            "lun": "0",
            "managedDisk": {
              "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/MicrosoftCompute/disks/exampledatadiskname",
              "storageAccountType": "StandardSSD_LRS"
            },
            "name": "exampledatadiskname",
            "opsPerSecondThrottle": "65280",
            "vhd": {
              "uri": ""
            },
            "writeAcceleratorEnabled": "false"
        }],
        "imageReference": {
            "id": "",
            "offer": "WindowsServer",
            "publisher": "MicrosoftWindowsServer",
            "sku": "2019-Datacenter",
            "version": "latest",
            "communityGalleryImageId": "/CommunityGalleries/testgallery/Images/1804Gen2/Versions/latest",
            "sharedGalleryImageId": "/SharedGalleries/1P/Images/gen2/Versions/latest",
            "exactVersion": "1.1686127202.30113"
        },
        "osDisk": {
            "caching": "ReadWrite",
            "createOption": "FromImage",
            "diskSizeGB": "30",
            "diffDiskSettings": {
                "option": "Local"
            },
            "encryptionSettings": {
              "enabled": "false",
              "diskEncryptionKey": {
                "sourceVault": {
                  "id": "/subscriptions/test-source-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
                },
                "secretUrl": "https://test-disk.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
              },
              "keyEncryptionKey": {
                "sourceVault": {
                  "id": "/subscriptions/test-key-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
                },
                "keyUrl": "https://test-key.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
              }
            },
            "image": {
                "uri": ""
            },
            "managedDisk": {
                "id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampleosdiskname",
                "storageAccountType": "StandardSSD_LRS"
            },
            "name": "exampleosdiskname",
            "osType": "Windows",
            "vhd": {
                "uri": ""
            },
            "writeAcceleratorEnabled": "false"
        },
        "resourceDisk": {
            "size": "4096"
        }
    },
    "subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
    "tags": "baz:bash;foo:bar",
    "version": "15.05.22",
    "virtualMachineScaleSet": {
      "id": "/subscriptions/xxxxxxxx-xxxxx-xxx-xxx-xxxx/resourceGroups/resource-group-name/providers/Microsoft.Compute/virtualMachineScaleSets/virtual-machine-scale-set-name"
    },
    "vmId": "02aab8a4-74ef-476e-8182-f6d2ba4166a6",
    "vmScaleSetName": "crpteste9vflji9",
    "vmSize": "Standard_A3",
    "zone": "3"
}

Przykład 5. Pobieranie środowiska platformy Azure, w którym jest uruchomiona maszyna wirtualna

Platforma Azure ma różne suwerenne chmury, takie jak Azure Government. Czasami potrzebne jest środowisko platformy Azure do podejmowania pewnych decyzji w czasie wykonywania. Poniższy przykład pokazuje, jak można osiągnąć to zachowanie.

Zażądaj

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

W chmurze i wartości środowiska platformy Azure są wymienione tutaj.

Chmura Środowisko platformy Azure
Wszystkie ogólnie dostępne globalne regiony platformy Azure AzurePublicCloud
Azure Government AzureUSGovernmentCloud
Platforma Microsoft Azure obsługiwana przez firmę 21Vianet AzureChinaCloud
Azure (Niemcy) AzureGermanCloud

Przykład 6. Pobieranie informacji o sieci

Zażądaj

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

Przykład 7. Pobieranie publicznego adresu IP

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"

Uwaga

  • Jeśli chcesz pobrać informacje o usłudze IMDS dla publicznego adresu IP jednostki SKU w warstwie Standardowa , zapoznaj się z tematem Load Balancer Metadata API (Interfejs API metadanych modułu równoważenia obciążenia), aby uzyskać więcej informacji.

Dane testowane

Uzyskiwanie danych testowanych

Usługa IMDS pomaga zapewnić gwarancje, że dostarczone dane pochodzą z platformy Azure. Firma Microsoft podpisuje część tych informacji, aby potwierdzić, że obraz w witrynie Azure Marketplace jest tym, który jest uruchomiony na platformie Azure.

GET /metadata/attested/document

Parametry

Nazwisko Wymagane/opcjonalnie opis
api-version Wymagania Wersja używana do obsługi żądania.
nonce Opcjonalnie 10-cyfrowy ciąg, który służy jako kryptograficzny nonce. Jeśli nie podano żadnej wartości, usługa IMDS używa bieżącego znacznika czasu UTC.

Response

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

Podpis obiektu blob jest wersją dokumentu z podpisem pkcs7. Zawiera certyfikat używany do podpisywania wraz z pewnymi szczegółami specyficznymi dla maszyny wirtualnej.

W przypadku maszyn wirtualnych utworzonych przy użyciu usługi Azure Resource Manager dokument zawiera vmIdwartości , sku, nonce, subscriptionIdtimeStamp , do tworzenia i wygaśnięcia dokumentu oraz informacje o planie obrazu. Informacje o planie są wypełniane tylko dla obrazów witryny Azure Marketplace.

W przypadku maszyn wirtualnych utworzonych przy użyciu klasycznego modelu wdrażania należy wypełnić tylko vmId elementy i subscriptionId . Możesz wyodrębnić certyfikat z odpowiedzi i użyć go, aby potwierdzić, że odpowiedź jest prawidłowa i pochodzi z platformy Azure.

Zdekodowany dokument zawiera następujące pola:

Dane opis Wprowadzona wersja
licenseType Typ licencji dla Korzyść użycia hybrydowego platformy Azure. Dotyczy to tylko maszyn wirtualnych z obsługą usługi AHB. 2020-09-01
nonce Ciąg, który można opcjonalnie podać z żądaniem. Jeśli nie nonce podano, używany jest bieżący uniwersalny znacznik czasu koordynowanego. 2018-10-01
plan Plan obrazu witryny Azure Marketplace. Zawiera identyfikator planu (nazwę), obraz produktu lub ofertę (produkt) oraz identyfikator wydawcy (wydawca). 2018-10-01
timestamp.createdOn Sygnatura czasowa UTC dla momentu utworzenia podpisanego dokumentu 2018-20-01
timestamp.expiresOn Znacznik czasu UTC dla daty wygaśnięcia podpisanego dokumentu 2018-10-01
vmId Unikatowy identyfikator maszyny wirtualnej 2018-10-01
subscriptionId Subskrypcja platformy Azure dla maszyny wirtualnej 2019-04-30
sku Określona jednostka SKU dla obrazu maszyny wirtualnej (koreluje z compute/sku właściwością z punktu końcowego metadanych wystąpienia [/metadata/instance]) 2019-11-01

Uwaga

W przypadku klasycznych maszyn wirtualnych (spoza usługi Azure Resource Manager) należy wypełnić tylko identyfikator vmId.

Przykładowy dokument:

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

Wskazówki dotyczące walidacji podpisów

Podczas sprawdzania poprawności podpisu należy potwierdzić, że podpis został utworzony przy użyciu certyfikatu z platformy Azure. Odbywa się to przez zweryfikowanie alternatywnej nazwy podmiotu certyfikatu (SAN).

Przykładowa sieć SAN DNS Name=eastus.metadata.azure.com, DNS Name=metadata.azure.com

Uwaga

Domena chmury publicznej i każdej suwerennej chmury będzie inna.

Chmura Domena w sieci SAN
Wszystkie ogólnie dostępne globalne regiony platformy Azure *.metadata.azure.com
Azure Government *.metadata.azure.us
Platforma Azure obsługiwana przez firmę 21Vianet *.metadata.azure.cn
Azure (Niemcy) *.metadata.microsoftazure.de

Uwaga

Certyfikaty mogą nie mieć dokładnego dopasowania dla domeny. Z tego powodu weryfikacja certyfikacji powinna zaakceptować dowolną poddomenę (na przykład w regionach ogólnej dostępności chmury publicznej akceptują ).*.metadata.azure.com

Nie zalecamy przypinania certyfikatów dla certyfikatów pośrednich. Aby uzyskać więcej wskazówek, zobacz Przypinanie certyfikatu — przypinanie certyfikatu i usługi platformy Azure. Należy pamiętać, że usługa Azure Instance Metadata Service nie będzie oferować powiadomień o przyszłych zmianach urzędu certyfikacji. Zamiast tego należy postępować zgodnie ze scentralizowanym artykułem szczegóły urzędu certyfikacji platformy Azure, aby uzyskać wszystkie przyszłe aktualizacje.

Przykład 1. Sprawdzanie, czy maszyna wirtualna jest uruchomiona na platformie Azure

Dostawcy w witrynie Azure Marketplace chcą upewnić się, że ich oprogramowanie ma licencję na uruchamianie tylko na platformie Azure. Jeśli ktoś kopiuje dysk VHD do środowiska lokalnego, dostawca musi mieć możliwość wykrycia tego. Za pośrednictwem usług IMDS ci dostawcy mogą uzyskać podpisane dane, które gwarantują odpowiedź tylko z platformy Azure.

Uwaga

Ten przykład wymaga zainstalowania narzędzia jq.

Weryfikacja

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

Sprawdź, czy podpis pochodzi z platformy Microsoft Azure i sprawdza łańcuch certyfikatów pod kątem błędów.

# 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

W nonce podpisanym dokumencie można porównać, jeśli w początkowym żądaniu podano nonce parametr.

Tożsamość zarządzana

Tożsamość zarządzana przypisana przez system może być włączona na maszynie wirtualnej. Do maszyny wirtualnej można również przypisać co najmniej jedną tożsamość zarządzaną przypisaną przez użytkownika. Następnie można żądać tokenów dla tożsamości zarządzanych z usługi IMDS. Użyj tych tokenów do uwierzytelniania w innych usługach platformy Azure, takich jak Azure Key Vault.

Aby uzyskać szczegółowe instrukcje włączania tej funkcji, zobacz Uzyskiwanie tokenu dostępu.

Metadane modułu równoważenia obciążenia

W przypadku umieszczania wystąpień maszyny wirtualnej lub zestawu maszyn wirtualnych za usługą Azure usługa Load Balancer w warstwie Standardowa można użyć usługi IMDS do pobierania metadanych związanych z modułem równoważenia obciążenia i wystąpieniami. Aby uzyskać więcej informacji, zobacz Pobieranie informacji o module równoważenia obciążenia.

Zaplanowane zdarzenia

Stan zaplanowanych zdarzeń można uzyskać przy użyciu usługi IMDS. Następnie użytkownik może określić zestaw akcji do uruchomienia na tych zdarzeniach. Aby uzyskać więcej informacji, zobacz Zaplanowane zdarzenia dla systemu Linux lub Zaplanowane zdarzenia dla systemu Windows.

Przykładowy kod w różnych językach

W poniższej tabeli wymieniono przykłady wywoływania usługi IMDS przy użyciu różnych języków wewnątrz maszyny wirtualnej:

Język Przykład
Bash https://github.com/Microsoft/azureimds/blob/master/IMDSSample.sh
C# https://github.com/Microsoft/azureimds/blob/master/IMDSSample.cs
Przejdź 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

Błędy i debugowanie

Jeśli nie znaleziono elementu danych lub źle sformułowane żądanie, usługa Instance Metadata Service zwraca standardowe błędy HTTP. Na przykład:

Kod stanu HTTP Przyczyna
200 OK Żądanie zakończyło się pomyślnie.
400 Bad Request Brak Metadata: true nagłówka lub brakującego parametru format=json podczas wykonywania zapytania o węzeł liścia
404 Not Found Żądany element nie istnieje
405 Method Not Allowed Metoda HTTP (czasownik) nie jest obsługiwana w punkcie końcowym.
410 Gone Ponów próbę po pewnym czasie przez maksymalnie 70 sekund
429 Too Many Requests Przekroczono limity szybkości interfejsu API
500 Service Error Ponów próbę po pewnym czasie

Często zadawane pytania

  • Otrzymuję błąd 400 Bad Request, Required metadata header not specified. Co to oznacza?

    • Usługa IMDS wymaga przekazania nagłówka Metadata: true w żądaniu. Przekazanie tego nagłówka w wywołaniu REST umożliwia dostęp do usług IMDS.
  • Dlaczego nie otrzymuję informacji o obliczeniach dla mojej maszyny wirtualnej?

    • Obecnie usługa IMDS obsługuje tylko wystąpienia utworzone za pomocą usługi Azure Resource Manager.
  • Maszyna wirtualna została utworzona za pośrednictwem usługi Azure Resource Manager jakiś czas temu. Dlaczego nie widzę informacji o metadanych obliczeniowych?

    • Jeśli maszyna wirtualna została utworzona po wrześniu 2016 r., dodaj tag , aby rozpocząć wyświetlanie metadanych obliczeniowych. Jeśli maszyna wirtualna została utworzona przed wrześniem 2016 r., dodaj lub usuń rozszerzenia lub dyski danych do wystąpienia maszyny wirtualnej w celu odświeżenia metadanych.
  • Czy dane użytkownika są takie same jak dane niestandardowe?

    • Dane użytkownika oferują podobne funkcje do danych niestandardowych, co umożliwia przekazywanie własnych metadanych do wystąpienia maszyny wirtualnej. Różnica polega na tym, że dane użytkowników są pobierane za pośrednictwem usługi IMDS i są trwałe przez cały okres istnienia wystąpienia maszyny wirtualnej. Istniejąca funkcja danych niestandardowych będzie nadal działać zgodnie z opisem w tym artykule. Można jednak pobierać dane niestandardowe tylko za pośrednictwem lokalnego folderu systemowego, a nie za pośrednictwem usługi IMDS.
  • Dlaczego nie widzę wszystkich danych wypełnionych dla nowej wersji?

    • Jeśli maszyna wirtualna została utworzona po wrześniu 2016 r., dodaj tag , aby rozpocząć wyświetlanie metadanych obliczeniowych. Jeśli maszyna wirtualna została utworzona przed wrześniem 2016 r., dodaj lub usuń rozszerzenia lub dyski danych do wystąpienia maszyny wirtualnej w celu odświeżenia metadanych.
  • Dlaczego występuje błąd 500 Internal Server Error lub 410 Resource Gone?

    • Ponów żądanie. Aby uzyskać więcej informacji, zobacz Obsługa błędów przejściowych. Jeśli problem będzie się powtarzać, utwórz problem pomocy technicznej w witrynie Azure Portal dla maszyny wirtualnej.
  • Czy będzie to działać w przypadku wystąpień zestawu skalowania?

    • Tak, usługa IMDS jest dostępna dla wystąpień zestawu skalowania.
  • Zaktualizowałem tagi w zestawach skalowania, ale nie są one wyświetlane w wystąpieniach (w przeciwieństwie do maszyn wirtualnych z pojedynczym wystąpieniem). Czy robię coś złego?

    • Obecnie tagi dla zestawów skalowania są wyświetlane tylko dla maszyny wirtualnej podczas ponownego uruchamiania, ponownego tworzenia obrazu lub zmiany dysku na wystąpienie.
  • Dlaczego nie widzę informacji o jednostce SKU dla mojej maszyny wirtualnej w instance/compute szczegółach?

    • W przypadku obrazów niestandardowych utworzonych w witrynie Azure Marketplace platforma Azure nie przechowuje informacji o jednostce SKU dla obrazu niestandardowego i szczegółów dla wszystkich maszyn wirtualnych utworzonych na podstawie obrazu niestandardowego. Jest to projektowane i dlatego nie są uwidośmione w szczegółach maszyny wirtualnej instance/compute .
  • Dlaczego moje żądanie przekroczyło limit czasu (lub nie można nawiązać połączenia) dla połączenia z usługą?

    • Wywołania metadanych muszą być wykonywane z podstawowego adresu IP przypisanego do podstawowej karty sieciowej maszyny wirtualnej. Ponadto w przypadku zmiany tras w lokalnej tabeli routingu maszyny wirtualnej musi istnieć trasa dla adresu 169.254.169.254/32.

      1. Zrzuć lokalną tabelę routingu i poszukaj wpisu IMDS. Na przykład:

        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. Sprawdź, czy istnieje trasa dla 169.254.169.254elementu i zanotuj odpowiedni interfejs sieciowy (na przykład 172.16.69.7).

      3. Zrzuć konfigurację interfejsu i znajdź interfejs, który odpowiada interfejsowi, do którego odwołuje się tabela routingu, zwracając uwagi na adres MAC (fizyczny).

        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. Upewnij się, że interfejs odpowiada podstawowej karcie sieciowej i podstawowemu adresowi IP maszyny wirtualnej. Podstawową kartę sieciową i adres IP można znaleźć, przeglądając konfigurację sieci w witrynie Azure Portal lub przeglądając ją za pomocą interfejsu wiersza polecenia platformy Azure. Zanotuj prywatne adresy IP (i adres MAC, jeśli używasz interfejsu wiersza polecenia). Oto przykład interfejsu wiersza polecenia programu PowerShell:

        $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. Jeśli nie są one zgodne, zaktualizuj tabelę routingu, tak aby podstawowa karta sieciowa i adres IP były docelowe.


  • Klastrowanie trybu failover w systemie Windows Server

    • Podczas wykonywania zapytań dotyczących usługi IMDS z klastrem trybu failover czasami konieczne jest dodanie trasy do tabeli routingu. Oto, jak to zrobić:

      1. Otwórz wiersz polecenia z uprawnieniami administratora.

      2. Uruchom następujące polecenie i zanotuj adres interfejsu dla lokalizacji docelowej sieci (0.0.0.0) w tabeli routingu IPv4.

      route print
      

      Uwaga

      Poniższe przykładowe dane wyjściowe pochodzą z maszyny wirtualnej z systemem Windows Server z włączonym klastrem trybu failover. Dla uproszczenia dane wyjściowe zawierają tylko tabelę routingu IPv4.

      IPv4 Route Table
      ===========================================================================
      Active Routes:
      Network Destination        Netmask          Gateway       Interface  Metric
              0.0.0.0          0.0.0.0         10.0.1.1        10.0.1.10    266
              10.0.1.0  255.255.255.192         On-link         10.0.1.10    266
              10.0.1.10  255.255.255.255         On-link         10.0.1.10    266
              10.0.1.15  255.255.255.255         On-link         10.0.1.10    266
              10.0.1.63  255.255.255.255         On-link         10.0.1.10    266
              127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
              127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
      127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
          169.254.0.0      255.255.0.0         On-link     169.254.1.156    271
          169.254.1.156  255.255.255.255         On-link     169.254.1.156    271
      169.254.255.255  255.255.255.255         On-link     169.254.1.156    271
              224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
              224.0.0.0        240.0.0.0         On-link     169.254.1.156    271
      255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
      255.255.255.255  255.255.255.255         On-link     169.254.1.156    271
      255.255.255.255  255.255.255.255         On-link         10.0.1.10    266
      

      Uruchom następujące polecenie i użyj adresu interfejsu dla lokalizacji docelowej sieci (0.0.0.0), który jest (10.0.1.10) w tym przykładzie.

      route add 169.254.169.254/32 10.0.1.10 metric 1 -p
      

Pomoc techniczna

Jeśli nie możesz uzyskać odpowiedzi na metadane po wielu próbach, możesz utworzyć problem z pomocą techniczną w witrynie Azure Portal.

Opinia o produkcie

Opinie i pomysły dotyczące produktu można przekazać do naszego kanału opinii użytkowników w obszarze Usługa metadanych wystąpienia maszyn > wirtualnych tutaj

Następne kroki