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:

Idioma Exemplo
Bash https://github.com/Microsoft/azureimds/blob/master/IMDSSample.sh
C# https://github.com/Microsoft/azureimds/blob/master/IMDSSample.cs
Ir 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

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.
  • 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 ou 410 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 .
  • 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.

      1. 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) ...
        
      2. Verifique se existe uma rota para 169.254.169.254o , e observe a interface de rede correspondente (por exemplo, 172.16.69.7).

      3. 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) ...
        
      4. 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
        
      5. 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:

      1. Abra uma linha de comandos com privilégios de administrador.

      2. 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

Próximos passos