Azure Instance Metadata Service
Aplica-se a: ✔️ Linux VMs ✔️ Windows VMs ✔️ Conjuntos de escala flexível
O Azure Instance Metadata Service (IMDS) disponibiliza informações sobre as instâncias de máquinas virtuais atualmente em execução. Pode utilizá-lo para gerir e configurar as suas máquinas virtuais. Estas informações incluem o SKU, o armazenamento, as configurações de rede e os eventos de manutenção futuros. Para obter uma lista completa dos dados disponíveis, veja o Resumo das Categorias de Pontos Finais.
O IMDS está disponível para executar instâncias de máquinas virtuais (VMs) e dimensionar instâncias de conjuntos. Todos os pontos de extremidade dão suporte a VMs criadas e gerenciadas usando o Azure Resource Manager. Somente a categoria Atestado e a parte Rede da categoria Instância oferecem suporte a VMs criadas usando o modelo de implantação clássico. O parâmetro de avaliação atestado fá-lo apenas de forma limitada.
O IMDS é uma API REST que está disponível em um endereço IP conhecido e não roteável (169.254.169.254
). Só é possível aceder ao mesmo a partir da VM. A comunicação entre a VM e o IMDS nunca sai do anfitrião.
Faça com que seus clientes HTTP ignorem proxies da Web dentro da VM ao consultar o IMDS e tratem 169.254.169.254
o mesmo que 168.63.129.16
.
Utilização
Acessar o Serviço de Metadados de Instância do Azure
Para acessar o IMDS, crie uma VM do Azure Resource Manager ou do portal do Azure e use os exemplos a seguir. Para obter mais exemplos, consulte Exemplos de metadados de instância do Azure.
Aqui está o código de exemplo para recuperar todos os metadados de uma instância. Para acessar uma fonte de dados específica, consulte Categorias de pontos finais para obter uma visão geral de todos os recursos disponíveis.
Pedir
Importante
Este exemplo ignora proxies. Você deve ignorar proxies ao consultar o IMDS. Consulte Proxies para obter informações adicionais.
Nota
As solicitações IMDS devem ser enviadas usando a NIC primária e o IP primário da VM, e o DHCP deve estar habilitado.
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
requer PowerShell V6 ou superior. Consulte nosso repositório de exemplos para obter exemplos com versões mais antigas do PowerShell.
Resposta
Nota
A resposta é uma cadeia de caracteres JSON. O exemplo de resposta a seguir é muito bem impresso para facilitar a leitura.
{
"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"
}]
}
}
Segurança e autenticação
O Serviço de Metadados de Instância só pode ser acessado de dentro de uma instância de máquina virtual em execução em um endereço IP não roteável. As VMs só podem interagir com seus próprios metadados/funcionalidades. A API é apenas HTTP e nunca sai do host.
Para garantir que as solicitações sejam diretamente destinadas ao IMDS e evitar o redirecionamento não intencional ou indesejado das solicitações, as solicitações:
- Deve conter o cabeçalho
Metadata: true
- Não deve conter um
X-Forwarded-For
cabeçalho
Qualquer solicitação que não atenda a esses dois requisitos é rejeitada pelo serviço.
Importante
O IMDS não é um canal para dados confidenciais. A API não é autenticada e está aberta a todos os processos na VM. As informações expostas por meio desse serviço devem ser consideradas como informações compartilhadas para todos os aplicativos em execução dentro da VM.
Se não for necessário que todos os processos na VM acessem o ponto de extremidade IMDS, você poderá definir regras de firewall locais para limitar o acesso. Por exemplo, se apenas um serviço de sistema conhecido precisar acessar o serviço de metadados da instância, você poderá definir uma regra de firewall no ponto de extremidade IMDS, permitindo apenas o acesso do(s) processo(s) específico(s) ou negando acesso para o restante dos processos.
Proxies
O IMDS não se destina a ser usado atrás de um proxy e isso não é suportado. A maioria dos clientes HTTP fornece uma opção para você desabilitar proxies em suas solicitações, e essa funcionalidade deve ser utilizada ao se comunicar com o IMDS. Consulte a documentação do seu cliente para obter detalhes.
Importante
Mesmo que você não saiba de nenhuma configuração de proxy em seu ambiente, você ainda deve substituir qualquer configuração de proxy de cliente padrão. As configurações de proxy podem ser descobertas automaticamente, e não ignorar essas configurações expõe você a riscos de interrupção caso a configuração da máquina seja alterada no futuro.
Rate limiting (Limitação de taxa)
Em geral, as solicitações ao IMDS são limitadas a 5 solicitações por segundo (por VM). Os pedidos que excedam este limiar serão rejeitados com respostas 429. As solicitações para a categoria Identidade Gerenciada são limitadas a 20 solicitações por segundo e 5 solicitações simultâneas (por VM).
Verbos HTTP
Os seguintes verbos HTTP são suportados atualmente:
Verbo | Description |
---|---|
GET |
Recuperar o recurso solicitado |
Parâmetros
Os endpoints podem suportar parâmetros necessários e/ou opcionais. Consulte Esquema e a documentação do ponto de extremidade específico em questão para obter detalhes.
Parâmetros de consultas
Os pontos de extremidade IMDS suportam parâmetros de cadeia de caracteres de consulta HTTP. Por exemplo:
http://169.254.169.254/metadata/instance/compute?api-version=2021-01-01&format=json
Especifica os parâmetros:
Nome | Valor |
---|---|
api-version |
2021-01-01 |
format |
json |
Solicitações com nomes de parâmetros de consulta duplicados serão rejeitadas.
Parâmetros de rota
Para alguns pontos de extremidade que retornam blobs json maiores, oferecemos suporte ao acréscimo de parâmetros de rota ao ponto de extremidade da solicitação para filtrar até um subconjunto da resposta:
http://169.254.169.254/metadata/<endpoint>/[<filter parameter>/...]?<query parameters>
Os parâmetros correspondem aos índices/chaves que seriam usados para percorrer o objeto json se você interagisse com uma representação analisada.
Por exemplo, /metadata/instance
retorna o objeto json:
{
"compute": { ... },
"network": {
"interface": [
{
"ipv4": {
"ipAddress": [{
"privateIpAddress": "10.144.133.132",
"publicIpAddress": ""
}],
"subnet": [{
"address": "10.144.133.128",
"prefix": "26"
}]
},
"ipv6": {
"ipAddress": [
]
},
"macAddress": "0011AAFFBB22"
},
...
]
}
}
Se quisermos filtrar a resposta apenas para a propriedade compute, enviaremos a solicitação:
http://169.254.169.254/metadata/instance/compute?api-version=<version>
Da mesma forma, se quisermos filtrar para uma propriedade aninhada ou elemento de matriz específico, continuamos anexando chaves:
http://169.254.169.254/metadata/instance/network/interface/0?api-version=<version>
filtraria para o primeiro elemento da Network.interface
propriedade e retornaria:
{
"ipv4": {
"ipAddress": [{
"privateIpAddress": "10.144.133.132",
"publicIpAddress": ""
}],
"subnet": [{
"address": "10.144.133.128",
"prefix": "26"
}]
},
"ipv6": {
"ipAddress": [
]
},
"macAddress": "0011AAFFBB22"
}
Nota
Ao filtrar para um nó folha, format=json
não funciona. Para essas consultas format=text
precisa ser explicitamente especificado, pois o formato padrão é json.
Esquema
Formato dos dados
Por padrão, o IMDS retorna dados no formato JSON (Content-Type: application/json
). No entanto, os pontos de extremidade que suportam filtragem de resposta (consulte Parâmetros de rota) também suportam o formato text
.
Para acessar um formato de resposta não padrão, especifique o formato solicitado como um parâmetro de cadeia de caracteres de consulta na solicitação. Por exemplo:
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance?api-version=2017-08-01&format=text"
Em respostas json, todas as primitivas serão do tipo string
, e valores ausentes ou inaplicáveis são sempre incluídos, mas serão definidos como uma cadeia de caracteres vazia.
Controlo de Versão
O IMDS é versionado e especificar a versão da API na solicitação HTTP é obrigatório. A única exceção a esse requisito é o ponto de extremidade de versões , que pode ser usado para recuperar dinamicamente as versões de API disponíveis.
À medida que as versões mais recentes são adicionadas, as versões mais antigas ainda podem ser acessadas para compatibilidade se os scripts tiverem dependências em formatos de dados específicos.
Quando você não especifica uma versão, recebe um erro com uma lista das versões suportadas mais recentes:
{
"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"
]
}
Versões de API suportadas
Nota
A versão 2023-11-15 ainda está sendo lançada, pode não estar disponível em algumas regiões.
- 2023-11-15
- 2023-07-01
- 2021-12-13
- 2021-11-15
- 2021-11-01
- 2021-10-01
- 2021-08-01
- 2021-05-01
- 2021-03-01
- 2021-02-01
- 2021-01-01
- 2020-12-01
- 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
Uma definição Swagger completa para IMDS está disponível em: https://github.com/Azure/azure-rest-api-specs/blob/main/specification/imds/data-plane/readme.md
Disponibilidade regional
O serviço está geralmente disponível em todas as nuvens do Azure.
Ponto de extremidade raiz
O ponto de extremidade raiz é http://169.254.169.254/metadata
.
Categorias de pontos finais
A API IMDS contém várias categorias de pontos finais que representam diferentes fontes de dados, cada uma das quais contém um ou mais pontos de extremidade. Consulte cada categoria para obter detalhes.
Raiz da categoria | Description | Versão introduzida |
---|---|---|
/metadata/attested |
Ver dados atestados | 2018-10-01 |
/metadata/identity |
Consulte Identidade gerenciada via IMDS | 2018-02-01 |
/metadata/instance |
Consulte Metadados da instância | 2017-04-02 |
/metadata/loadbalancer |
Consulte Recuperar metadados do balanceador de carga via IMDS | 01-10-2020 |
/metadata/scheduledevents |
Ver eventos agendados via IMDS | 2017-08-01 |
/metadata/versions |
Ver Versões | N/A |
Versões
Listar versões da API
Retorna o conjunto de versões de API suportadas.
GET /metadata/versions
Parâmetros
Nenhum (este ponto de extremidade não tem versão).
Response
{
"apiVersions": [
"2017-03-01",
"2017-04-02",
...
]
}
Metadados da instância
Obter metadados de VM
Expõe os metadados importantes para a instância da VM, incluindo computação, rede e armazenamento.
GET /metadata/instance
Parâmetros
Nome | Obrigatório/Opcional | Description |
---|---|---|
api-version |
Obrigatório | A versão usada para atender a solicitação. |
format |
Opcional* | O formato (json ou text ) da resposta. *Nota: Pode ser necessário ao usar parâmetros de solicitação |
Este ponto de extremidade suporta filtragem de resposta através de parâmetros de rota.
Response
{
"compute": {
"azEnvironment": "AZUREPUBLICCLOUD",
"additionalCapabilities": {
"hibernationEnabled": "true"
},
"hostGroup": {
"id": "testHostGroupId"
},
"extendedLocation": {
"type": "edgeZone",
"name": "microsoftlosangeles"
},
"evictionPolicy": "",
"isHostCompatibilityLayerVm": "true",
"licenseType": "Windows_Client",
"location": "westus",
"name": "examplevmname",
"offer": "WindowsServer",
"osProfile": {
"adminUsername": "admin",
"computerName": "examplevmname",
"disablePasswordAuthentication": "true"
},
"osType": "Windows",
"placementGroupId": "f67c14ab-e92c-408c-ae2d-da15866ec79a",
"plan": {
"name": "planName",
"product": "planProduct",
"publisher": "planPublisher"
},
"platformFaultDomain": "36",
"platformSubFaultDomain": "",
"platformUpdateDomain": "42",
"priority": "Regular",
"publicKeys": [{
"keyData": "ssh-rsa 0",
"path": "/home/user/.ssh/authorized_keys0"
},
{
"keyData": "ssh-rsa 1",
"path": "/home/user/.ssh/authorized_keys1"
}
],
"publisher": "RDFE-Test-Microsoft-Windows-Server-Group",
"resourceGroupName": "macikgo-test-may-23",
"resourceId": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/virtualMachines/examplevmname",
"securityProfile": {
"secureBootEnabled": "true",
"virtualTpmEnabled": "false",
"encryptionAtHost": "true",
"securityType": "TrustedLaunch"
},
"sku": "2019-Datacenter",
"storageProfile": {
"dataDisks": [{
"bytesPerSecondThrottle": "979202048",
"caching": "None",
"createOption": "Empty",
"diskCapacityBytes": "274877906944",
"diskSizeGB": "1024",
"image": {
"uri": ""
},
"isSharedDisk": "false",
"isUltraDisk": "true",
"lun": "0",
"managedDisk": {
"id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampledatadiskname",
"storageAccountType": "StandardSSD_LRS"
},
"name": "exampledatadiskname",
"opsPerSecondThrottle": "65280",
"vhd": {
"uri": ""
},
"writeAcceleratorEnabled": "false"
}],
"imageReference": {
"id": "",
"offer": "WindowsServer",
"publisher": "MicrosoftWindowsServer",
"sku": "2019-Datacenter",
"version": "latest",
"communityGalleryImageId": "/CommunityGalleries/testgallery/Images/1804Gen2/Versions/latest",
"sharedGalleryImageId": "/SharedGalleries/1P/Images/gen2/Versions/latest",
"exactVersion": "1.1686127202.30113"
},
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage",
"diskSizeGB": "30",
"diffDiskSettings": {
"option": "Local"
},
"encryptionSettings": {
"enabled": "false",
"diskEncryptionKey": {
"sourceVault": {
"id": "/subscriptions/test-source-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
},
"secretUrl": "https://test-disk.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
},
"keyEncryptionKey": {
"sourceVault": {
"id": "/subscriptions/test-key-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
},
"keyUrl": "https://test-key.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
}
},
"image": {
"uri": ""
},
"managedDisk": {
"id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampleosdiskname",
"storageAccountType": "StandardSSD_LRS"
},
"name": "exampleosdiskname",
"osType": "Windows",
"vhd": {
"uri": ""
},
"writeAcceleratorEnabled": "false"
},
"resourceDisk": {
"size": "4096"
}
},
"subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"tags": "baz:bash;foo:bar",
"userData": "Zm9vYmFy",
"version": "15.05.22",
"virtualMachineScaleSet": {
"id": "/subscriptions/xxxxxxxx-xxxxx-xxx-xxx-xxxx/resourceGroups/resource-group-name/providers/Microsoft.Compute/virtualMachineScaleSets/virtual-machine-scale-set-name"
},
"vmId": "02aab8a4-74ef-476e-8182-f6d2ba4166a6",
"vmScaleSetName": "crpteste9vflji9",
"vmSize": "Standard_A3",
"zone": ""
},
"network": {
"interface": [{
"ipv4": {
"ipAddress": [{
"privateIpAddress": "10.144.133.132",
"publicIpAddress": ""
}],
"subnet": [{
"address": "10.144.133.128",
"prefix": "26"
}]
},
"ipv6": {
"ipAddress": [
]
},
"macAddress": "0011AAFFBB22"
}]
}
}
Detalhamento do esquema:
Computação
Dados | Description | Versão introduzida |
---|---|---|
azEnvironment |
Ambiente do Azure onde a VM está sendo executada | 2018-10-01 |
additionalCapabilities.hibernationEnabled |
Identifica se a hibernação está habilitada na VM | 2021-11-01 |
customData |
Este recurso foi preterido e desativado no IMDS. Foi substituído por userData |
2019-02-01 |
evictionPolicy |
Define como uma VM spot será removida. | 2020-12-01 |
extendedLocation.type |
Tipo de local estendido da VM. | 2021-03-01 |
extendedLocation.name |
Nome do local estendido da VM | 2021-03-01 |
host.id |
Nome do host da VM. Observe que uma VM terá um host ou um hostGroup, mas não ambos. | 2021-11-15 |
hostGroup.id |
Nome do hostGroup da VM. Observe que uma VM terá um host ou um hostGroup, mas não ambos. | 2021-11-15 |
isHostCompatibilityLayerVm |
Identifica se a VM é executada na camada de compatibilidade do host | 2020-06-01 |
licenseType |
Tipo de licença para o Benefício Híbrido do Azure. Isso só está presente para VMs habilitadas para AHB | 2020-09-01 |
location |
Região do Azure em que a VM está sendo executada | 2017-04-02 |
name |
Nome da VM | 2017-04-02 |
offer |
Ofereça informações para a imagem da VM e só esteja presente para imagens implantadas a partir da galeria de imagens do Azure | 2017-04-02 |
osProfile.adminUsername |
Especifica o nome da conta de administrador | 2020-07-15 |
osProfile.computerName |
Especifica o nome do computador | 2020-07-15 |
osProfile.disablePasswordAuthentication |
Especifica se a autenticação de senha está desabilitada. Isso só está presente para VMs Linux | 01-10-2020 |
osType |
Linux ou Windows | 2017-04-02 |
physicalZone |
Zona física da VM | 2023-11-15 |
placementGroupId |
Grupo de posicionamento do seu conjunto de escalas | 2017-08-01 |
plan |
Plano contendo nome, produto e editor para uma VM se for uma Imagem do Azure Marketplace | 2018-04-02 |
platformUpdateDomain |
Atualizar domínio em que a VM está sendo executada | 2017-04-02 |
platformFaultDomain |
Domínio de falha em que a VM está sendo executada | 2017-04-02 |
platformSubFaultDomain |
Sub domínio de falha em que a VM está sendo executada, se aplicável. | 2021-10-01 |
priority |
Prioridade da VM. Consulte VMs spot para obter mais informações | 2020-12-01 |
provider |
Provedor da VM | 2018-10-01 |
publicKeys |
Coleção de chaves públicas atribuídas à VM e caminhos | 2018-04-02 |
publisher |
Editor da imagem da VM | 2017-04-02 |
resourceGroupName |
Grupo de recursos para sua máquina virtual | 2017-08-01 |
resourceId |
A ID totalmente qualificada do recurso | 2019-03-11 |
sku |
SKU específica para a imagem da VM | 2017-04-02 |
securityProfile.secureBootEnabled |
Identifica se a inicialização segura UEFI está habilitada na VM | 2020-06-01 |
securityProfile.virtualTpmEnabled |
Identifica se o TPM (Trusted Platform Module) virtual está habilitado na VM | 2020-06-01 |
securityProfile.encryptionAtHost |
Identifica se a Criptografia no Host está habilitada na VM | 2021-11-01 |
securityProfile.securityType |
Identifica se a VM é uma VM confiável ou uma VM confidencial | 2021-12-13 |
storageProfile |
Consulte Perfil de armazenamento abaixo | 2019-06-01 |
subscriptionId |
Subscrição do Azure para a Máquina Virtual | 2017-08-01 |
tags |
Tags para sua máquina virtual | 2017-08-01 |
tagsList |
Tags formatadas como uma matriz JSON para facilitar a análise programática | 2019-06-04 |
userData |
O conjunto de dados especificado quando a VM foi criada para uso durante ou após o provisionamento (codificado em Base64) | 2021-01-01 |
version |
Versão da imagem da VM | 2017-04-02 |
virtualMachineScaleSet.id |
ID do Conjunto de Escala de Máquina Virtual criado com orquestração flexível da qual a Máquina Virtual faz parte. Este campo não está disponível para Conjuntos de Escala de Máquina Virtual criados com orquestração uniforme. | 2021-03-01 |
vmId |
Identificador exclusivo para a VM. O blog referenciado serve apenas para VMs que têm SMBIOS < 2.6. Para VMs que têm SMBIOS >= 2.6, o UUID do DMI é exibido no formato little-endian, portanto, não há necessidade de alternar bytes. | 2017-04-02 |
vmScaleSetName |
Conjunto de Dimensionamento de Máquina Virtual Nome do seu conjunto de escalas | 2017-12-01 |
vmSize |
Tamanho da VM | 2017-04-02 |
zone |
Zona de disponibilidade da sua máquina virtual | 2017-12-01 |
† Esta versão ainda não está totalmente disponível e pode não ser suportada em todas as regiões.
Perfil de armazenamento
O perfil de armazenamento de uma VM é dividido em três categorias: referência de imagem, disco do sistema operacional e discos de dados, além de um objeto adicional para o disco temporário local.
O objeto de referência de imagem contém as seguintes informações sobre a imagem do sistema operacional, observe que uma imagem pode vir da plataforma, do mercado, da galeria da comunidade ou da galeria compartilhada direta, mas não de ambas:
Dados | Description | Versão introduzida |
---|---|---|
id |
ID do Recurso | 2019-06-01 |
offer |
Oferta da imagem da plataforma ou marketplace | 2019-06-01 |
publisher |
Editor da imagem da plataforma ou do mercado | 2019-06-01 |
sku |
Sku da imagem da plataforma ou do mercado | 2019-06-01 |
version |
Versão da imagem | 2019-06-01 |
communityGalleryImageId |
ID do recurso da imagem da comunidade, vazio caso contrário | 2023-07-01 |
sharedGalleryImageId |
ID do recurso ou imagem compartilhada direta, vazia caso contrário | 2023-07-01 |
exactVersion |
Versão da comunidade ou imagem partilhada direta | 2023-07-01 |
O objeto de disco do sistema operacional contém as seguintes informações sobre o disco do sistema operacional usado pela VM:
Dados | Description |
---|---|
caching |
Requisitos de cache |
createOption |
Informações sobre como a VM foi criada |
diffDiskSettings |
Configurações de disco efêmeras |
diskSizeGB |
Tamanho do disco em GB |
image |
Imagem do usuário de origem disco rígido virtual |
managedDisk |
Parâmetros de disco gerenciado |
name |
Nome do disco |
vhd |
Disco rígido virtual |
writeAcceleratorEnabled |
Se o writeAccelerator está ou não habilitado no disco |
A matriz de discos de dados contém uma lista de discos de dados anexados à VM. Cada objeto de disco de dados contém as seguintes informações:
Dados | Description | Versão introduzida |
---|---|---|
bytesPerSecondThrottle * |
Quota de leitura/escrita de disco em bytes | 2021-05-01 |
caching |
Requisitos de cache | 2019-06-01 |
createOption |
Informações sobre como a VM foi criada | 2019-06-01 |
diffDiskSettings |
Configurações de disco efêmeras | 2019-06-01 |
diskCapacityBytes * |
Tamanho do disco em bytes | 2021-05-01 |
diskSizeGB |
Tamanho do disco em GB | 2019-06-01 |
encryptionSettings |
Configurações de criptografia para o disco | 2019-06-01 |
image |
Imagem do usuário de origem disco rígido virtual | 2019-06-01 |
isSharedDisk * |
Identifica se o disco é compartilhado entre recursos | 2021-05-01 |
isUltraDisk |
Identifica se o disco de dados é um Ultra Disk | 2021-05-01 |
lun |
Número da unidade lógica do disco | 2019-06-01 |
managedDisk |
Parâmetros de disco gerenciado | 2019-06-01 |
name |
Nome do disco | 2019-06-01 |
opsPerSecondThrottle * |
Cota de leitura/gravação de disco em IOPS | 2021-05-01 |
osType |
Tipo de SO incluído no disco | 2019-06-01 |
vhd |
Disco rígido virtual | 2019-06-01 |
writeAcceleratorEnabled |
Se o writeAccelerator está ou não habilitado no disco | 2019-06-01 |
*Estes campos são preenchidos apenas para Ultra Disks; eles são cadeias de caracteres vazias de discos não-Ultra.
O blob de configurações de criptografia contém dados sobre como o disco é criptografado (se estiver criptografado):
Dados | Description | Versão introduzida |
---|---|---|
diskEncryptionKey.sourceVault.id |
A localização da chave de encriptação do disco | 2021-11-01 |
diskEncryptionKey.secretUrl |
A localização do segredo | 2021-11-01 |
keyEncryptionKey.sourceVault.id |
O local da chave de criptografia de chave | 2021-11-01 |
keyEncryptionKey.keyUrl |
A localização da chave | 2021-11-01 |
O objeto de disco de recurso contém o tamanho do Disco Temporário Local anexado à VM, se tiver um, em kilobytes. Se não houver nenhum disco temporário local para a VM, esse valor será 0.
Dados | Description | Versão introduzida |
---|---|---|
resourceDisk.size |
Tamanho do disco temporário local para a VM (em kB) | 2021-02-01 |
Rede
Dados | Description | Versão introduzida |
---|---|---|
ipv4.privateIpAddress |
Endereço IPv4 local da VM | 2017-04-02 |
ipv4.publicIpAddress |
Endereço IPv4 público da VM | 2017-04-02 |
subnet.address |
Endereço de sub-rede da VM | 2017-04-02 |
subnet.prefix |
Prefixo da sub-rede, exemplo 24 | 2017-04-02 |
ipv6.ipAddress |
Endereço IPv6 local da VM | 2017-04-02 |
macAddress |
Endereço mac da VM | 2017-04-02 |
Nota
Não é garantido que as nics retornadas pela chamada de rede estejam em ordem.
Obter dados do usuário
Ao criar uma nova VM, você pode especificar um conjunto de dados a serem usados durante ou após o provisionamento da VM e recuperá-los por meio do IMDS. Verifique a experiência de dados do usuário de ponta a ponta aqui.
Para configurar os dados do usuário, utilize o modelo de início rápido aqui. O exemplo abaixo mostra como recuperar esses dados por meio do IMDS. Este recurso é lançado com a versão 2021-01-01
e acima.
Nota
Aviso de segurança: O IMDS está aberto a todos os aplicativos na VM, dados confidenciais não devem ser colocados nos dados do usuário.
$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))
Exemplo 1: Rastreando VM em execução no Azure
Como um provedor de serviços, você pode precisar controlar o número de VMs executando seu software ou ter agentes que precisam rastrear a exclusividade da VM. Para obter uma ID exclusiva para uma VM, use o vmId
campo do Serviço de Metadados de Instância.
Pedir
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/vmId?api-version=2017-08-01&format=text"
Response
5c08b38e-4d57-4c23-ac45-aca61037f084
Amostra 2: Colocação de diferentes réplicas de dados
Para determinados cenários, o posicionamento de diferentes réplicas de dados é de suma importância. Por exemplo, o posicionamento da réplica do HDFS ou do contêiner por meio de um orquestrador pode exigir que você saiba o e platformUpdateDomain
a platformFaultDomain
VM está sendo executada.
Você também pode usar zonas de disponibilidade para as instâncias para tomar essas decisões.
Você pode consultar esses dados diretamente via IMDS.
Pedir
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/platformFaultDomain?api-version=2017-08-01&format=text"
Response
0
Exemplo 3: Obter tags de VM
As tags de VM são incluídas na API da instância em instance/compute/tags endpoint. As tags podem ter sido aplicadas à sua VM do Azure para organizá-las logicamente em uma taxonomia. As tags atribuídas a uma VM podem ser recuperadas usando a solicitação abaixo.
Pedir
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/tags?api-version=2017-08-01&format=text"
Response
Department:IT;ReferenceNumber:123456;TestStatus:Pending
O tags
campo é uma cadeia de caracteres com as tags delimitadas por ponto-e-vírgula. Essa saída pode ser um problema se ponto-e-vírgula forem usados nas próprias tags. Se um analisador for escrito para extrair programaticamente as tags, você deve confiar no tagsList
campo. O tagsList
campo é uma matriz JSON sem delimitadores e, consequentemente, mais fácil de analisar. As tagsList atribuídas a uma VM podem ser recuperadas usando a solicitação abaixo.
Pedir
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/tagsList?api-version=2019-06-04" | ConvertTo-Json -Depth 64
Response
{
"value": [
{
"name": "Department",
"value": "IT"
},
{
"name": "ReferenceNumber",
"value": "123456"
},
{
"name": "TestStatus",
"value": "Pending"
}
],
"Count": 3
}
Exemplo 4: Obter mais informações sobre a VM durante o caso de suporte
Como provedor de serviços, você pode receber uma chamada de suporte onde gostaria de saber mais informações sobre a VM. Pedir ao cliente para compartilhar os metadados de computação pode fornecer informações básicas para o profissional de suporte saber sobre o tipo de VM no Azure.
Pedir
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
Resposta
Nota
A resposta é uma cadeia de caracteres JSON. O exemplo de resposta a seguir é muito bem impresso para facilitar a leitura.
{
"azEnvironment": "AZUREPUBLICCLOUD",
"extendedLocation": {
"type": "edgeZone",
"name": "microsoftlosangeles"
},
"evictionPolicy": "",
"additionalCapabilities": {
"hibernationEnabled": "false"
},
"hostGroup": {
"id": "testHostGroupId"
},
"isHostCompatibilityLayerVm": "true",
"licenseType": "Windows_Client",
"location": "westus",
"name": "examplevmname",
"offer": "WindowsServer",
"osProfile": {
"adminUsername": "admin",
"computerName": "examplevmname",
"disablePasswordAuthentication": "true"
},
"osType": "Windows",
"placementGroupId": "f67c14ab-e92c-408c-ae2d-da15866ec79a",
"plan": {
"name": "planName",
"product": "planProduct",
"publisher": "planPublisher"
},
"platformFaultDomain": "36",
"platformUpdateDomain": "42",
"priority": "Regular",
"publicKeys": [{
"keyData": "ssh-rsa 0",
"path": "/home/user/.ssh/authorized_keys0"
},
{
"keyData": "ssh-rsa 1",
"path": "/home/user/.ssh/authorized_keys1"
}
],
"publisher": "RDFE-Test-Microsoft-Windows-Server-Group",
"physicalZone": "useast-AZ01",
"resourceGroupName": "macikgo-test-may-23",
"resourceId": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/virtualMachines/examplevmname",
"securityProfile": {
"secureBootEnabled": "true",
"virtualTpmEnabled": "false",
"encryptionAtHost": "true",
"securityType": "TrustedLaunch"
},
"sku": "2019-Datacenter",
"storageProfile": {
"dataDisks": [{
"bytesPerSecondThrottle": "979202048",
"caching": "None",
"createOption": "Empty",
"diskCapacityBytes": "274877906944",
"diskSizeGB": "1024",
"image": {
"uri": ""
},
"isSharedDisk": "false",
"isUltraDisk": "true",
"lun": "0",
"managedDisk": {
"id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/MicrosoftCompute/disks/exampledatadiskname",
"storageAccountType": "StandardSSD_LRS"
},
"name": "exampledatadiskname",
"opsPerSecondThrottle": "65280",
"vhd": {
"uri": ""
},
"writeAcceleratorEnabled": "false"
}],
"imageReference": {
"id": "",
"offer": "WindowsServer",
"publisher": "MicrosoftWindowsServer",
"sku": "2019-Datacenter",
"version": "latest",
"communityGalleryImageId": "/CommunityGalleries/testgallery/Images/1804Gen2/Versions/latest",
"sharedGalleryImageId": "/SharedGalleries/1P/Images/gen2/Versions/latest",
"exactVersion": "1.1686127202.30113"
},
"osDisk": {
"caching": "ReadWrite",
"createOption": "FromImage",
"diskSizeGB": "30",
"diffDiskSettings": {
"option": "Local"
},
"encryptionSettings": {
"enabled": "false",
"diskEncryptionKey": {
"sourceVault": {
"id": "/subscriptions/test-source-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
},
"secretUrl": "https://test-disk.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
},
"keyEncryptionKey": {
"sourceVault": {
"id": "/subscriptions/test-key-guid/resourceGroups/testrg/providers/Microsoft.KeyVault/vaults/test-kv"
},
"keyUrl": "https://test-key.vault.azure.net/secrets/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
}
},
"image": {
"uri": ""
},
"managedDisk": {
"id": "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/macikgo-test-may-23/providers/Microsoft.Compute/disks/exampleosdiskname",
"storageAccountType": "StandardSSD_LRS"
},
"name": "exampleosdiskname",
"osType": "Windows",
"vhd": {
"uri": ""
},
"writeAcceleratorEnabled": "false"
},
"resourceDisk": {
"size": "4096"
}
},
"subscriptionId": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"tags": "baz:bash;foo:bar",
"version": "15.05.22",
"virtualMachineScaleSet": {
"id": "/subscriptions/xxxxxxxx-xxxxx-xxx-xxx-xxxx/resourceGroups/resource-group-name/providers/Microsoft.Compute/virtualMachineScaleSets/virtual-machine-scale-set-name"
},
"vmId": "02aab8a4-74ef-476e-8182-f6d2ba4166a6",
"vmScaleSetName": "crpteste9vflji9",
"vmSize": "Standard_A3",
"zone": "3"
}
Exemplo 5: Obter o Ambiente do Azure onde a VM está sendo executada
O Azure tem várias nuvens soberanas como o Azure Government. Às vezes, você precisa do Ambiente do Azure para tomar algumas decisões de tempo de execução. O exemplo a seguir mostra como você pode obter esse comportamento.
Pedir
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/compute/azEnvironment?api-version=2018-10-01&format=text"
Response
AzurePublicCloud
A nuvem e os valores do ambiente do Azure estão listados aqui.
Cloud | Ambiente do Azure |
---|---|
Todas as regiões globais do Azure disponíveis em geral | AzurePublicCloud |
Azure Government | AzureUSGovernmentCloud |
Microsoft Azure operado pela 21Vianet | AzureChinaCloud |
Azure Alemanha | AzureGermanCloud |
Exemplo 6: Recuperar informações de rede
Pedir
Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http://169.254.169.254/metadata/instance/network?api-version=2017-08-01" | ConvertTo-Json -Depth 64
Response
{
"interface": [
{
"ipv4": {
"ipAddress": [
{
"privateIpAddress": "10.1.0.4",
"publicIpAddress": "X.X.X.X"
}
],
"subnet": [
{
"address": "10.1.0.0",
"prefix": "24"
}
]
},
"ipv6": {
"ipAddress": []
},
"macAddress": "000D3AF806EC"
}
]
}
Exemplo 7: Recuperar endereço IP público
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"
Nota
- Se você estiver procurando recuperar informações do IMDS para o endereço IP público do SKU padrão , consulte a API de metadados do balanceador de carga para obter mais informações.
Dados atestados
Obter dados atestados
O IMDS ajuda a fornecer garantias de que os dados fornecidos são provenientes do Azure. A Microsoft assina parte dessas informações, para que você possa confirmar que uma imagem no Azure Marketplace é a que você está executando no Azure.
GET /metadata/attested/document
Parâmetros
Nome | Obrigatório/Opcional | Description |
---|---|---|
api-version |
Obrigatório | A versão usada para atender a solicitação. |
nonce |
Opcional | Uma cadeia de caracteres de 10 dígitos que serve como um nonce criptográfico. Se nenhum valor for fornecido, o IMDS usará o carimbo de data/hora UTC atual. |
Response
{
"encoding":"pkcs7",
"signature":"MIIEEgYJKoZIhvcNAQcCoIIEAzCCA/8CAQExDzANBgkqhkiG9w0BAQsFADCBugYJKoZIhvcNAQcBoIGsBIGpeyJub25jZSI6IjEyMzQ1NjY3NjYiLCJwbGFuIjp7Im5hbWUiOiIiLCJwcm9kdWN0IjoiIiwicHVibGlzaGVyIjoiIn0sInRpbWVTdGFtcCI6eyJjcmVhdGVkT24iOiIxMS8yMC8xOCAyMjowNzozOSAtMDAwMCIsImV4cGlyZXNPbiI6IjExLzIwLzE4IDIyOjA4OjI0IC0wMDAwIn0sInZtSWQiOiIifaCCAj8wggI7MIIBpKADAgECAhBnxW5Kh8dslEBA0E2mIBJ0MA0GCSqGSIb3DQEBBAUAMCsxKTAnBgNVBAMTIHRlc3RzdWJkb21haW4ubWV0YWRhdGEuYXp1cmUuY29tMB4XDTE4MTEyMDIxNTc1N1oXDTE4MTIyMDIxNTc1NlowKzEpMCcGA1UEAxMgdGVzdHN1YmRvbWFpbi5tZXRhZGF0YS5henVyZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAML/tBo86ENWPzmXZ0kPkX5dY5QZ150mA8lommszE71x2sCLonzv4/UWk4H+jMMWRRwIea2CuQ5RhdWAHvKq6if4okKNt66fxm+YTVz9z0CTfCLmLT+nsdfOAsG1xZppEapC0Cd9vD6NCKyE8aYI1pliaeOnFjG0WvMY04uWz2MdAgMBAAGjYDBeMFwGA1UdAQRVMFOAENnYkHLa04Ut4Mpt7TkJFfyhLTArMSkwJwYDVQQDEyB0ZXN0c3ViZG9tYWluLm1ldGFkYXRhLmF6dXJlLmNvbYIQZ8VuSofHbJRAQNBNpiASdDANBgkqhkiG9w0BAQQFAAOBgQCLSM6aX5Bs1KHCJp4VQtxZPzXF71rVKCocHy3N9PTJQ9Fpnd+bYw2vSpQHg/AiG82WuDFpPReJvr7Pa938mZqW9HUOGjQKK2FYDTg6fXD8pkPdyghlX5boGWAMMrf7bFkup+lsT+n2tRw2wbNknO1tQ0wICtqy2VqzWwLi45RBwTGB6DCB5QIBATA/MCsxKTAnBgNVBAMTIHRlc3RzdWJkb21haW4ubWV0YWRhdGEuYXp1cmUuY29tAhBnxW5Kh8dslEBA0E2mIBJ0MA0GCSqGSIb3DQEBCwUAMA0GCSqGSIb3DQEBAQUABIGAld1BM/yYIqqv8SDE4kjQo3Ul/IKAVR8ETKcve5BAdGSNkTUooUGVniTXeuvDj5NkmazOaKZp9fEtByqqPOyw/nlXaZgOO44HDGiPUJ90xVYmfeK6p9RpJBu6kiKhnnYTelUk5u75phe5ZbMZfBhuPhXmYAdjc7Nmw97nx8NnprQ="
}
O blob de assinatura é uma versão do documento assinada pelo pkcs7. Ele contém o certificado usado para assinatura junto com certos detalhes específicos da VM.
Para VMs criadas usando o Gerenciador de Recursos do Azure, o documento inclui vmId
, sku
, nonce
, subscriptionId
, para timeStamp
criação e expiração do documento e as informações do plano sobre a imagem. As informações do plano só são preenchidas para imagens do Azure Marketplace.
Para VMs criadas usando o modelo de implantação clássico, apenas o vmId
e subscriptionId
tem a garantia de ser preenchido. Você pode extrair o certificado da resposta e usá-lo para confirmar se a resposta é válida e vem do Azure.
O documento descodificado contém os seguintes campos:
Dados | Description | Versão introduzida |
---|---|---|
licenseType |
Tipo de licença para o Benefício Híbrido do Azure. Isso só está presente para VMs habilitadas para AHB. | 2020-09-01 |
nonce |
Uma cadeia de caracteres que pode ser fornecida opcionalmente com a solicitação. Se não nonce tiver sido fornecido, o carimbo de data/hora universal coordenado atual será usado. |
2018-10-01 |
plan |
O plano de Imagem do Azure Marketplace. Contém o ID do plano (nome), a imagem ou oferta do produto (produto) e o ID do editor (editor). | 2018-10-01 |
timestamp.createdOn |
O carimbo de data/hora UTC de quando o documento assinado foi criado | 2018-20-01 |
timestamp.expiresOn |
O carimbo de data/hora UTC para quando o documento assinado expira | 2018-10-01 |
vmId |
Identificador exclusivo para a VM | 2018-10-01 |
subscriptionId |
Subscrição do Azure para a Máquina Virtual | 2019-04-30 |
sku |
SKU específica para a imagem da VM (correlacionada à compute/sku propriedade do ponto de extremidade Instance Metadata [/metadata/instance ]) |
2019-11-01 |
Nota
Para VMs clássicas (que não são do Azure Resource Manager), apenas o vmId tem a garantia de ser preenchido.
Exemplo de documento:
{
"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"
}
Guia de validação de assinatura
Ao validar a assinatura, você deve confirmar se ela foi criada com um certificado do Azure. Isso é feito validando o certificado SAN (Subject Alternative Name, nome alternativo da entidade).
Exemplo de SAN DNS Name=eastus.metadata.azure.com, DNS Name=metadata.azure.com
Nota
O domínio para a nuvem pública e cada nuvem soberana será diferente.
Cloud | Domínio em SAN |
---|---|
Todas as regiões globais do Azure disponíveis em geral | *.metadata.azure.com |
Azure Government | *.metadata.azure.us |
Azure operado pela 21Vianet | *.metadata.azure.cn |
Azure Alemanha | *.metadata.microsoftazure.de |
Nota
Os certificados podem não ter uma correspondência exata para o domínio. Por esse motivo, a validação da certificação deve aceitar qualquer subdomínio (por exemplo, em regiões de disponibilidade geral de nuvem pública aceitam *.metadata.azure.com
).
Não recomendamos a fixação de certificados para certificados intermediários. Para obter mais orientações, consulte Fixação de certificados - Fixação de certificados e serviços do Azure. Observe que o Serviço de Metadados de Instância do Azure NÃO oferecerá notificações para futuras alterações da Autoridade de Certificação. Em vez disso, você deve seguir o artigo centralizado de detalhes da Autoridade de Certificação do Azure para todas as atualizações futuras.
Exemplo 1: Validar se a VM está em execução no Azure
Os fornecedores no Azure Marketplace querem garantir que o seu software está licenciado para ser executado apenas no Azure. Se alguém copiar o VHD para um ambiente local, o fornecedor precisará ser capaz de detetar isso. Por meio do IMDS, esses fornecedores podem obter dados assinados que garantem resposta apenas do Azure.
Nota
Este exemplo requer que o utilitário jq seja instalado.
Validação
# 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)
Verifique se a assinatura é do Microsoft Azure e verifique se há erros na cadeia de certificados.
# 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
O nonce
no documento assinado pode ser comparado se você forneceu um nonce
parâmetro na solicitação inicial.
Identidade gerida
Uma identidade gerenciada, atribuída pelo sistema, pode ser habilitada na VM. Você também pode atribuir uma ou mais identidades gerenciadas atribuídas pelo usuário à VM. Em seguida, você pode solicitar tokens para identidades gerenciadas do IMDS. Use esses tokens para autenticar com outros serviços do Azure, como o Azure Key Vault.
Para obter etapas detalhadas para habilitar esse recurso, consulte Adquirir um token de acesso.
Metadados do balanceador de carga
Quando você coloca instâncias de máquina virtual ou conjunto de máquinas virtuais atrás de um Balanceador de Carga Padrão do Azure, pode usar o IMDS para recuperar metadados relacionados ao balanceador de carga e às instâncias. Para obter mais informações, consulte Recuperar informações do balanceador de carga.
Eventos agendados
Você pode obter o status dos eventos agendados usando o IMDS. Em seguida, o usuário pode especificar um conjunto de ações a serem executadas nesses eventos. Para obter mais informações, consulte Eventos agendados para Linux ou Eventos agendados para Windows.
Código de exemplo em diferentes idiomas
A tabela a seguir lista exemplos de chamada de IMDS usando idiomas diferentes dentro da VM:
Erros e depuração
Se houver um elemento de dados não encontrado ou uma solicitação malformada, o Serviço de Metadados de Instância retornará erros HTTP padrão. Por exemplo:
Código de estado HTTP | Razão |
---|---|
200 OK |
O pedido foi bem-sucedido. |
400 Bad Request |
Cabeçalho ausente Metadata: true ou parâmetro format=json ausente ao consultar um nó folha |
404 Not Found |
O elemento solicitado não existe |
405 Method Not Allowed |
O método HTTP (verbo) não é suportado no ponto de extremidade. |
410 Gone |
Tente novamente depois de algum tempo por um máximo de 70 segundos |
429 Too Many Requests |
Os limites de taxa de API foram excedidos |
500 Service Error |
Tente novamente depois de algum tempo |
Perguntas mais frequentes
Estou recebendo o erro
400 Bad Request, Required metadata header not specified
. Qual é o significado disto?- O IMDS requer que o cabeçalho
Metadata: true
seja passado na solicitação. Passar esse cabeçalho na chamada REST permite o acesso ao IMDS.
- O IMDS requer que o cabeçalho
Por que não estou obtendo informações de computação para minha VM?
- Atualmente, o IMDS suporta apenas instâncias criadas com o Azure Resource Manager.
Criei minha VM por meio do Azure Resource Manager há algum tempo. Por que não estou vendo informações de metadados de computação?
- Se você criou sua VM após setembro de 2016, adicione uma tag para começar a ver metadados de computação. Se você criou sua VM antes de setembro de 2016, adicione ou remova extensões ou discos de dados à instância da VM para atualizar metadados.
Os dados do usuário são iguais aos dados personalizados?
- Os dados do usuário oferecem a funcionalidade semelhante aos dados personalizados, permitindo que você passe seus próprios metadados para a instância da VM. A diferença é que os dados do usuário são recuperados por meio do IMDS e são persistentes durante todo o tempo de vida da instância da VM. O recurso de dados personalizados existente continuará a funcionar conforme descrito neste artigo. No entanto, você só pode obter dados personalizados através da pasta do sistema local, não através do IMDS.
Por que não estou vendo todos os dados preenchidos para uma nova versão?
- Se você criou sua VM após setembro de 2016, adicione uma tag para começar a ver metadados de computação. Se você criou sua VM antes de setembro de 2016, adicione ou remova extensões ou discos de dados à instância da VM para atualizar metadados.
Por que estou recebendo o erro
500 Internal Server Error
ou410 Resource Gone
?- Repita o pedido. Para obter mais informações, consulte Tratamento de falhas transitórias. Se o problema persistir, crie um problema de suporte no portal do Azure para a VM.
Isso funcionaria para instâncias de conjunto de escala?
- Sim, o IMDS está disponível para instâncias de conjunto de escala.
Atualizei minhas tags em meus conjuntos de escala, mas elas não aparecem nas instâncias (ao contrário das VMs de instância única). Estou fazendo algo errado?
- Atualmente, as tags para conjuntos de escala só são exibidas para a VM em uma reinicialização, recriação de imagem ou alteração de disco na instância.
Por que não estou vendo as informações de SKU da minha VM em
instance/compute
detalhes?- Para imagens personalizadas criadas a partir do Azure Marketplace, a plataforma Azure não retém as informações de SKU para a imagem personalizada e os detalhes para quaisquer VMs criadas a partir da imagem personalizada. Isso ocorre por design e, portanto, não aparece nos detalhes da VM
instance/compute
.
- Para imagens personalizadas criadas a partir do Azure Marketplace, a plataforma Azure não retém as informações de SKU para a imagem personalizada e os detalhes para quaisquer VMs criadas a partir da imagem personalizada. Isso ocorre por design e, portanto, não aparece nos detalhes da VM
Porque é que o meu pedido atingiu o tempo limite (ou não conseguiu ligar) para a minha chamada para o serviço?
As chamadas de metadados devem ser feitas a partir do endereço IP primário atribuído à placa de rede primária da VM. Além disso, se você alterou suas rotas, deve haver uma rota para o endereço 169.254.169.254/32 na tabela de roteamento local da VM.
Despeje sua tabela de roteamento local e procure a entrada IMDS. Por exemplo:
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) ...
Verifique se existe uma rota para
169.254.169.254
o , e observe a interface de rede correspondente (por exemplo,172.16.69.7
).Despeje a configuração da interface e encontre a interface que corresponde à referenciada na tabela de roteamento, observando o endereço MAC (físico).
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) ...
Confirme se a interface corresponde à NIC primária e ao IP primário da VM. Você pode encontrar a NIC e o IP primários examinando a configuração de rede no portal do Azure ou pesquisando-a com a CLI do Azure. Observe os IPs privados (e o endereço MAC se você estiver usando a CLI). Aqui está um exemplo de CLI do 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
Se eles não corresponderem, atualize a tabela de roteamento para que a NIC e o IP primários sejam direcionados.
Clustering de failover no Windows Server
Quando você está consultando o IMDS com clustering de failover, às vezes é necessário adicionar uma rota à tabela de roteamento. Saiba como:
Abra uma linha de comandos com privilégios de administrador.
Execute o seguinte comando e anote o endereço da Interface para Destino de Rede (
0.0.0.0
) na Tabela de Rotas IPv4.
route print
Nota
A saída de exemplo a seguir é de uma VM do Windows Server com cluster de failover habilitado. Para simplificar, a saída contém apenas a Tabela de Rotas 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
Execute o comando a seguir e use o endereço da Interface para Destino de Rede (
0.0.0.0
), que é (10.0.1.10
) neste exemplo.route add 169.254.169.254/32 10.0.1.10 metric 1 -p
Suporte
Se não conseguir obter uma resposta de metadados após várias tentativas, pode criar um problema de suporte no portal do Azure.
Comentários sobre o produto
Você pode fornecer feedback e ideias de produtos para nosso canal de feedback do usuário em Serviço de Metadados de Instância de Máquinas Virtuais > aqui