Служба метаданных экземпляров 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 необходимо обходить прокси-серверы. Дополнительные сведения см. в разделе Прокси-серверы.
Примечание.
Запросы IMDS должны отправляться с помощью основного сетевого адаптера виртуальной машины и основного IP-адреса, а DHCP необходимо включить.
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-11-15 по-прежнему развернута, она может быть недоступна в некоторых регионах.
- 2023-11-15
- 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 |
physicalZone |
Физическая зона виртуальной машины | 2023-11-15 |
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. Для виртуальных машин с SMBIOS >= 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",
"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"
}
Пример 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 с использованием разных языков в виртуальной машине.
Ошибки и отладка
Если элемент данных не найден или неправильный запрос, служба метаданных экземпляра возвращает стандартные ошибки 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 заголовок
Почему я не получаю сведения о вычислительных ресурсах для моей виртуальной машины?
- Сейчас служба 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
для виртуальной машины.
- Для пользовательских образов, созданных из Azure Marketplace, платформа Azure не хранит сведения о номере SKU для пользовательского образа, а также сведения для всех виртуальных машин, созданных из пользовательского образа. Это сделано намеренно, и поэтому эти сведения не содержатся в разделе
Почему истекло время ожидания запроса (или не удалось подключиться) для вызова службы?
Вызов метаданных должен выполняться с основного IP-адреса, назначенного основной сетевой карте виртуальной машины. Кроме того, если вы изменяли маршруты, то в локальной таблице маршрутизации виртуальной машины должен быть маршрут для адреса 169.254.169.254/32.
Выведите дамп локальной таблицы маршрутизации и найдите запись для 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) ...
Убедитесь, что существует маршрут для
169.254.169.254
, и обратите внимание на соответствующий сетевой интерфейс (например,172.16.69.7
).Выведите дамп конфигурации интерфейса и найдите интерфейс, соответствующий тому, на который ссылается таблица маршрутизации, и запишите его 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) ...
Убедитесь, что этот интерфейс соответствует основному сетевому адаптеру виртуальной машины и основному 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
Если они не совпадают, измените таблицу маршрутизации, чтобы указывать на основную сетевую карту и IP-адрес.
Отработка отказа кластеризации в Windows Server
При запросе в службу IMDS при использовании отказоустойчивой кластеризации иногда необходимо добавить маршрут в таблицу маршрутизации. Это делается следующим образом:
Откройте окно командной строки с правами администратора.
Выполните следующую команду и запишите адрес интерфейса для сети назначения (
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.
Отзывы о продукте
Вы можете оставить отзыв о продукте и поделиться своими идеями на нашем канале отзывов пользователей в разделе "Виртуальные машины" > "Служба метаданных экземпляров" здесь.