Azure Instance Metadata Service

Berlaku untuk: ✔️ mesin virtual Linux ✔️ mesin virtual Windows ✔️ Set skala fleksibel

Azure Instance Metadata Service (IMDS) menyediakan informasi tentang instans komputer virtual yang sedang berjalan. Anda dapat menggunakannya untuk mengelola dan mengonfigurasi komputer virtual Anda. Informasi ini mencakup SKU, penyimpanan, konfigurasi jaringan, dan peristiwa pemeliharaan yang akan datang. Untuk daftar lengkap data yang tersedia, lihat Ringkasan Kategori Titik Akhir.

IMDS tersedia untuk menjalankan instans komputer virtual (VM) dan instans set skala. Semua titik akhir mendukung VM yang dibuat dan dikelola dengan Azure Resource Manager. Hanya kategori Dibuktikan dan bagian Jaringan dari kategori Instance yang mendukung VM yang dibuat dengan model penyebaran klasik. Titik akhir yang Dibuktikan melakukannya hanya sampai batas tertentu.

IMDS adalah REST API yang tersedia di alamat IP terkenal dan tidak dapat dirutekan (169.254.169.254). Anda hanya dapat mengaksesnya dari dalam VM. Komunikasi antara VM dan IMDS tidak pernah meninggalkan host. Biarkan klien HTTP Anda melewati proksi web di dalam VM saat mengkuerikan IMDS, dan memperlakukan 169.254.169.254 sama seperti 168.63.129.16.

Penggunaan

Mengakses Azure Instance Metadata Service

Untuk mengakses IMDS, buat VM dari Azure Resource Manager atau portal Microsoft Azure, dan gunakan sampel berikut. Untuk contoh selengkapnya, lihat Sampel Azure Instance Metadata.

Berikut adalah contoh kode untuk mengambil semua metadata untuk suatu instans. Untuk mengakses sumber data tertentu, lihat Kategori Titik Akhir untuk ringkasan tentang semua fitur yang tersedia.

Permintaan

Penting

Contoh ini melewati proksi. Anda harus melewati proksi saat mengkueri IMDS. Lihat Proksi untuk informasi tambahan.

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 membutuhkan PowerShell V6 atau lebih tinggi. Lihat repositori sampel kami untuk contoh dengan versi PowerShell yang lebih lama.

Respons

Catatan

Responsnya adalah string JSON. Contoh respons berikut tercetak dengan baik agar mudah dibaca.

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

Keamanan dan autentikasi

Instance Metadata Service hanya dapat diakses dari dalam instans komputer virtual yang berjalan pada alamat IP yang tidak dapat dirutekan. VM hanya dapat berinteraksi dengan metadata/fungsionalitasnya sendiri. API hanya terdiri dari HTTP dan tidak pernah meninggalkan host.

Untuk memastikan bahwa permintaan secara langsung ditujukan untuk IMDS dan mencegah pengalihan permintaan yang tidak dimaksudkan atau tidak diinginkan, permintaan:

  • Harus berisi header Metadata: true
  • Tidak boleh berisi header X-Forwarded-For

Setiap permintaan yang tidak memenuhi kedua persyaratan ini ditolak oleh layanan.

Penting

IMDS bukan saluran untuk data sensitif. API tidak diautentikasi dan terbuka untuk semua proses pada VM. Informasi yang terpapar melalui layanan ini harus dianggap sebagai informasi bersama bagi semua aplikasi yang berjalan di dalam VM.

Jika tidak diperlukan untuk setiap proses pada VM untuk mengakses titik akhir IMDS, Anda dapat mengatur aturan firewall lokal untuk membatasi akses. Misalnya, jika hanya layanan sistem yang diketahui yang perlu mengakses layanan metadata instans, Anda dapat menetapkan aturan firewall pada titik akhir IMDS, hanya mengizinkan proses tertentu untuk mengakses, atau menolak akses untuk proses lainnya.

Proksi

IMDS tidak dimaksudkan untuk digunakan di belakang proksi dan tidak didukung untuk melakukannya. Sebagian besar klien HTTP menyediakan opsi untuk menonaktifkan proksi atas permintaan Anda, dan fungsi ini harus digunakan saat berkomunikasi dengan IMDS. Lihat dokumentasi klien Anda untuk detailnya.

Penting

Bahkan jika Anda tidak mengetahui konfigurasi proksi apa pun dalam lingkungan, Anda masih harus mengganti setiap pengaturan proksi klien default. Konfigurasi proksi dapat ditemukan secara otomatis, dan gagal melewati konfigurasi tersebut akan memaparkan Anda pada risiko pemadaman jika konfigurasi mesin diubah di masa mendatang.

Pembatasan tarif

Secara umum, permintaan ke IMDS dibatasi hingga 5 permintaan per detik (atas dasar per VM). Permintaan yang melebihi ambang ini akan ditolak dengan 429 tanggapan. Permintaan ke kategori Identitas Terkelola dibatasi hingga 20 permintaan per detik dan 5 permintaan bersamaan (per VM).

Kata kerja HTTP

Kata kerja HTTP berikut saat ini didukung:

Kata kerja Deskripsi
GET Mengambil sumber daya yang diminta

Parameter

Titik akhir mungkin mendukung parameter yang wajib dan/atau opsional. Lihat Skema dan dokumentasi untuk titik akhir tertentu yang dimaksud untuk detailnya.

Parameter kueri

Titik akhir IMDS mendukung parameter string kueri HTTP. Misalnya:

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

Menentukan parameter:

Nama Nilai
api-version 2021-01-01
format json

Permintaan dengan nama parameter kueri duplikat akan ditolak.

Parameter rute

Untuk beberapa titik akhir yang mengembalikan blob json yang lebih besar, kami mendukung penambahan parameter rute ke titik akhir permintaan untuk memfilter turun ke subset respons:

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

Parameter sesuai dengan indeks/kunci yang akan digunakan untuk berjalan menyusuri objek json yang Anda gunakan untuk berinteraksi dengan representasi terurai.

Misalnya, /metadata/instance mengembalikan objek json:

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

Jika kita ingin memfilter respons ke properti komputasi saja, kita akan mengirimkan permintaan:

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

Demikian pula, jika kita ingin memfilter properti bersarang atau elemen array tertentu, kita terus menambahkan kunci:

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

akan memfilter elemen pertama dari properti Network.interface dan mengembalikan:

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

Catatan

Saat memfilter ke node leaf, format=json tidak berfungsi. Untuk kueri ini, format=text perlu ditentukan secara eksplisit karena format defaultnya adalah json.

Skema

Format data

Secara default, IMDS mengembalikan data dalam format JSON (Content-Type: application/json). Namun, titik akhir yang mendukung pemfilteran respons (lihat Parameter Rute) juga mendukung format text.

Untuk mengakses format respons non-default, tentukan format yang diminta sebagai parameter string kueri dalam permintaan. Misalnya:

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

Dalam respons json, semua primitif akan berupa jenis string, dan nilai yang hilang atau tidak dapat diterapkan selalu disertakan namun akan ditetapkan ke string kosong.

Penerapan versi

IMDS dibuat versinya dan menentukan versi API dalam permintaan HTTP bersifat wajib. Satu-satunya pengecualian untuk persyaratan ini adalah titik akhir versi, yang dapat digunakan untuk mengambil secara dinamis versi API yang tersedia.

Saat versi baru ditambahkan, versi lama masih dapat diakses untuk kompatibilitas jika skrip Anda memiliki dependensi terhadap format data tertentu.

Jika Anda tidak menentukan versi, Anda akan mengalami kesalahan dengan daftar versi terbaru yang didukung:

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

Versi API yang didukung

Catatan

Versi 2023-07-01 masih diluncurkan, mungkin tidak tersedia di beberapa wilayah.

  • 2023-07-01
  • 2021-12-13
  • 2021-11-15
  • 2021-11-01
  • 01-10-2021
  • 2021-08-01
  • 2021-05-01
  • 2021-03-01
  • 2021-02-01
  • 2021-01-01
  • 2020-12-01
  • 01-10-2020
  • 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

Definisi Swagger lengkap untuk IMDS tersedia di: https://github.com/Azure/azure-rest-api-specs/blob/main/specification/imds/data-plane/readme.md

Ketersediaan regional

Layanan ini umumnya tersedia di semua cloud Azure.

Titik akhir akar

Titik akhir akarnya adalah http://169.254.169.254/metadata.

Kategori titik akhir

API IMDS berisi beberapa kategori titik akhir yang mewakili sumber data yang berbeda, yang masing-masing berisi satu atau beberapa titik akhir. Lihat setiap kategori untuk detailnya.

Kategori akar Deskripsi Versi yang diperkenalkan
/metadata/attested Lihat Data yang Dibuktikan 2018-10-01
/metadata/identity Lihat Identitas Terkelola melalui IMDS 2018-02-01
/metadata/instance Lha Instance Metadata 2017-04-02
/metadata/loadbalancer Lihat Mengambil metadata Load Balancer melalui IMDS 01-10-2020
/metadata/scheduledevents Lihat Peristiwa Terjadwal melalui IMDS 2017-08-01
/metadata/versions Lihat Versi T/A

Versi

Cantumkan versi API

Menampilkan sekumpulan versi API yang didukung.

GET /metadata/versions

Parameter

Tidak ada (titik akhir ini tidak dibuat versinya).

Respons

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

Metadata instans

Dapatkan metadata VM

Memaparkan metadata penting untuk instans VM, termasuk komputasi, jaringan, dan penyimpanan.

GET /metadata/instance

Parameter

Nama Diperlukan/Opsional Deskripsi
api-version Wajib diisi Versi yang digunakan untuk melayani permintaan.
format Opsional* Format (json atau text) dari respons. *Catatan: Mungkin diperlukan saat menggunakan parameter permintaan

Titik akhir ini mendukung pemfilteran respons melalui parameter rute.

Respons

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

Perincian skema:

Compute

Data Deskripsi Versi yang diperkenalkan
azEnvironment Lingkungan Azure tempat VM berjalan 2018-10-01
additionalCapabilities.hibernationEnabled Mengidentifikasi jika hibernasi diaktifkan di VM 2021-11-01
customData Fitur ini tidak digunakan lagi dan dinonaktifkan dalam IMDS. Ini telah digantikan oleh userData 2019-02-01
evictionPolicy Mengatur bagaimana VM Spot akan dibuang. 2020-12-01
extendedLocation.type Jenis lokasi VM yang diperluas. 2021-03-01
extendedLocation.name Nama lokasi VM yang diperluas 2021-03-01
host.id Nama host VM. Perhatikan bahwa VM akan memiliki host atau hostGroup tetapi tidak keduanya. 2021-11-15
hostGroup.id Nama hostGroup VM. Perhatikan bahwa VM akan memiliki host atau hostGroup tetapi tidak keduanya. 2021-11-15
isHostCompatibilityLayerVm Mengidentifikasi apakah VM berjalan pada Lapisan Kompatibilitas Host 2020-06-01
licenseType Jenis lisensi untuk Azure Hybrid Benefit. Ini hanya ada untuk VM yang didukung AHB 2020-09-01
location Wilayah Azure tempat VM berjalan 2017-04-02
name Nama VM 2017-04-02
offer Menawarkan informasi untuk gambar VM dan hanya ada untuk gambar yang disebarkan dari galeri gambar Azure 2017-04-02
osProfile.adminUsername Menentukan nama akun admin 2020-07-15
osProfile.computerName Menentukan nama komputer 2020-07-15
osProfile.disablePasswordAuthentication Menentukan apakah autentikasi kata sandi dinonaktifkan. Ini hanya ada untuk VM Linux 01-10-2020
osType Linux atau Windows 2017-04-02
placementGroupId Grup Penempatan set skala Anda 2017-08-01
plan Paket yang berisi nama, produk, dan penerbit untuk VM jika merupakan Gambar Marketplace Azure 2018-04-02
platformUpdateDomain Domain pembaruan tempat VM berjalan 2017-04-02
platformFaultDomain Domain kesalahan tempat VM berjalan 2017-04-02
platformSubFaultDomain Domain sub kesalahan tempat mesin virtual berjalan, jika berlaku. 01-10-2021
priority Prioritas VM. Lihat VM Spot untuk informasi selengkapnya 2020-12-01
provider Penyedia VM 2018-10-01
publicKeys Kumpulan Kunci Umum yang ditetapkan ke VM dan jalur 2018-04-02
publisher Penerbit gambar VM 2017-04-02
resourceGroupName Grup sumber daya untuk Komputer Virtual Anda 2017-08-01
resourceId ID sumber daya yang sepenuhnya memenuhi syarat 2019-03-11
sku SKU spesifik untuk gambar VM 2017-04-02
securityProfile.secureBootEnabled Mengidentifikasi apakah boot aman UEFI diaktifkan pada VM 2020-06-01
securityProfile.virtualTpmEnabled Mengidentifikasi apakah Modul Platform Tepercaya (TPM) virtual diaktifkan pada VM 2020-06-01
securityProfile.encryptionAtHost Mengidentifikasi jika Enkripsi di Host diaktifkan pada VM 2021-11-01
securityProfile.securityType Mengidentifikasi jika VM adalah VM Tepercaya atau VM Rahasia 2021-12-13
storageProfile Lihat Profil Penyimpanan di bawah ini 2019-06-01
subscriptionId Langganan Azure untuk Komputer Virtual 2017-08-01
tags Tag untuk Komputer Virtual Anda 2017-08-01
tagsList Tag yang diformat sebagai array JSON untuk penguraian terprogram yang lebih mudah 2019-06-04
userData Set data yang ditentukan ketika VM dibuat untuk digunakan selama atau setelah provisi (Base64-encoded) 2021-01-01
version Versi gambar VM 2017-04-02
virtualMachineScaleSet.id ID Set Skala Mesin Virtual yang dibuat dengan orkestrasi fleksibel yang mana Mesin Virtual adalah bagian darinya. Bidang ini tidak tersedia untuk Virtual Machine Scale Sets yang dibuat dengan orkestrasi seragam. 2021-03-01
vmId Pengidentifikasi unik untuk mesin virtual. Blog yang dirujuk hanya cocok untuk mesin virtual yang memiliki SMBIOS < 2.6. Untuk VM yang memiliki SMBIOS >= 2.6, UUID dari DMI ditampilkan dalam format little-endian, dengan demikian, tidak ada persyaratan untuk beralih byte. 2017-04-02
vmScaleSetName Nama Set Skala Komputer Virtual dari set skala Anda 2017-12-01
vmSize Ukuran komputer virtual 2017-04-02
zone Zona Ketersediaan komputer virtual Anda 2017-12-01

† Versi ini belum sepenuhnya tersedia dan mungkin belum didukung di semua wilayah.

Profil penyimpanan

Profil penyimpanan VM dibagi menjadi tiga kategori: referensi gambar, disk OS, dan disk data, ditambah objek tambahan untuk disk sementara lokal.

Objek referensi gambar berisi informasi berikut tentang gambar OS, harap dicatat bahwa gambar dapat berasal dari platform, marketplace, galeri komunitas, atau galeri bersama langsung tetapi tidak keduanya:

Data Deskripsi Versi yang diperkenalkan
id ID Sumber Daya 2019-06-01
offer Penawaran platform atau gambar marketplace 2019-06-01
publisher Penerbit platform atau gambar marketplace 2019-06-01
sku Sku platform atau gambar marketplace 2019-06-01
version Versi gambar 2019-06-01
communityGalleryImageId ID sumber daya gambar komunitas, kosong jika tidak 2023-07-01
sharedGalleryImageId ID sumber daya o gambar bersama langsung, kosong jika tidak 2023-07-01
exactVersion Versi komunitas atau gambar bersama langsung 2023-07-01

Objek disk OS berisi informasi tentang disk OS yang digunakan oleh VM berikut:

Data Deskripsi
caching Persyaratan caching
createOption Informasi tentang cara VM dibuat
diffDiskSettings Pengaturan cakram sementara
diskSizeGB Ukuran disk dalam GB
image Hard disk virtual gambar pengguna sumber
managedDisk Parameter disk terkelola
name Nama disk
vhd Hard disk virtual
writeAcceleratorEnabled Apakah writeAccelerator pada disk diaktifkan atau tidak

Array disk data berisi daftar disk data yang terpasang ke VM. Setiap objek disk data berisi informasi berikut:

Data Deskripsi Versi yang diperkenalkan
bytesPerSecondThrottle* Kuota baca/tulis disk dalam byte 2021-05-01
caching Persyaratan caching 2019-06-01
createOption Informasi tentang cara VM dibuat 2019-06-01
diffDiskSettings Pengaturan cakram sementara 2019-06-01
diskCapacityBytes* Ukuran disk dalam byte 2021-05-01
diskSizeGB Ukuran disk dalam GB 2019-06-01
encryptionSettings Pengaturan enkripsi untuk disk 2019-06-01
image Hard disk virtual gambar pengguna sumber 2019-06-01
isSharedDisk* Mengidentifikasi jika disk dibagi antara sumber daya 2021-05-01
isUltraDisk Mengidentifikasi apakah disk data adalah Disk Ultra 2021-05-01
lun Nomor unit logis disk 2019-06-01
managedDisk Parameter disk terkelola 2019-06-01
name Nama disk 2019-06-01
opsPerSecondThrottle* Kuota baca/tulis disk di IOPS 2021-05-01
osType Jenis OS yang disertakan dalam disk 2019-06-01
vhd Hard disk virtual 2019-06-01
writeAcceleratorEnabled Apakah writeAccelerator pada disk diaktifkan atau tidak 2019-06-01

*Bidang ini hanya diisi untuk Ultra Disk; mereka adalah string kosong dari disk non-Ultra.

Blob pengaturan enkripsi berisi data tentang bagaimana disk dienkripsi (jika dienkripsi):

Data Deskripsi Versi yang diperkenalkan
diskEncryptionKey.sourceVault.id Lokasi kunci enkripsi disk 2021-11-01
diskEncryptionKey.secretUrl Lokasi rahasia 2021-11-01
keyEncryptionKey.sourceVault.id Lokasi kunci enkripsi utama 2021-11-01
keyEncryptionKey.keyUrl Lokasi kunci 2021-11-01

Objek disk sumber daya berisi ukuran Disk Temp Lokal yang terpasang pada VM, jika ada, dalam kilobyte. Jika tidak ada disk sementara lokal untuk VM, nilai ini adalah 0.

Data Deskripsi Versi yang diperkenalkan
resourceDisk.size Ukuran disk temp lokal untuk VM (dalam kB) 2021-02-01

Jaringan

Data Deskripsi Versi yang diperkenalkan
ipv4.privateIpAddress Alamat IPv4 lokal VM 2017-04-02
ipv4.publicIpAddress Alamat IPv4 publik VM 2017-04-02
subnet.address Alamat subnet VM 2017-04-02
subnet.prefix Prefiks subnet, contoh 24 2017-04-02
ipv6.ipAddress Alamat IPv6 lokal VM 2017-04-02
macAddress Alamat mac VM 2017-04-02

Catatan

Nics yang dikembalikan oleh panggilan jaringan tidak dijamin teratur.

Mendapatkan data pengguna

Saat membuat VM baru, Anda dapat menentukan serangkaian data yang akan digunakan selama atau setelah provisi VM, dan mengambilnya melalui IMDS. Periksa pengalaman data pengguna ujung ke ujung di sini.

Untuk menyiapkan data pengguna, gunakan templat mulai cepat di sini. Contoh di bawah ini menunjukkan cara mengambil data ini melalui IMDS. Fitur ini dirilis dengan versi 2021-01-01 ke atas.

Catatan

Pemberitahuan keamanan: IMDS terbuka untuk semua aplikasi di VM, data sensitif tidak boleh ditempatkan dalam data pengguna.

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

Sampel 1: Melacak VM yang berjalan di Azure

Sebagai penyedia layanan, Anda mungkin perlu melacak jumlah VM yang menjalankan perangkat lunak Anda atau memiliki agen yang perlu melacak keunikan VM. Agar dapat memperoleh ID unik untuk VM, gunakan bidang vmId dari Instance Metadata Service.

Permintaan

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"

Respons

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

Sampel 2: Penempatan replika data yang berbeda

Untuk skenario tertentu, penempatan replika data yang berbeda sangat penting. Misalnya, penempatan replika HDFS atau penempatan kontainer melalui orkestrator mungkin mengharuskan Anda mengetahui platformFaultDomain dan platformUpdateDomain tempat VM berjalan. Anda juga dapat menggunakan Zona Ketersediaan bagi instans untuk membuat keputusan ini. Anda dapat mengkueri data ini secara langsung melalui IMDS.

Permintaan

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"

Respons

0

Sampel 3: Mendapatkan tag VM

Tag VM disertakan API instans pada titik akhir instans/komputasi/tag. Tag mungkin telah diterapkan ke VM Azure Anda untuk mengaturnya secara logis ke dalam taksonomi. Tag yang ditetapkan ke VM dapat diambil dengan menggunakan permintaan di bawah ini.

Permintaan

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"

Respons

Department:IT;ReferenceNumber:123456;TestStatus:Pending

Bidang tags adalah string dengan tag yang dibatasi oleh titik koma. Output ini dapat menjadi masalah jika titik koma digunakan dalam tag itu sendiri. Jika parser ditulis untuk mengekstrak tag secara terprogram, Anda harus mengandalkan bidang tagsList. Bidang tagsList ini adalah array JSON tanpa pemisah, sehingga akibatnya, lebih mudah diurai. TagsList yang ditetapkan ke VM dapat diambil dengan permintaan di bawah ini.

Permintaan

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

Respons

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

Sampel 4: Mendapatkan informasi selengkapnya tentang VM selama kasus dukungan

Sebagai penyedia layanan, Anda mungkin mendapatkan panggilan dukungan di mana Anda ingin mengetahui informasi selengkapnya tentang VM. Meminta pelanggan untuk berbagi metadata komputasi dapat memberikan informasi dasar bagi profesional dukungan untuk mengetahui tentang jenis VM di Azure.

Permintaan

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

Respons

Catatan

Responsnya adalah string JSON. Contoh respons berikut tercetak dengan baik agar mudah dibaca.

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

Sampel 5: Mendapatkan Lingkungan Azure tempat VM berjalan

Azure memiliki berbagai sovereign cloud seperti Azure Government. Terkadang Anda memerlukan Lingkungan Azure untuk membuat beberapa keputusan runtime. Sampel berikut menunjukkan kepada Anda cara untuk mencapai perilaku ini.

Permintaan

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"

Respons

AzurePublicCloud

Cloud dan nilai lingkungan Azure tercantum di sini.

Cloud Lingkungan Azure
Semua wilayah Azure global yang tersedia secara umum AzurePublicCloud
Azure Government AzureUSGovernmentCloud
Microsoft Azure dioperasikan oleh 21Vianet AzureChinaCloud
Azure Germany AzureGermanCloud

Sampel 6: Mengambil informasi jaringan

Permintaan

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

Respons

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

Sampel 7: Mengambil alamat IP publik

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"

Catatan

  • Jika Anda ingin mengambil informasi IMDS untuk alamat IP Publik SKU Standar , tinjau Api Metadata Load Balancer untuk infomrasi selengkapnya.

Data yang dibuktikan

Mendapatkan data yang Dibuktikan

IMDS membantu memberikan jaminan bahwa data yang diberikan berasal dari Azure. Microsoft menandatangani bagian dari informasi ini, sehingga Anda dapat mengonfirmasi bahwa gambar di Marketplace Azure adalah gambar yang Anda jalankan di Azure.

GET /metadata/attested/document

Parameter

Nama Diperlukan/Opsional Deskripsi
api-version Wajib diisi Versi yang digunakan untuk melayani permintaan.
nonce Opsional String 10 digit yang berfungsi sebagai nonce kriptografi. Jika tidak ada nilai yang disediakan, IMDS menggunakan tanda waktu UTC saat ini.

Respons

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

Blob tanda tangan adalah versi dokumen yang ditandatangani-pkcs7. Ini berisi sertifikat yang digunakan untuk penandatanganan bersama dengan detail spesifik VM tertentu.

Untuk VM yang dibuat dengan Azure Resource Manager, dokumennya meliputi vmId, sku, nonce, subscriptionId, timeStamp untuk pembuatan dan kedaluwarsa dokumen, serta informasi rencana tentang gambar. Informasi paket hanya diisi untuk gambar Azure Marketplace.

Untuk VM yang dibuat menggunakan model penyebaran klasik, hanya vmId dan subscriptionId yang dijamin akan terisi. Anda dapat mengekstrak sertifikat dari respons, dan menggunakannya untuk mengonfirmasi bahwa responsnya valid dan berasal dari Azure.

Dokumen yang didekode berisi bidang berikut:

Data Deskripsi Versi yang diperkenalkan
licenseType Jenis lisensi untuk Azure Hybrid Benefit. Ini hanya ada untuk VM yang didukung AHB. 2020-09-01
nonce String yang dapat disediakan secara opsional dengan permintaan. Jika nonce tidak disediakan, tanda waktu UTC saat ini yang digunakan. 2018-10-01
plan Rencana Gambar Azure Marketplace Berisi ID paket (nama), gambar produk atau penawaran (produk), dan ID penerbit (penerbit). 2018-10-01
timestamp.createdOn Tanda waktu UTC saat dokumen yang ditandatangani dibuat 2018-20-01
timestamp.expiresOn Tanda waktu UTC saat dokumen yang ditandatangani kedaluwarsa 2018-10-01
vmId Pengidentifikasi unik untuk VM 2018-10-01
subscriptionId Langganan Azure untuk Komputer Virtual 2019-04-30
sku SKU khusus untuk citra mesin virtual (berkorelasi dengan properti compute/sku dari titik akhir Metadata Instans [/metadata/instance]) 2019-11-01

Catatan

Untuk VM Klasik (Non-Azure Resource Manager), hanya vmId yang dijamin akan diisi.

Contoh dokumen:

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

Panduan Validasi Tanda Tangan

Saat memvalidasi tanda tangan, Anda harus mengonfirmasi bahwa tanda tangan dibuat dengan sertifikat dari Azure. Hal ini dilakukan dengan memvalidasi sertifikat Subject Alternative Name (SAN).

Contoh SAN DNS Name=eastus.metadata.azure.com, DNS Name=metadata.azure.com

Catatan

Domain untuk cloud publik dan setiap sovereign cloud akan berbeda.

Cloud Domain di SAN
Semua wilayah Azure global yang tersedia secara umum *.metadata.azure.com
Azure Government *.metadata.azure.us
Azure dioperasikan oleh 21Vianet *.metadata.azure.cn
Azure Germany *.metadata.microsoftazure.de

Catatan

Sertifikat mungkin tidak memiliki kecocokan yang tepat untuk domain. Untuk alasan ini, validasi sertifikasi harus menerima subdomain apa pun (misalnya, di wilayah ketersediaan umum cloud publik menerima *.metadata.azure.com).

Kami tidak merekomendasikan penyematan sertifikat untuk sertifikasi perantara. Untuk panduan lebih lanjut, lihat Penyematan sertifikat - Penyematan sertifikat dan layanan Azure. Harap dicatat bahwa Azure Instance Metadata Service TIDAK akan menawarkan pemberitahuan untuk perubahan Otoritas Sertifikat di masa mendatang. Sebagai gantinya, Anda harus mengikuti artikel detail Otoritas Sertifikat Azure terpusat untuk semua pembaruan di masa mendatang.

Sampel 1: Memvalidasi bahwa VM berjalan di Azure

Vendor di Azure Marketplace ingin memastikan bahwa perangkat lunak mereka hanya dilisensikan untuk dijalankan di Azure. Jika seseorang menyalin VHD ke lingkungan lokal, vendor harus dapat mendeteksinya. Melalui IMDS, vendor ini dapat memperoleh data bertanda tangan yang menjamin respons hanya dari Azure.

Catatan

Sampel ini membutuhkan utilitas jq untuk diinstal.

Validasi

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

Verifikasi bahwa tanda tangan berasal dari Microsoft Azure dan periksa rantai sertifikat untuk kesalahan.

# 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 dalam dokumen yang ditandatangani dapat dibandingkan jika Anda memberikan parameter nonce dalam permintaan awal.

Identitas Terkelola

Identitas terkelola, yang ditetapkan oleh sistem, dapat diaktifkan pada VM. Anda juga dapat menetapkan satu atau beberapa identitas terkelola yang ditetapkan pengguna ke VM. Anda kemudian dapat meminta token untuk identitas terkelola dari IMDS. Gunakan token ini untuk mengautentikasi dengan layanan Azure lainnya, seperti Azure Key Vault.

Untuk langkah-langkah mendetail dalam mengaktifkan fitur ini, lihat Memperoleh token akses.

Metadata Load Balancer

Saat Anda menempatkan komputer virtual atau instans set komputer virtual di belakang Azure Standard Load Balancer, Anda dapat menggunakan IMDS untuk mengambil metadata yang terkait dengan penyeimbang muatan dan instans. Untuk informasi selengkapnya, lihat Mengambil informasi load balancer.

Acara terjadwal

Anda bisa mendapatkan status peristiwa terjadwal menggunakan IMDS. Kemudian pengguna dapat menentukan serangkaian tindakan yang akan dijalankan pada peristiwa ini. Untuk informasi selengkapnya, lihat Peristiwa terjadwal untuk Linux atau Peristiwa terjadwal untuk Windows.

Kode sampel dalam bahasa yang berbeda

Tabel berikut ini mencantumkan sampel pemanggilan IMDS menggunakan bahasa yang berbeda di dalam VM:

Bahasa Contoh
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

Kesalahan dan penelusuran kesalahan

Jika ada elemen data yang tidak ditemukan atau permintaan cacat, Layanan Metadata Instans mengembalikan kesalahan HTTP standar. Misalnya:

Kode status HTTP Alasan
200 OK Permintaan berhasil.
400 Bad Request Kehilangan header Metadata: true atau kehilangan parameter format=json saat mengkueri node leaf
404 Not Found Elemen yang diminta tidak ada
405 Method Not Allowed Metode HTTP (kata kerja) tidak didukung pada titik akhir.
410 Gone Coba lagi setelah beberapa saat selama maksimal 70 detik
429 Too Many Requests Batas Laju API terlampaui
500 Service Error Coba lagi setelah beberapa saat

Pertanyaan yang Sering Ditanyakan

  • Saya mendapatkan kesalahan 400 Bad Request, Required metadata header not specified. Apa artinya ini?

    • IMDS mengharuskan header Metadata: true agar diteruskan dalam permintaan. Meneruskan header ini dalam panggilan REST memungkinkan akses ke IMDS.
  • Mengapa saya tidak mendapatkan informasi komputasi untuk VM saya?

    • Saat ini, IMDS hanya mendukung instans yang dibuat dengan Azure Resource Manager.
  • Saya membuat VM melalui Azure Resource Manager beberapa waktu lalu. Mengapa saya tidak melihat informasi metadata komputasi?

    • Jika Anda membuat VM setelah September 2016, tambahkan tag untuk mulai melihat metadata komputasi. Jika Anda membuat VM sebelum September 2016, tambahkan atau hapus ekstensi atau disk data ke instans VM untuk refresh metadata.
  • Apakah data pengguna sama dengan data kustom?

    • Data pengguna menawarkan fungsi serupa dengan data kustom, yang memungkinkan Anda untuk meneruskan metadata Anda sendiri ke instans VM. Bedanya, data pengguna diambil melalui IMDS, dan persisten sepanjang masa pakai instans VM. Fitur data kustom yang sudah ada akan terus berfungsi seperti yang dijelaskan dalam artikel ini. Namun Anda hanya dapat memperoleh data kustom melalui folder sistem lokal, bukan melalui IMDS.
  • Mengapa saya tidak melihat semua data diisi untuk versi baru?

    • Jika Anda membuat VM setelah September 2016, tambahkan tag untuk mulai melihat metadata komputasi. Jika Anda membuat VM sebelum September 2016, tambahkan atau hapus ekstensi atau disk data ke instans VM untuk refresh metadata.
  • Mengapa saya mendapatkan kesalahan 500 Internal Server Error atau 410 Resource Gone?

    • Coba lagi Permintaan Anda. Untuk informasi selengkapnya, lihat Penanganan kesalahan sementara. Jika masalah berlanjut, buat masalah dukungan di portal Microsoft Azure untuk VM.
  • Apakah ini berfungsi untuk instans set skala?

    • Ya, IMDS tersedia untuk instans set skala.
  • Saya memperbarui tag saya dalam set skala saya, tetapi tidak muncul dalam instans (tidak seperti VM instans tunggal). Apakah saya melakukan suatu kesalahan?

    • Saat ini tag untuk set skala hanya ditampilkan ke VM pada reboot, reimage, atau perubahan disk ke instans.
  • Mengapa saya tidak melihat informasi SKU untuk VM instance/compute saya secara rinci?

    • Untuk gambar kustom yang dibuat dari Azure Marketplace, platform Azure tidak menyimpan informasi SKU untuk gambar kustom dan detail untuk VM apa pun yang dibuat dari gambar kustom. Ini telah dirancang demikian, oleh karena itu, tidak muncul dalam detail instance/compute VM.
  • Mengapa waktu permintaan saya habis (atau gagal tersambung) untuk panggilan saya ke layanan?

    • Panggilan metadata harus dilakukan dari alamat IP utama yang ditetapkan ke kartu jaringan utama VM. Selain itu, jika Anda telah mengubah rute, harus ada rute untuk alamat 169.254.169.254/32 pada tabel perutean lokal VM Anda.

      1. Kopi rekam cadang tabel perutean lokal Anda lalu cari entri IMDS. Misalnya:

        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. Pastikan bahwa rute ada untuk 169.254.169.254, dan catat antarmuka jaringan yang sesuai (misalnya, 172.16.69.7).

      3. Kopi rekam cadang konfigurasi antarmuka dan temukan antarmuka yang sesuai dengan yang direferensikan dalam tabel perutean, yang mencatat alamat MAC (fisik).

        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. Pasitikan bahwa antarmuka sesuai dengan NIC utama dan IP primer VM. Anda dapat menemukan NIC dan IP utama dengan melihat konfigurasi jaringan di portal Microsoft Azure, atau dengan mencarinya dengan Azure CLI. Catat IP pribadi (dan alamat MAC jika Anda menggunakan CLI). Berikut adalah contoh CLI PowerShell:

        $ResourceGroup = '<Resource_Group>'
        $VmName = '<VM_Name>'
        $NicNames = az vm nic list --resource-group $ResourceGroup --vm-name $VmName | ConvertFrom-Json | Foreach-Object { $_.id.Split('/')[-1] }
        foreach($NicName in $NicNames)
        {
            $Nic = az vm nic show --resource-group $ResourceGroup --vm-name $VmName --nic $NicName | ConvertFrom-Json
            Write-Host $NicName, $Nic.primary, $Nic.macAddress
        }
        
        wintest767 True 00-0D-3A-E5-1C-C0
        
      5. Jika tidak cocok, perbarui tabel perutean sehingga NIC dan IP utama ditargetkan.


  • Failover pengklusteran di Windows Server

    • Saat Anda mengkueri IMDS dengan pengklusteran failover, terkadang perlu menambahkan rute ke tabel perutean. Berikut caranya:

      1. Buka perintah dengan hak istimewa admin.

      2. Jalankan perintah berikut, lalu catat alamat Antarmuka untuk Tujuan Jaringan (0.0.0.0) dalam Tabel Rute IPv4.

      route print
      

      Catatan

      Contoh output berikut ini berasal dari VM Windows Server dengan kluster failover diaktifkan. Untuk ringkasnya, output hanya berisi Tabel Rute 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
      

      Jalankan perintah berikut dan gunakan alamat Antarmuka untuk Tujuan Jaringan (0.0.0.0), yang merupakan (10.0.1.10) dalam contoh ini.

      route add 169.254.169.254/32 10.0.1.10 metric 1 -p
      

Dukungan

Jika Anda tidak bisa mendapatkan respons metadata setelah beberapa upaya, Anda dapat membuat masalah dukungan di portal Azure.

Umpan balik produk

Anda dapat memberikan umpan balik dan ide produk ke saluran umpan balik pengguna kami pada Virtual Machines > Instance Metadata Service di sini

Langkah berikutnya