Служба метаданных экземпляров Azure

Применимо к: ✔️ Виртуальные машины Linux ✔️ Виртуальные машины Windows ✔️ Гибкие масштабируемые наборы

Служба метаданных экземпляров Azure (IMDS) содержит сведения о текущем выполнении экземпляров виртуальных машин. Ее можно использовать для управления виртуальными машинами и их настройки. Сюда входят сведения о номере SKU, хранилище, конфигурации сети и ближайших мероприятиях по обслуживанию. Полный список доступных данных см. в разделе Сводка по категориям конечных точек.

IMDS доступен для запуска экземпляров виртуальных машин и экземпляров масштабируемого набора. Все конечные точки поддерживают виртуальные машины, созданные и управляемые с помощью Azure Resource Manager. Только категория "Аттестовано" и часть "Сеть" категории "Экземпляр" поддерживают виртуальные машины, созданные с использованием классической модели развертывания. Аттестованная конечная точка поддерживает их только в ограниченной степени.

Служба IMDS — это REST API, который доступен по известному, не поддерживающему маршрутизацию IP-адресу (169.254.169.254). Доступ к нему можно получить только из виртуальной машины. Обмен данными между виртуальной машиной и службой IMDS никогда не выходит за пределы узла. Сделайте так, чтобы HTTP-клиенты обходили веб-прокси внутри виртуальной машины при запросе к службе IMDS и обрабатывали адрес 169.254.169.254 так же, как и 168.63.129.16.

Использование

Доступ к Службе метаданных экземпляров Azure

Чтобы получить доступ к службе IMDS, создайте виртуальную машину в Azure Resource Manager или на портале Azure согласно примерам ниже. Дополнительные примеры см. на странице примеров Службы метаданных экземпляров Azure.

Ниже приведен пример кода для получения всех метаданных для экземпляра. Сведения о том, как получить доступ к определенному источнику данных, см. в разделе Категории конечных точек, в котором приводится обзор всех доступных функций.

Запросить

Важно!

В этом примере происходит обход прокси-сервера. При запросе к IMDS необходимо обходить прокси-серверы. Дополнительные сведения см. в разделе Прокси-серверы.

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 требует PowerShell V6 или более поздней версии. См. наш репозиторий примеров для получения примеров со старыми версиями PowerShell.

Отклик

Примечание.

Ответ представляет собой строку JSON. Следующие примеры ответов представлены в удобном для чтения формате.

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

Безопасность и проверка подлинности

Служба метаданных экземпляров доступна только в пределах запущенного экземпляра виртуальной машины на IP-адресе, не поддерживающем маршрутизацию. Виртуальные машины могут взаимодействовать только с собственными метаданными и функциями. API-интерфейс работает только по протоколу HTTP и никогда не покидает пределы узла.

Чтобы гарантировать, что запросы напрямую предназначены службе IMDS и предотвратить непреднамеренное или нежелательное перенаправление запросов, запросы должны удовлетворять следующим требованиям:

  • должны содержать заголовок Metadata: true;
  • не должны содержать заголовок X-Forwarded-For.

Любой запрос, который не соответствует обоим этим требованиям, отклоняется службой.

Важно!

Служба IMDS не является подходящим каналом для передачи конфиденциальных данных. В API не используется аутентификация и он открыт для всех процессов в виртуальной машине. Сведения, предоставляемые посредством этой службы, следует рассматривать как общие сведения для всех приложений, запущенных на виртуальной машине.

Если для доступа к конечной точке IMDS не требуется для каждого процесса на виртуальной машине, можно задать правила локального брандмауэра, чтобы ограничить доступ. Например, если только известной системной службе требуется доступ к службе метаданных экземпляра, можно установить правило брандмауэра на конечной точке IMDS, разрешая доступ только определенным процессам или запрещая доступ для остальных процессов.

Прокси

Служба IMDS не предназначена для работы за прокси-сервером, и эта функция не поддерживается. Большинство клиентов HTTP предоставляют возможность отключить прокси-серверы в запросах, и эту функцию следует использовать при взаимодействии с IMDS. Дополнительные сведения см. в документации клиента.

Важно!

Даже если вы не знаете о конфигурации прокси-сервера в вашей среде, все равно необходимо переопределить параметры прокси-сервера клиента по умолчанию. Конфигурация прокси-сервера может назначаться автоматически, и невозможность обойти такие конфигурации подвергает вас риску простоя, если конфигурация машины будет изменена в будущем.

Ограничение частоты

В общем случае число запросов к службе IMDS ограничено 5 запросами в секунду (для каждой виртуальной машины). Запросы, превышающие это пороговое значение, будут отклонены с ответом 429. Запросы к категории управляемых удостоверений ограничены 20 запросами в секунду и 5 одновременными запросами (на каждой виртуальной машине).

HTTP-команды

Поддерживаются следующие HTTP-команды:

Команда Description
GET Получение запрошенного ресурса

Параметры

Конечные точки могут поддерживать обязательные и (или) необязательные параметры. Дополнительные сведения см. в разделе Схема и в документации по конкретной конечной точке.

Параметры запроса

Конечные точки службы IMDS поддерживают параметры строки HTTP-запроса. Например:

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

Задает параметры:

Имя. Значение
api-version 2021-01-01
format json

Запросы с повторяющимися именами параметров запроса будут отклонены.

Параметры маршрута

Для некоторых конечных точек, возвращающих большие двоичные объекты в формате JSON, поддерживается добавление параметров маршрута к конечной точке запроса для фильтрации по подмножеству ответа:

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

Параметры соответствуют индексам или ключам, которые будут использоваться для прохода по объекту JSON при взаимодействии с проанализированным представлением.

Например, /metadata/instance возвращает объект JSON:

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

Если нам нужно отфильтровать ответ только до свойства "compute", мы бы отправили запрос:

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

Аналогично, если нужно отфильтровать вложенное свойство или конкретный элемент массива, мы добавляем ключи:

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

выполняет фильтрацию по первому элементу свойства Network.interface и возвращает:

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

Примечание.

При фильтрации до конечного объекта format=json не работает. Для этих запросов необходимо явно задать format=text, если по умолчанию используется формат JSON.

Схема

Формат данных

По умолчанию служба IMDS возвращает данные в формате JSON (Content-Type: application/json). Однако конечные точки, поддерживающие фильтрацию ответов (см. раздел Параметры маршрута), также поддерживают формат text.

Для доступа к нестандартному формату ответа укажите запрошенный формат в качестве параметра строки запроса. Например:

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

В ответах JSON все примитивы будут иметь тип string, а отсутствующие или неприменимые значения всегда включаются, но для них будет задана пустая строка.

Управление версиями

Служба IMDS имеет различные версии, и указание версии API в HTTP-запросе является обязательным. Единственным исключением из этого требования является конечная точка версии, которую можно использовать для динамического извлечения доступных версий API.

Так как мы добавляем новые версии, вы все еще можете получить доступ к предыдущим версиям для обеспечения совместимости, если используемый скрипт зависит от конкретных форматов данных.

Если вы не укажете версию, вы получите ошибку со списком последних поддерживаемых версий:

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

Примечание.

Версия 2023-07-01 по-прежнему развернута, она может быть недоступна в некоторых регионах.

  • 2023-07-01
  • 13.12.2021
  • 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
  • 01.08.2019
  • 2019-06-04
  • 2019-06-01
  • 2019-04-30
  • 2019-03-11
  • 2019-02-01
  • 2018-10-01
  • 2018-04-02
  • 01.02.2018
  • 2017-12-01
  • 01.10.2017
  • 2017-08-01
  • 2017-04-02
  • 2017-03-01

Swagger

Полное определение Swagger для службы IMDS можно найти по адресу https://github.com/Azure/azure-rest-api-specs/blob/main/specification/imds/data-plane/readme.md.

Доступность по регионам

Служба общедоступна во всех облаках Azure.

Корневая конечная точка

Корневая конечная точка: http://169.254.169.254/metadata.

Категории конечных точек

В API службы IMDS есть несколько категорий конечных точек, представляющих различные источники данных, каждый из которых содержит одну или несколько конечных точек. Дополнительные сведения см. в описании конкретной категории.

Корень категории Description Представленные версии
/metadata/attested См. раздел Аттестованные данные. 2018-10-01
/metadata/identity См. раздел Управляемые удостоверения через IMDS. 01.02.2018
/metadata/instance См. раздел Метаданные экземпляра. 2017-04-02
/metadata/loadbalancer См. раздел Получение метаданных Load Balancer через IMDS. 2020-10-01
/metadata/scheduledevents См. раздел Запланированные события через IMDS. 2017-08-01
/metadata/versions См. раздел Версии. Н/П

Версии

Список версий API

Возвращает набор поддерживаемых версий API.

GET /metadata/versions

Параметры

Нет (эта конечная точка не имеет версий).

Response

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

Метаданные экземпляра

Получение метаданных виртуальной машины

Предоставляет важные метаданные для экземпляра виртуальной машины, включая вычислительные ресурсы, сеть и хранилище.

GET /metadata/instance

Параметры

Имя. Обязательно/Необязательно Description
api-version Обязательное поле Версия, используемая для обработки запроса.
format Необязательно* Формат ответа (json или text). * Примечание. Может потребоваться при использовании параметров запроса.

Эта конечная точка поддерживает фильтрацию ответов с помощью параметров маршрута.

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

Разбивка схемы:

Среда выполнения приложений

Data Description Представленные версии
azEnvironment Среда Azure, где запущена виртуальная машина 2018-10-01
additionalCapabilities.hibernationEnabled Определяет, включена ли гибернация на виртуальной машине. 2021-11-01
customData Эта возможность объявлена нерекомендуемой и отключена в IMDS. Вместо нее предоставляется userData. 2019-02-01
evictionPolicy Указывает, как будет исключена точечная виртуальная машина. 2020-12-01
extendedLocation.type Тип расширенного расположения виртуальной машины. 2021-03-01
extendedLocation.name Имя расширенного расположения виртуальной машины 2021-03-01
host.id Имя узла виртуальной машины. Обратите внимание, что виртуальная машина будет иметь либо узел, либо группу узлов. 2021-11-15
hostGroup.id Имя группы узлов виртуальной машины. Обратите внимание, что виртуальная машина будет иметь либо узел, либо группу узлов. 2021-11-15
isHostCompatibilityLayerVm Определяет, выполняется ли виртуальная машина на уровне совместимости узла. 2020-06-01
licenseType Тип лицензии для Преимущества гибридного использования Azure. Эта функция доступна только для виртуальных машин с поддержкой AHB. 2020-09-01
location Регион Azure, в котором запущена виртуальная машина 2017-04-02
name Имя виртуальной машины. 2017-04-02
offer Предоставление сведений для образа виртуальной машины (эти значения доступны только для образов, развернутых из коллекции образов Azure) 2017-04-02
osProfile.adminUsername Задает имя учетной записи администратора. 2020-07-15
osProfile.computerName Задает имя компьютера. 2020-07-15
osProfile.disablePasswordAuthentication Указывает, отключена ли проверка подлинности паролем. Эта функция доступна только для виртуальных машин Linux. 2020-10-01
osType Windows или Linux 2017-04-02
placementGroupId Группа размещения масштабируемого набора 2017-08-01
plan Планирование , содержащее имя, продукт и издатель для виртуальной машины, если это образ Azure Marketplace 2018-04-02
platformUpdateDomain Домен обновления, на котором запущена виртуальная машина 2017-04-02
platformFaultDomain Домен сбоя, на котором запущена виртуальная машина 2017-04-02
platformSubFaultDomain Вложенный домен сбоя, на котором запущена виртуальная машина (если применимо) 2021-10-01
priority Приоритет виртуальной машины. Дополнительные сведения см. в разделе Точечные виртуальные машины. 2020-12-01
provider Поставщик виртуальной машины 2018-10-01
publicKeys Коллекция открытых ключей, назначенная виртуальной машине и путям 2018-04-02
publisher Издатель образа виртуальной машины 2017-04-02
resourceGroupName Группа ресурсов для виртуальной машины 2017-08-01
resourceId Полный идентификатор ресурса 2019-03-11
sku Определенный номер SKU для образа виртуальной машины 2017-04-02
securityProfile.secureBootEnabled Определяет, включена ли безопасная загрузка UEFI на виртуальной машине. 2020-06-01
securityProfile.virtualTpmEnabled Определяет, включен ли на виртуальной машине виртуальный доверенный платформенный модуль (TPM). 2020-06-01
securityProfile.encryptionAtHost Определяет, включен ли параметр Шифрование на узле на виртуальной машине. 2021-11-01
securityProfile.securityType Определяет, является ли виртуальная машина доверенной или конфиденциальной. 13.12.2021
storageProfile См. раздел "Профиль хранилища" ниже 2019-06-01
subscriptionId Подписка Azure для виртуальной машины 2017-08-01
tags Теги для виртуальной машины 2017-08-01
tagsList Теги форматируются в виде массива JSON для упрощения программного анализа 2019-06-04
userData Набор данных, указанный при создании виртуальной машины для использования во время или после подготовки (в кодировке Base64) 2021-01-01
version Версия образа виртуальной машины 2017-04-02
virtualMachineScaleSet.id Идентификатор масштабируемого набора виртуальных машин, созданного с гибкой оркестрацией, в которой находится виртуальная машина. Это поле недоступно для Масштабируемые наборы виртуальных машин, созданного с помощью единой оркестрации. 2021-03-01
vmId Уникальный идентификатор для виртуальной машины. Инструкции в упомянутом блоге подходят только для виртуальных машин с SMBIOS < 2.6. Для виртуальных машин, имеющих S МБ IOS >= 2.6, идентификатор UUID из DMI отображается в маленьком формате, поэтому нет необходимости переключать байты. 2017-04-02
vmScaleSetName Имя масштабируемого набора виртуальных машин для масштабируемого набора 2017-12-01
vmSize Размер виртуальной машины 2017-04-02
zone Зона доступности виртуальной машины 2017-12-01

† эта версия еще не доступна полностью и может не поддерживаться во всех регионах.

профиль служба хранилища

Профиль хранения для виртуальной машины разделяется на три категории: ссылка на образ, диск операционной системы и диски данных, а также дополнительный объект для локального временного диска.

Эталонный объект изображения содержит следующие сведения об образе ОС, обратите внимание, что изображение может поступать из платформы, Marketplace, коллекции сообщества или прямой общей коллекции, но не из обоих:

Data Description Представленные версии
id ИД ресурса 2019-06-01
offer Предоставление образа платформы или Marketplace 2019-06-01
publisher Издатель образа платформы или Marketplace 2019-06-01
sku Sku для платформы или образа Marketplace 2019-06-01
version Версия образа 2019-06-01
communityGalleryImageId Идентификатор ресурса образа сообщества, пустой в противном случае 2023-07-01
sharedGalleryImageId Идентификатор ресурса o прямой общий образ, пустой в противном случае 2023-07-01
exactVersion Версия сообщества или прямого общего образа 2023-07-01

Объект диска ОС содержит следующие сведения о диске ОС, который используется виртуальной машиной.

Data Description
caching Требования к кэшированию
createOption Сведения о способе создания виртуальной машины
diffDiskSettings Параметры временного диска
diskSizeGB Размер диска в ГБ
image Виртуальный жесткий диск исходного образа пользователя
managedDisk Параметры управляемого диска
name Имя диска
vhd Виртуальный жесткий диск
writeAcceleratorEnabled Включен ли параметр writeAccelerator на диске

Массив дисков данных содержит список дисков данных, подключенных к виртуальной машине. Каждый объект диска данных содержит следующие сведения.

Data Description Представленные версии
bytesPerSecondThrottle* Квота чтения/записи на диск в байтах 2021-05-01
caching Требования к кэшированию 2019-06-01
createOption Сведения о способе создания виртуальной машины 2019-06-01
diffDiskSettings Параметры временного диска 2019-06-01
diskCapacityBytes* Размер диска в байтах 2021-05-01
diskSizeGB Размер диска в ГБ 2019-06-01
encryptionSettings Параметры шифрования для диска 2019-06-01
image Виртуальный жесткий диск исходного образа пользователя 2019-06-01
isSharedDisk* Определяет, является ли диск общим для ресурсов 2021-05-01
isUltraDisk Определяет, является ли диск данных Ultra Disk 2021-05-01
lun Номер логического устройства диска (LUN) 2019-06-01
managedDisk Параметры управляемого диска 2019-06-01
name Имя диска 2019-06-01
opsPerSecondThrottle* Квота чтения/записи на диск в операциях ввода-вывода в секунду 2021-05-01
osType Тип ОС, добавленной на диск 2019-06-01
vhd Виртуальный жесткий диск 2019-06-01
writeAcceleratorEnabled Включен ли параметр writeAccelerator на диске 2019-06-01

*Эти поля заполняются только для дисков категории "Ультра"; Они являются пустыми строками из дисков, не относящихся к категории "Ультра".

Большой двоичный объект параметров шифрования содержит данные о том, как шифруется диск (если он зашифрован):

Data Description Представленные версии
diskEncryptionKey.sourceVault.id Расположение ключа шифрования диска. 2021-11-01
diskEncryptionKey.secretUrl Расположение секрета. 2021-11-01
keyEncryptionKey.sourceVault.id Расположение ключа шифрования ключа. 2021-11-01
keyEncryptionKey.keyUrl Расположение ключа. 2021-11-01

Объект диска ресурсов содержит размер подключенного к виртуальной машине (если есть) локального временного диска в килобайтах. Если локальный временный диск для виртуальной машины отсутствует, это значение равно 0.

Data Description Представленные версии
resourceDisk.size Размер локального временного диска для виртуальной машины (в килобайтах) 2021-02-01

Сеть

Data Description Представленные версии
ipv4.privateIpAddress Локальный IPv4-адрес виртуальной машины 2017-04-02
ipv4.publicIpAddress Общедоступный IPv4-адрес виртуальной машины 2017-04-02
subnet.address Адрес подсети виртуальной машины 2017-04-02
subnet.prefix Префикс подсети, пример 24 2017-04-02
ipv6.ipAddress Локальный IPv6-адрес виртуальной машины 2017-04-02
macAddress Mac-адрес виртуальной машины 2017-04-02

Примечание.

Сетевые адаптеры, возвращаемые сетевым вызовом, не обязательно должны быть в установленном порядке.

Получение данных пользователя

При создании новой виртуальной машины можно указать набор данных, который будет использоваться во время подготовки виртуальной машины или после нее, а также получить его через IMDS. Ознакомьтесь с подробными сведениями о взаимодействии с данными пользователей здесь.

Чтобы настроить пользовательские данные, примените этот шаблон быстрого запуска. В примере ниже показано, как получить эти данные с помощью IMDS. Эта функция реализована в версии 2021-01-01 и выше.

Примечание.

Уведомление о безопасности: служба IMDS открыта для всех приложений на виртуальной машине, поэтому конфиденциальные данные не следует размещать в данных пользователя.

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

Пример 1. Отслеживание виртуальной машины, работающей в Azure

Поставщику услуг может потребоваться отслеживать количество виртуальных машин, использующих ваше программное обеспечение, или установить агенты, отслеживающие уникальность виртуальной машины. Чтобы получить уникальный идентификатор для виртуальной машины, используйте поле vmId службы метаданных экземпляров.

Запросить

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

Пример 2. Размещение различных реплик данных

В некоторых сценариях размещение разных реплик имеет первостепенное значение. Например, для размещения реплики HDFS или размещения контейнера с помощью оркестратора необходимо знать домен сбоя platformFaultDomain и домен обновления platformUpdateDomain, на которых запущена виртуальная машина. Кроме того, для принятия этих решений можно применить Зоны доступности для экземпляров. Эти данные можно запросить напрямую в службе IMDS.

Запросить

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

Пример 3. Получение тегов виртуальной машины

Теги виртуальных машин включены в API экземпляра в конечной точке экземпляра, вычислений или тегов. К виртуальной машине Azure можно применить теги, чтобы логически организовать их в таксономию. Теги, назначенные виртуальной машине, можно получить с помощью запроса ниже.

Запросить

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

Поле tags представляет собой строку с тегами, разделенными точкой с запятой. Такой вывод может быть проблемой, если в самих тегах уже используются точки с запятой. Если для программного извлечения тегов написан синтаксический анализатор, следует полагаться на поле tagsList. Поле tagsList является массивом JSON без разделителей и, следовательно, проще в синтаксическом анализе. Поле tagsList, назначенное виртуальной машине, можно получить с помощью запроса ниже.

Запросить

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
}

Пример 4. Получение дополнительных сведений о виртуальной машине при обращении в службу поддержки

Чтобы получить дополнительные сведения о виртуальной машине, поставщик услуг может позвонить в службу поддержки. Если клиент предоставит сведения о метаданных вычислений, специалист службы поддержки получит основные сведения о виртуальной машине в Azure.

Запросить

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

Отклик

Примечание.

Ответ представляет собой строку JSON. Следующие примеры ответов представлены в удобном для чтения формате.

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

Пример 5. Получение сведений о среде Azure, в которой запущена виртуальная машина

Azure имеет различные национальные облака, например Azure для государственных организаций. Иногда требуется, чтобы решения касательно среды выполнения принимала среда Azure. В следующем примере показано, как добиться такого поведения.

Запросить

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

Облако и значения среды Azure приведены ниже.

Облако Среда Azure
Все общедоступные глобальные регионы Azure AzurePublicCloud
Azure для государственных организаций AzureUSGovernmentCloud
Microsoft Azure, управляемый 21Vianet AzureChinaCloud
Azure для Германии AzureGermanCloud

Пример 6. Получение сведений о сети

Запросить

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

Пример 7. Получение общедоступного 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"

Примечание.

  • Если вы хотите получить сведения об IMDS для общедоступного IP-адреса SKU уровня "Стандартный ", ознакомьтесь с API метаданных Load Balancer для получения дополнительных сведений.

Аттестованные данные

Получение аттестованных данных

Служба IMDS помогает гарантировать, что предоставленные данные поступают из Azure. Корпорация Майкрософт подписывает часть этой информации, поэтому вы можете подтвердить, что образ в Azure Marketplace — это тот, который вы работаете в Azure.

GET /metadata/attested/document

Параметры

Имя. Обязательно/Необязательно Description
api-version Обязательное поле Версия, используемая для обработки запроса.
nonce Необязательно Строка из 10 цифр, которая служит в качестве криптографического ключа nonce. Если значение не указано, служба IMDS использует текущую метку времени в формате UTC.

Response

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

Большой двоичный объект подписи является версией документа с подписью pkcs7. Он содержит сертификат, используемый для подписывания, а также некоторые сведения, относящиеся к виртуальной машине.

Для виртуальных машин, созданных с помощью Azure Resource Manager, документ включает vmId, sku, nonce, subscriptionId, timeStamp для создания и окончания срока действия документа, а также сведения о плане образа. Сведения о плане заполняются только для образов из Azure Marketplace.

Для виртуальных машин, созданных с помощью классической модели развертывания, гарантируется заполнение только vmId и subscriptionId. Можно извлечь сертификат из ответа и проверить с его помощью, является ли ответ допустимым и поступает ли он из Azure.

Декодированный документ содержит следующие поля.

Data Description Представленные версии
licenseType Тип лицензии для Преимущества гибридного использования Azure. Эта функция доступна только для виртуальных машин с поддержкой AHB. 2020-09-01
nonce Строка, которую можно дополнительно предоставить вместе с запросом. Если было передано nonce, используется текущая метка времени в формате UTC. 2018-10-01
plan План образа Azure Marketplace. Содержит идентификатор плана (имя), образ продукта или предложение (продукт), а также идентификатор издателя (издатель). 2018-10-01
timestamp.createdOn Метка времени в формате UTC, обозначающая время создания подписанного документа. 2018-20-01
timestamp.expiresOn Метка времени в формате UTC, обозначающая время окончания срока действия документа. 2018-10-01
vmId Уникальный идентификатор для виртуальной машины 2018-10-01
subscriptionId Подписка Azure для виртуальной машины 2019-04-30
sku Конкретный номер SKU для образа виртуальной машины (сопоставляется со свойством compute/sku из конечной точки метаданных экземпляра [/metadata/instance]) 2019-11-01

Примечание.

Для классических (не Azure Resource Manager) виртуальных машин гарантируется заполнение только vmId.

Пример документа:

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

Руководство по проверке подписи

При проверке подписи необходимо убедиться, что подпись была создана с помощью сертификата из Azure. Это делается путем проверки альтернативного имени субъекта сертификата (SAN).

Пример SAN DNS Name=eastus.metadata.azure.com, DNS Name=metadata.azure.com

Примечание.

Домен для общедоступного облака и каждого суверенного облака будет отличаться.

Облако Домен в SAN
Все общедоступные глобальные регионы Azure *.metadata.azure.com
Azure для государственных организаций *.metadata.azure.us
Azure, управляемый 21Vianet *.metadata.azure.cn
Azure для Германии *.metadata.microsoftazure.de

Примечание.

Сертификаты могут не совпадать с доменом. По этой причине проверка сертификации должна принимать любой поддомен (например, в регионах *.metadata.azure.comобщедоступной доступности общедоступного облака).

Мы не рекомендуем закреплять сертификаты для промежуточных сертификатов. Дополнительные рекомендации см. в разделе "Закрепление сертификатов" — закрепление сертификатов и служб Azure. Обратите внимание, что служба метаданных экземпляра Azure не будет предлагать уведомления о будущих изменениях центра сертификации. Вместо этого необходимо следовать статье центра сертификации Azure для всех будущих обновлений.

Пример 1 Проверка того, что виртуальная машина запущена в Azure

Поставщикам в Azure Marketplace часто нужно гарантировать, что их программное обеспечение лицензируется только для запуска из Azure. Если кто-то копирует виртуальный жесткий диск в локальную среду, поставщик должен иметь возможность обнаружить это. С помощью службы IMDS эти поставщики могут получать подписанные данные, гарантирующие ответ только из Azure.

Примечание.

Для работы с этим примером требуется установка служебной программы jq.

Проверка

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

Убедитесь, что подпись выполняется из Microsoft Azure и проверка цепочку сертификатов для ошибок.

# 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

Элемент nonce в подписанном документе можно сравнить, если в первоначальном запросе был указан параметр nonce.

Управляемое удостоверение

Управляемое удостоверение, назначенное системой, можно включить на виртуальной машине. Можно также назначить виртуальной машине одно или несколько управляемых удостоверений, назначенных пользователем. Затем можно запросить токены для управляемых удостоверений из службы IMDS. Используйте эти токены для проверки подлинности в других службах Azure, например в Azure Key Vault.

Подробные инструкции по включению этой функции см. в разделе Получение маркера доступа.

Метаданные Load Balancer

При установке экземпляров виртуальных машин или наборов виртуальных машин за Azure Load Balancer (цен. категория "Стандартный") используйте службу IMDS для получения метаданных, связанных с подсистемой балансировки нагрузки и экземплярами. Дополнительные сведения см. в статье Получение сведений о подсистеме балансировки нагрузки.

Запланированные события

С помощью службы IMDS можно получить состояние запланированных событий. Затем пользователь может указать набор действий, выполняемых при этих событиях. Дополнительные сведения см. в статьях Запланированные события для Linux и Запланированные события для Windows.

Примеры кодов на разных языках

В следующей таблице приведены примеры вызова IMDS с использованием разных языков в виртуальной машине.

Язык Пример
Bash https://github.com/Microsoft/azureimds/blob/master/IMDSSample.sh
C# https://github.com/Microsoft/azureimds/blob/master/IMDSSample.cs
Go https://github.com/Microsoft/azureimds/blob/master/imdssample.go
Java https://github.com/Microsoft/azureimds/blob/master/imdssample.java
NodeJS https://github.com/Microsoft/azureimds/blob/master/IMDSSample.js
Perl https://github.com/Microsoft/azureimds/blob/master/IMDSSample.pl
PowerShell https://github.com/Microsoft/azureimds/blob/master/IMDSSample.ps1
Puppet https://github.com/keirans/azuremetadata
Python https://github.com/Microsoft/azureimds/blob/master/IMDSSample.py
Ruby https://github.com/Microsoft/azureimds/blob/master/IMDSSample.rb

Ошибки и отладка

Если элемент данных не найден или неправильный запрос, служба метаданных экземпляра возвращает стандартные ошибки HTTP. Например:

Код состояния HTTP Причина
200 OK Запрос выполнен успешно.
400 Bad Request Отсутствует заголовок Metadata: true или параметр format=json при запросе конечного объекта.
404 Not Found Запрашиваемый элемент не существует
405 Method Not Allowed Метод HTTP (verb) не поддерживается в конечной точке.
410 Gone Подождите немного и повторите попытку в течение 70 секунд
429 Too Many Requests Превышен предел частоты для API.
500 Service Error Повторите попытку через некоторое время

Часто задаваемые вопросы

  • Я получаю ошибку 400 Bad Request, Required metadata header not specified. Что это значит?

    • Для работы службы IMDS заголовок Metadata: true необходимо передать в запрос. Передача заголовка в вызов REST позволяет получить доступ к службе IMDS.
  • Почему я не получаю сведения о вычислительных ресурсах для моей виртуальной машины?

    • Сейчас служба IMDS поддерживает только экземпляры, созданные с помощью Azure Resource Manager.
  • Некоторое время назад я создал виртуальную машину с помощью Azure Resource Manager. Почему не отображаются сведения о метаданных вычислений?

    • Если вы создали виртуальную машину после сентября 2016 года, добавьте тег, чтобы видеть метаданные вычислений. Если вы создали виртуальную машину до сентября 2016 года, добавьте или удалите расширения или диски данных для экземпляра виртуальной машины, чтобы обновить метаданные.
  • Совпадают ли пользовательские данные с пользовательскими данными?

    • Данные пользователя предлагают функциональные возможности, аналогичные пользовательским данным, позволяя передавать ваши метаданные в экземпляр виртуальной машины. Разница заключается в том, что данные пользователя извлекаются через IMDS и хранятся в течение времени существования экземпляра виртуальной машины. Существующая возможность пользовательских данных будет поддерживаться и дальше, как описано в этой статье. Пользовательские данные можно получить только через локальную системную папку, но не через IMDS.
  • Почему я не вижу все данные, заполненные для новой версии?

    • Если вы создали виртуальную машину после сентября 2016 года, добавьте тег, чтобы видеть метаданные вычислений. Если вы создали виртуальную машину до сентября 2016 года, добавьте или удалите расширения или диски данных для экземпляра виртуальной машины, чтобы обновить метаданные.
  • Почему я получаю ошибку 500 Internal Server Error или 410 Resource Gone?

    • Повторите ваш запрос. Дополнительные сведения см. в статье Обработка временных сбоев. Если проблема сохраняется, создайте запрос в службу поддержки на портале Azure для виртуальной машины.
  • Будет ли это работать для экземпляров масштабируемого набора?

    • Да, IMDS доступен для экземпляров масштабируемого набора.
  • Я обновил теги в масштабируемых наборах, но они не отображаются в экземплярах (в отличие от виртуальных машин одного экземпляра). Я делаю что-то не так?

    • В настоящее время теги для масштабируемых наборов отображаются только виртуальной машине при перезагрузке, повторном создании или изменении диска на экземпляр.
  • Почему я не вижу сведения об номере SKU для моей виртуальной машины в instance/compute деталях?

    • Для пользовательских образов, созданных из Azure Marketplace, платформа Azure не хранит сведения о номере SKU для пользовательского образа, а также сведения для всех виртуальных машин, созданных из пользовательского образа. Это сделано намеренно, и поэтому эти сведения не содержатся в разделе instance/compute для виртуальной машины.
  • Почему истекло время ожидания запроса (или не удалось подключиться) для вызова службы?

    • Вызов метаданных должен выполняться с основного IP-адреса, назначенного основной сетевой карте виртуальной машины. Кроме того, если вы изменяли маршруты, то в локальной таблице маршрутизации виртуальной машины должен быть маршрут для адреса 169.254.169.254/32.

      1. Выведите дамп локальной таблицы маршрутизации и найдите запись для IMDS. Например:

        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. Убедитесь, что существует маршрут для 169.254.169.254, и обратите внимание на соответствующий сетевой интерфейс (например, 172.16.69.7).

      3. Выведите дамп конфигурации интерфейса и найдите интерфейс, соответствующий тому, на который ссылается таблица маршрутизации, и запишите его MAC-адрес (физический адрес).

        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. Убедитесь, что этот интерфейс соответствует основному сетевому адаптеру виртуальной машины и основному IP-адресу. Основной сетевой адаптер и IP-адрес можно найти, просмотрев конфигурацию сети на портале Azure или выполнив поиск в Azure CLI. Обратите внимание на частные IP-адреса (и на MAC-адрес, если вы используете интерфейс командной строки). Ниже приведен пример сценария командной строки 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. Если они не совпадают, измените таблицу маршрутизации, чтобы указывать на основную сетевую карту и IP-адрес.


  • Отработка отказа кластеризация в Windows Server

    • При запросе в службу IMDS при использовании отказоустойчивой кластеризации иногда необходимо добавить маршрут в таблицу маршрутизации. Это делается следующим образом:

      1. Откройте окно командной строки с правами администратора.

      2. Выполните следующую команду и запишите адрес интерфейса для сети назначения (0.0.0.0) в таблице маршрутизации IPv4.

      route print
      

      Примечание.

      Ниже приведен пример выходных данных виртуальной машины Windows Server с включенным отказоустойчивым кластером. Для простоты приведены только данные с таблицей маршрутов 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
      

      Выполните следующую команду и используйте адрес интерфейса для сети назначения (0.0.0.0), то есть 10.0.1.10 в этом примере.

      route add 169.254.169.254/32 10.0.1.10 metric 1 -p
      

Поддержка

Если вы не сможете получить ответ метаданных после нескольких попыток, можно создать проблему поддержки в портал Azure.

Отзывы о продукте

Вы можете оставить отзыв о продукте и поделиться своими идеями на нашем канале отзывов пользователей в разделе "Виртуальные машины" > "Служба метаданных экземпляров" здесь.

Следующие шаги