Azure 執行個體中繼資料服務

適用於:✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集

Azure Instance Metadata Service (IMDS) 提供目前執行中虛擬機器執行個體的相關資訊。 您可以使用其來管理及設定虛擬機器。 此資訊包括 SKU、儲存體、網路組態及近期維護事件。 如需可用資料的完整清單,請參閱端點類別摘要

IMDS 可用於執行虛擬機器實例, (VM) 和擴展集實例。 所有端點都支援使用 Azure Resource Manager 建立和管理的 VM。 只有執行個體類別的證明類別和網路部分支援使用傳統部署模型所建立的 VM。 證明的端點只會在有限的範圍內執行。

IMDS 是位於已知非路由式 IP 位址 (169.254.169.254) 上的 REST API。 您只能從 VM 存取。 VM 與 IMDS 之間的通訊永遠不會離開主機。 在查詢 IMDS 時,讓 HTTP 用戶端略過 VM 內的 Web Proxy,並且將 169.254.169.254 視為與 168.63.129.16 一樣。

使用方式

存取 Azure Instance Metadata Service

若要存取 IMDS,請從 Azure Resource ManagerAzure 入口網站建立 VM,然後使用下列範例。 如需更多範例,請參閱 Azure Instance Metadata Samples

以下是擷取執行個體所有中繼資料的範例程式碼。 若要存取特定資料來源,請參閱端點類別,以取得所有可用功能的概觀。

要求

重要

此範例會略過 Proxy。 查詢 IMDS 時,您必須略過 Proxy。 如需其他資訊,請參閱 Proxy

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

安全性和驗證

Instance Metadata Service 只能從非可路由 IP 位址上的執行中虛擬機器執行個體內存取。 VM 只能與其本身的中繼資料/功能互動。 API 僅限 HTTP,永遠不會離開主機。

為了確保要求直接用於 IMDS,並防止非預期或不必要的要求重新導向,要求:

  • 必須包含標頭 Metadata: true
  • 不得包含 X-Forwarded-For 標頭

服務會拒絕不符合 這兩 個需求的任何要求。

重要

IMDS 是敏感性資料的通道。 API 未經驗證,對 VM 上的所有程序都開放。 透過此服務公開的資訊,應視為 VM 內所有執行中應用程式的共用資訊。

如果 VM 上每個進程都不需要存取 IMDS 端點,您可以設定本機防火牆規則來限制存取。 例如,如果只有已知的系統服務需要存取執行個體中繼資料服務,您可以在 IMDS 端點上設定防火牆規則,只允許特定程序存取,或拒絕其餘程序存取。

Proxy

IMDS 適合用於 Proxy 之後,因此不受支援。 大部分 HTTP 用戶端都提供一個選項,讓您在要求上停用 Proxy,而且與 IMDS 通訊時必須利用這項功能。 如需詳細資訊,請參閱您的用戶端文件。

重要

即使您不知道環境中的任何 Proxy 組態,您仍然必須覆寫任何預設用戶端 Proxy 設定。 您可以自動探索 Proxy 組態,而且無法略過這類組態會讓您在未來變更電腦的組態時發生中斷風險。

速率限制

一般而言,對 IMDS 的要求限制為每秒五個要求 (以每部 VM 為基礎)。 超過此閾值的要求會遭到拒絕,並出現 429 回應。 受控識別類別的要求限制為每秒 20 個要求,而每個 VM (5 個並行要求) 。

HTTP 動詞

目前支援以下 HTTP 指令動詞:

動詞命令 描述
GET 擷取要求的資源

參數

端點可能支援必要和/或選擇性參數。 如需詳細資訊,請參閱結構描述和有問題特定端點的文件。

查詢參數

IMDS 端點支援 HTTP 查詢字串參數。 例如:

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

指定參數:

Name
api-version 2021-01-01
format json

具有重複查詢參數名稱的要求將會遭到拒絕。

路由參數

對於傳回較大 json Blob 的某些端點,我們支援將路由參數附加至要求端點,以篩選為回應的子集:

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

如果我們想要將回應篩選為只有計算屬性,我們會傳送要求:

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 已版本化,因此在 HTTP 要求中指定 API 版本是強制的。 這項需求的唯一例外是版本端點,可用來動態擷取可用的 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 版本

  • 2021-12-13
  • 2021-11-15
  • 2021-11-01
  • 2021-10-01
  • 2021-08-01
  • 2021-05-01
  • 2021-03-01
  • 2021-02-01
  • 2021-01-01
  • 2020-12-01
  • 2020-10-01
  • 2020-09-01
  • 2020-07-15
  • 2020-06-01
  • 2019-11-01
  • 2019-08-15
  • 2019-08-01
  • 2019-06-04
  • 2019-06-01
  • 2019-04-30
  • 2019-03-11
  • 2019-02-01
  • 2018-10-01
  • 2018-04-02
  • 2018-02-01
  • 2017-12-01
  • 2017-10-01
  • 2017-08-01
  • 2017-04-02
  • 2017-03-01

Swagger

IMDS 的完整 Swagger 定義位於:https://github.com/Azure/azure-rest-api-specs/blob/main/specification/imds/data-plane/readme.md

區域可用性

此服務已在所有 Azure 雲端中 正式推出

根端點

根端點為 http://169.254.169.254/metadata

端點類別

IMDS API 包含代表不同資料來源的多個端點類別,每個類別都包含一或多個端點。 查看每個類別以取得詳細資料。

類別根目錄 描述 導入的版本
/metadata/attested 請參閱證明資料 2018-10-01
/metadata/identity 請參閱透過 IMDS 的受控識別 2018-02-01
/metadata/instance 請參閱執行個體中繼資料 2017-04-02
/metadata/loadbalancer 請參閱透過 IMDS 擷取 Load Balancer 中繼資料 2020-10-01
/metadata/scheduledevents 請參閱透過 IMDS 的已排定事件 2017-08-01
/metadata/versions 請參閱版本 N/A

版本

注意

這項功能已隨 2020-10-01 版一起發行,目前已推出,可能還無法在每個區域中使用。

列出 API 版本

傳回支援的 API 版本集合。

GET /metadata/versions

參數

無 (此端點未建立版本)。

回應

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

執行個體中繼資料

取得 VM 中繼資料

公開 VM 執行個體的重要中繼資料,包括計算、網路和儲存體。

GET /metadata/instance

參數

Name 必要/選用 描述
api-version 必要 用來服務要求的版本。
format 選擇性* 回應的格式 (jsontext)。 *注意:使用要求參數時可能需要

此端點支援透過路由參數進行回應篩選。

回應

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

結構描述明細:

計算

資料 描述 導入的版本
azEnvironment VM 執行所在的 Azure 環境 2018-10-01
additionalCapabilities.hibernationEnabled 識別 VM 上是否已啟用休眠 2021-11-01
customData 這項功能在 IMDS 中已淘汰並停用。 已由 userData 取代 2019-02-01
evictionPolicy 設定現成 VM 的收回方式。 2020-12-01
extendedLocation.type VM 擴充位置的類型。 2021-03-01
extendedLocation.name VM 擴充位置的名稱 2021-03-01
host.id VM 主機的名稱。 請注意,VM 將會有主機或 hostGroup,但不會同時擁有這兩者。 2021-11-15
hostGroup.id VM 的 hostGroup 名稱。 請注意,VM 將會有主機或 hostGroup,但不會同時擁有這兩者。 2021-11-15
isHostCompatibilityLayerVm 識別 VM 是否在主機相容性層級上執行 2020-06-01
licenseType Azure Hybrid Benefit 的授權類型。 這僅適用於已啟用 AHB 的 VM 2020-09-01
location VM 執行所在的 Azure 區域 2017-04-02
name VM 的名稱 2017-04-02
offer 提供 VM 映像的資訊,而且只針對從 Azure 映像資源庫部署的映像呈現 2017-04-02
osProfile.adminUsername 指定系統管理員帳戶的名稱 2020-07-15
osProfile.computerName 指定電腦的名稱 2020-07-15
osProfile.disablePasswordAuthentication 指定密碼驗證是否停用。 這僅適用於 Linux VM 2020-10-01
osType Linux 或 Windows 2017-04-02
placementGroupId 擴展集的放置群組 2017-08-01
plan 如果 VM 是Azure Marketplace映射,請規劃包含 VM 的名稱、產品和發行者 2018-04-02
platformUpdateDomain VM 執行所在的更新網域 2017-04-02
platformFaultDomain VM 執行所在的容錯網域 2017-04-02
platformSubFaultDomain VM 執行所在的子容錯網域 (如果適用)。 2021-10-01
priority VM 的優先順序。 如需詳細資訊,請參閱現成 VM 2020-12-01
provider VM 的提供者 2018-10-01
publicKeys 指派給 VM 和路徑的公開金鑰集合 2018-04-02
publisher VM 映像的發佈者 2017-04-02
resourceGroupName 虛擬機器的資源群組 2017-08-01
resourceId 資源的完整 ID 2019-03-11
sku VM 映像的特定 SKU 2017-04-02
securityProfile.secureBootEnabled 識別 VM 上是否已啟用 UEFI 安全開機 2020-06-01
securityProfile.virtualTpmEnabled 識別 VM 上是否已啟用虛擬信賴平台模組 (TPM) 2020-06-01
securityProfile.encryptionAtHost 識別 VM 上是否已啟用主機上的加密 2021-11-01
securityProfile.securityType 識別 VM 是否為受信任的 VM機密 VM 2021-12-13
storageProfile 請參閱以下的儲存體設定檔 2019-06-01
subscriptionId 虛擬機器的 Azure 訂用帳戶 2017-08-01
tags 虛擬機器的標籤 2017-08-01
tagsList 格式化為 JSON 陣列以方便透過程式設計剖析的標籤 2019-06-04
userData 建立 VM 以在佈建期間或之後使用時所指定的資料集 (Base64 編碼) 2021-01-01
version VM 映像的版本 2017-04-02
virtualMachineScaleSet.id 使用彈性協調流程建立的虛擬機器擴展集識別碼,虛擬機器是其中的一部分。 此欄位不適用於使用統一協調流程建立虛擬機器擴展集。 2021-03-01
vmId VM 的唯一識別碼。 參考的部落格僅適合用於具有 SMBIOS < 2.6 的 VM。 對於具有 SMBIOS > = 2.6 的 VM,來自 DMI 的 UUID 會以小到小的格式顯示,因此不需要切換位元組。 2017-04-02
vmScaleSetName 虛擬機器擴展集的擴展集名稱 2017-12-01
vmSize VM 大小 2017-04-02
zone 您虛擬機器的可用性區域 2017-12-01

†此版本尚未完全可用,而且在所有區域中都可能不受支援。

儲存體設定檔

VM 的儲存體設定檔分成三個類別:映像參考、OS 磁碟和資料磁碟,加上本機暫存磁碟的其他物件。

映像參考物件包含下列作業系統映像的相關資訊:

資料 描述
id 資源識別碼
offer 平台或市集映像的供應項目
publisher 映像發行者
sku 映像 sku
version 平台或市集映像的版本

OS 磁碟物件包含有關 VM 所使用 OS 磁碟的下列資訊:

資料 描述
caching 快取需求
createOption 如何建立 VM 的相關資訊
diffDiskSettings 暫時性磁碟設定
diskSizeGB 磁碟的大小 (以 GB 為單位)
image 來源使用者映像虛擬硬碟
managedDisk 受控磁碟參數
name 磁碟名稱
vhd 虛擬硬碟
writeAcceleratorEnabled 是否在磁碟上啟用 writeAccelerator

資料磁碟陣列包含附加至 VM 的資料磁碟清單。 每個資料磁碟物件都包含下列資訊:

資料 描述 導入的版本
bytesPerSecondThrottle* 磁碟讀取/寫入配額 (以位元組為單位) 2021-05-01
caching 快取需求 2019-06-01
createOption 如何建立 VM 的相關資訊 2019-06-01
diffDiskSettings 暫時性磁碟設定 2019-06-01
diskCapacityBytes* 磁碟的大小 (以位元組為單位) 2021-05-01
diskSizeGB 磁碟的大小 (以 GB 為單位) 2019-06-01
encryptionSettings 磁碟的加密設定 2019-06-01
image 來源使用者映像虛擬硬碟 2019-06-01
isSharedDisk†† 識別磁碟是否在資源之間共用 2021-05-01
isUltraDisk 識別資料磁碟是否為 Ultra 磁碟 2021-05-01
lun 磁碟的邏輯單元編號 2019-06-01
managedDisk 受控磁碟參數 2019-06-01
name 磁碟名稱 2019-06-01
opsPerSecondThrottle* 磁碟讀取/寫入配額 (以 IOPS 為單位) 2021-05-01
osType 磁碟中包含的 OS 類型 2019-06-01
vhd 虛擬硬碟 2019-06-01
writeAcceleratorEnabled 是否在磁碟上啟用 writeAccelerator 2019-06-01

††這些欄位只會填入 Ultra 磁片;它們是來自非 Ultra 磁片的空字串。

加密設定 Blob 包含磁片在加密) 時如何加密 (資料:

資料 描述 導入的版本
diskEncryptionKey.sourceVault.id 磁碟加密金鑰的位置 2021-11-01
diskEncryptionKey.secretUrl 祕密的位置 2021-11-01
keyEncryptionKey.sourceVault.id 金鑰加密金鑰的位置 2021-11-01
keyEncryptionKey.keyUrl 金鑰的位置 2021-11-01

資源磁碟物件包含連結至 VM 的本機暫存磁碟大小,如果有的話,以 KB 為單位。 如果 VM 沒有本機暫存磁片,則此值為 0。

資料 描述 導入的版本
resourceDisk.size VM 的本機暫存磁碟大小 (以 kB 為單位) 2021-02-01

Network

資料 描述 導入的版本
ipv4.privateIpAddress VM 的本機 IPv4 位址 2017-04-02
ipv4.publicIpAddress VM 的公用 IPv4 位址 2017-04-02
subnet.address VM 的子網路位址 2017-04-02
subnet.prefix 子網路首碼,範例 24 2017-04-02
ipv6.ipAddress VM 的本機 IPv6 位址 2017-04-02
macAddress VM mac 位址 2017-04-02

注意

網路呼叫所傳回的 nic 不保證依序。

取得使用者資料

建立新的 VM 時,您可以指定要在 VM 佈建期間或之後使用的一組資料,並透過 IMDS 加以擷取。 請在這裡查看端對端使用者資料體驗。

若要設定使用者資料,請利用這裡的快速入門範本。 下列範例示範如何透過 IMDS 擷取此資料。 此功能是與 2021-01-01 版本和更新版本一起發行。

注意

安全性注意事項:IMDS 會開放給 VM 上的所有應用程式,敏感性資料不應放在使用者資料中。

$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 上執行的 VM

身為服務提供者,您可能需要追蹤執行軟體的 VM 數目,或者具有需要追蹤 VM 唯一性的代理程式。 若要能夠取得 VM 的唯一識別碼,請從執行個體中繼資料服務使用 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"

回應

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

範例 2:放置不同的資料複本

對於特定案例,不同資料複本的放置相當重要。 例如 HDFS 複本放置,或透過協調器的容器放置,您需要知道 VM 執行所在的 platformFaultDomainplatformUpdateDomain。 您也可以使用適用於執行個體的可用性區域來做出這些決定。 您可以直接透過 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"

回應

0

範例 3:取得 VM 標記

VM 標籤包含執行個體/計算/標籤端點下的執行個體 API。 標籤可能已套用至您的 Azure VM,以邏輯方式將其組織成分類法。 您可以使用下列要求來擷取指派給 VM 的標籤。

要求

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"

回應

Department:IT;ReferenceNumber:123456;TestStatus:Pending

tags 欄位是字串,其中包含以分號分隔的標記。 如果標記本身使用分號,這個輸出可能會是個問題。 如果剖析器寫入為以程式設計方式擷取標記,您應該依賴 tagsList 欄位。 tagsList 欄位是沒有分隔符號的 JSON 陣列,因此更容易剖析。 您可以使用下列要求來擷取指派給 VM 的 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

回應

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

範例 4:取得支援案例期間 VM 的相關詳細資訊

身為服務提供者,您可能會收到支援呼叫,而您想要知道更多 VM 的相關資訊。 要求客戶共用計算中繼資料可以為支援專業人員提供基本資訊,以了解 Azure 上的 VM 種類。

要求

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"
        },
        "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:取得 VM 執行所在的 Azure 環境

Azure 有各種不同的主權雲端,例如 Azure Government。 有時候您會需要 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"

回應

AzurePublicCloud

以下列出雲端和 Azure 環境的值。

Cloud Azure 環境
所有正式推出的全域 Azure 區域 AzurePublicCloud
Azure Government AzureUSGovernmentCloud
Azure China 21Vianet AzureChinaCloud
Azure Germany 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

回應

{
  "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 有助於保證所提供的資料來自 Azure。 Microsoft 簽署此資訊的一部分,因此您可以確認Azure Marketplace中的映射是您在 Azure 上執行的映射。

GET /metadata/attested/document

參數

Name 必要/選用 描述
api-version 必要 用來服務要求的版本。
nonce 選擇性 作為密碼編譯 Nonce 的 10 位數字串。 如果未提供任何值,IMDS 會使用目前的 UTC 時間戳記。

回應

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

簽章 Blob 是以 pkcs7 簽署的文件版本。 包含用來簽署的憑證以及特定 VM 專屬詳細資料。

對於使用 Azure Resource Manager 建立的 VM,文件包含 vmIdskunoncesubscriptionId、文件建立和到期的 timeStamp,以及映像的相關方案資訊。 Azure Marketplace 映像才會填入方案資訊。

對於使用傳統部署模型建立的 VM,只會保證填入 vmIdsubscriptionId。 您可以從回應擷取憑證,並且用來確認回應是有效的且來自 Azure。

編碼的文件包含下列欄位:

資料 描述 導入的版本
licenseType Azure Hybrid Benefit 的授權類型。 這僅適用於已啟用 AHB 的 VM。 2020-09-01
nonce 可以選擇性地向要求提供的字串。 如果未提供 nonce,則會使用目前的國際標準時間時間戳記。 2018-10-01
plan Azure Marketplace 映像方案。 包含方案識別碼 (名稱)、產品映像或供應項目 (產品),以及發行者識別碼 (發行者)。 2018-10-01
timestamp.createdOn 簽署文件建立時的 UTC 時間戳記 2018-20-01
timestamp.expiresOn 簽署文件到期時的 UTC 時間戳記 2018-10-01
vmId VM 的唯一識別碼 2018-10-01
subscriptionId 虛擬機器的 Azure 訂用帳戶 2019-04-30
sku VM 映像的特定 SKU (與執行個體中繼資料端點 [/metadata/instance] 的 compute/sku 屬性相互關聯) 2019-11-01

注意

針對傳統 (非 Azure Resource Manager) VM,只會保證填入 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"
}

範例 1:驗證 VM 是在 Azure 中執行

Azure Marketplace 中的廠商想要確保其軟體是授權為只在 Azure 中執行。 如果有人將 VHD 複製到內部部署環境,廠商必須能夠偵測到該情況。 透過 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

注意

公用雲端和每個主權雲端的憑證將會不同。

Cloud 憑證
所有正式推出的全域 Azure 區域 *.metadata.azure.com
Azure Government *.metadata.azure.us
Azure China 21Vianet *.metadata.azure.cn
Azure Germany *.metadata.microsoftazure.de

注意

憑證可能沒有完全符合公用雲端的 metadata.azure.com。 基於這個原因,認證驗證應該允許來自任何 .metadata.azure.com 子網域的一般名稱。

在驗證期間由於網路限制而無法下載中繼憑證的情況下,您可以釘選中繼憑證。 Azure 會變換憑證,這是標準 PKI 做法。 發生變換時,您必須更新釘選的憑證。 每當規劃更新中繼憑證的變更時,就會更新 Azure 部落格,並且會通知 Azure 客戶。

您可以在此頁面找到中繼憑證。 每個區域的中繼憑證可能不同。

注意

適用於 Azure China 21Vianet 的中繼憑證將來自 DigiCert Global Root CA,而不是 Baltimore。 如果您已將 Azure 中國的中繼憑證釘選為根鏈結授權單位變更的一部分,則必須更新中繼憑證。

注意

從 2022 年 2 月開始,我們的證明資料憑證將會受到 TLS 變更的影響。 因此,根 CA 只會針對公用和美國政府雲端,從 Baltimore CyberTrust 變更為 DigiCert Global G2。 如果您有 Baltimore CyberTrust 憑證或其他在此貼文中所列的中繼憑證,請立即遵循此處列出的指示,以防止任何中斷使用證明資料端點。

受控識別

系統指派的受控識別可以在 VM 上啟用。 您也可以將一或多個使用者指派的受控識別指派給 VM。 然後,您可以從 IMDS 要求受控識別的權杖。 使用這些權杖向其他 Azure 服務進行驗證,例如 Azure Key Vault。

如需啟用這項功能的詳細步驟,請參閱取得存取權杖

Load Balancer 中繼資料

當您將虛擬機器或虛擬機器集執行個體放在 Azure Standard Load Balancer 後方時,您可以使用 IMDS 來取得與負載平衡器和執行個體相關的中繼資料。 如需詳細資訊,請參閱擷取負載平衡器資訊

排定的事件

您可以使用 IMDS 取得已排定事件的狀態。 然後,使用者可以指定要在這些事件上執行的一組動作。 如需詳細資訊,請參閱Linux 的已排定事件Windows 的已排定事件

不同語言的程式碼範例

下表列出使用 VM 內不同語言呼叫 IMDS 的範例:

Language 範例
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 方法 (動詞) 。
410 Gone 在一段時間後重試,上限為 70 秒
429 Too Many Requests 已超過 API 速率限制
500 Service Error 稍後重試

常見問題集

  • 我收到錯誤 400 Bad Request, Required metadata header not specified 。 這代表什麼?

    • IMDS 需要在要求中傳遞標頭 Metadata: true。 在 REST 呼叫中傳遞此標頭可允許存取 IMDS。
  • 為什麼我沒有收到我的 VM 計算資訊?

    • 目前 IMDS 僅支援使用 Azure Resource Manager 建立的執行個體。
  • 我先前已透過 Azure Resource Manager 建立 VM。 為什麼我看不到計算中繼資料資訊?

    • 如果您在 2016 年 9 月之後建立 VM,請新增標記以開始查看計算中繼資料。 如果您在 2016 年 9 月之前建立 VM,請新增或移除延伸模組或 VM 執行個體的資料磁碟,以重新整理中繼資料。
  • 使用者資料是否與自訂資料相同?

    • 使用者資料提供與自訂資料類似的功能,可讓您將自己的中繼資料傳遞至 VM 執行個體。 差別在於,使用者資料是透過 IMDS 擷取,而且會在 VM 執行個體的存留期內持續存在。 現有的自訂資料功能將繼續如本文所述運作。 不過,您只能透過本機系統資料夾取得自訂資料,而不能透過 IMDS 取得。
  • 我為何看不到為新版本填入的所有資料?

    • 如果您在 2016 年 9 月之後建立 VM,請新增標記以開始查看計算中繼資料。 如果您在 2016 年 9 月之前建立 VM,請新增或移除延伸模組或 VM 執行個體的資料磁碟,以重新整理中繼資料。
  • 我為何收到錯誤 500 Internal Server Error410 Resource Gone

    • 請重試您的要求。 如需詳細資訊,請參閱暫時性錯誤處理。 如果問題持續發生,請在 Azure 入口網站中為 VM 建立支援問題。
  • 此作業適用于擴展集實例嗎?

    • 是,IMDS 適用于擴展集實例。
  • 我已更新擴展集中的標記,但與單一實例 VM 不同,它們不會出現在實例中 () 。 我有哪裡做錯嗎?

    • 目前擴展集的標籤只會在重新開機、重新安裝映射或磁片變更時顯示給 VM。
  • 為什麼我在詳細資料中看不到 VM instance/compute 的 SKU 資訊?

    • 針對從 Azure Marketplace 建立的自訂映像,Azure 平台不會保留自訂映像的 SKU 資訊,以及從自訂映像建立的任何 VM 詳細資料。 這是設計方式,因此不會顯示在 VM instance/compute 詳細資料中。
  • 為何在呼叫服務時會出現要求逾時的狀況?

    • 中繼資料呼叫必須從指派給 VM 主要網路卡的主要 IP 位址進行。 此外,如果您已變更路由,則必須在 VM 的本機路由表中有 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. 確認介面對應至 VM 的主要 NIC 和主要 IP。 您可以在 Azure 入口網站中或使用 Azure CLI 查看網路組態,來尋找主要 NIC 和 IP。 記下私人 IP (如果您使用 CLI 則同時記下 MAC 位址)。 下列是 PowerShell CLI 範例:
        $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
        }
        # Output: wintest767 True 00-0D-3A-E5-1C-C0
        
      5. 如果不相符,請更新路由表,以便將主要 NIC 和 IP 設為目標。

  • 容錯移轉 Windows Server 中的叢集

    • 當您使用容錯移轉叢集查詢 IMDS 時,有時必須將路由新增至路由表。 方法如下:

      1. 使用系統管理員權限開啟命令提示字元。

      2. 執行下列命令,並在 IPv4 路由表中,記下網路目的地介面 (0.0.0.0) 的位址。

      route print
      

      注意

      下列範例輸出來自已啟用容錯移轉叢集的 Windows Server VM。 為了簡單起見,輸出只包含 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 入口網站中建立支援問題。

產品意見反應

您可以在這裡的虛擬機器 > Instance Metadata Service 底下,將產品意見反應和想法提供給我們的使用者意見反應通道

下一步