Servicio de metadatos de instancia de Azure

Se aplica a: ✔️ Máquinas virtuales Linux ✔️ Máquinas virtuales Windows ✔️ Conjuntos de escalado flexibles

Azure Instance Metadata Service (IMDS) le proporciona información sobre las instancias de máquina virtual que se ejecutan actualmente. Puede usarlo para administrar y configurar las máquinas virtuales. Esta información incluye las SKU, almacenamiento, configuraciones de red y próximos eventos de mantenimiento. Para ver una lista completa de los datos disponibles, consulte el resumen de categorías de los puntos de conexión.

IMDS está disponible para ejecutar instancias de máquinas virtuales (VM) e instancias de conjunto de escalado de máquinas virtuales. Todos los puntos de conexión admiten máquinas virtuales creadas y administradas mediante Azure Resource Manager. Solo la categoría de atestiguados y la parte de red de la categoría de instancias admiten las máquinas virtuales creadas mediante el modelo de implementación clásica. El punto de conexión de atestiguados solo lo hace de forma limitada.

IMDS es una API REST disponible en una dirección IP conocida y no enrutable (169.254.169.254). Solo puede acceder a ella desde la máquina virtual. La comunicación entre la VM e IMDS nunca sale del host. Puede sugerir a sus clientes HTTP que omitan los servidores proxy web dentro de la VM al consultar a IMDS y que consideren que 169.254.169.254 es lo mismo que 168.63.129.16.

Uso

Acceso a Azure Instance Metadata Service

Para obtener acceso a IMDS, cree una VM desde Azure Resource Manager o Azure Portal y siga los ejemplos que tiene a continuación. Para obtener más ejemplos, consulte los Ejemplos de Azure Instance Metadata.

Puede usar este código de ejemplo para recuperar todos los metadatos de una instancia. Para acceder a un origen de datos específico, consulte Categorías de punto de conexión, con información general de todas las características disponibles.

Solicitud

Importante

En este ejemplo se omiten los servidores proxy. Debe omitir los servidores proxy al consultar IMDS. Consulte Servidores proxy para más información.

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 requiere PowerShell V6 o posterior. Consulte nuestro repositorio para acceder a ejemplos con versiones de PowerShell anteriores.

Respuesta

Nota

La respuesta es una cadena JSON. La respuesta de ejemplo siguiente se ha impreso correctamente para mejorar la legibilidad.

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

Seguridad y autenticación

Instance Metadata Service solo es accesible desde la instancia de máquina virtual en ejecución en una dirección IP no enrutable. Las máquinas virtuales solo pueden interactuar con sus propios metadatos o funcionalidades. La API es solo HTTP y nunca sale del host.

Para asegurarse de que las solicitudes se destinan directamente a IMDS y evitar la redirección imprevista o no deseada de las solicitudes, estas:

  • Deben contener el encabezado Metadata: true.
  • No deben contener un encabezado X-Forwarded-For.

El servicio rechazará cualquier solicitud que no cumpla ambos requisitos.

Importante

IMDS no es un canal para datos confidenciales. La API no está autenticada y está abierta a todos los procesos de la máquina virtual. La información expuesta a través de este servicio se debe considerar como información compartida con todas las aplicaciones que se ejecutan dentro de la máquina virtual.

Si no es necesario que todos los procesos de la máquina virtual accedan al punto de conexión de IMDS, puede establecer reglas de firewall locales para limitar el acceso. Por ejemplo, si solo un servicio de sistema conocido necesita acceder al servicio de metadatos de instancia, puede establecer una regla de firewall en el punto de conexión de IMDS permitiendo solo el acceso a los procesos específicos o denegando el acceso para el resto de los procesos.

Servidores proxy

IMDS no está diseñado para el uso detrás de un proxy y no se admite. La mayoría de los clientes HTTP proporcionan una opción para deshabilitar los servidores proxy en las solicitudes; esta funcionalidad se debe usar en la comunicación con IMDS. Consulte la documentación del cliente para información detallada.

Importante

Aunque no tenga configuración de proxy en su entorno, debe invalidar la configuración de proxy de cliente predeterminada. Las configuraciones de proxy se pueden detectar automáticamente y, si no se omite este tipo de configuración, quedará expuesto a abusos si la configuración de la máquina se cambia en el futuro.

Limitación de frecuencia

En general, las solicitudes a IMDS se limitan a cinco por segundo (por máquina virtual). Las solicitudes que superen este umbral se rechazarán con respuestas 429. Las solicitudes a la categoría Identidad administrada se limitan a veinte por segundo y cinco simultáneas (por máquina virtual).

Verbos HTTP

Actualmente se admiten los verbos HTTP siguientes:

Verbo Descripción
GET Recupera el recurso solicitado

Parámetros

Los puntos de conexión pueden admitir parámetros obligatorios u opcionales. Consulte Esquema y la documentación del punto de conexión en cuestión para más información.

Parámetros de consulta

Los puntos de conexión de IMDS admiten parámetros de cadena de consulta HTTP. Por ejemplo:

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

Especifica los parámetros:

Nombre Value
api-version 2021-01-01
format json

Se rechazarán las solicitudes con nombres de parámetro de consulta duplicados.

Parámetros de ruta

En algunos puntos de conexión que devuelven blobs JSON más grandes, se admite anexar parámetros de ruta al punto de conexión de solicitud para filtrar hasta un subconjunto de la respuesta:

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

Los parámetros corresponden a los índices o claves que se utilizarían para recorrer el objeto JSON con el que interactuara con una representación analizada.

Por ejemplo, /metadata/instance devuelve el 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"
            },
            ...
        ]
    }
}

Si queremos filtrar la respuesta solo hasta la propiedad de proceso, enviaríamos la solicitud:

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

Del mismo modo, si queremos filtrar hasta una propiedad anidada o un elemento de matriz específico, seguiremos anexando claves:

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

filtraría hasta el primer elemento de la propiedad Network.interface y devolvería:

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

Nota

Al filtrar hasta un nodo hoja, format=json no funciona. Para estas consultas, format=text debe especificarse explícitamente ya que el formato predeterminado es JSON.

Schema

Formato de datos

De forma predeterminada, IMDS devuelve datos en formato JSON (Content-Type: application/json). Sin embargo, los puntos de conexión que admiten el filtrado de respuestas (consulte Parámetros de ruta) también admiten el formato text.

Para acceder a un formato de respuesta que no sea el predeterminado, especifique el formato solicitado como un parámetro de cadena de consulta en la solicitud. Por ejemplo:

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

En las respuestas JSON, todos los primitivos serán del tipo string y los valores que falten o que no sean aplicables se incluirán siempre, pero se establecerán en una cadena vacía.

Control de versiones

IMDS tiene varias versiones y es obligatorio especificar la versión de la API en la solicitud HTTP. La única excepción a este requisito es el punto de conexión de versiones, que se puede usar para recuperar dinámicamente las versiones de API disponibles.

A medida que se agreguen versiones más recientes, todavía se podrá acceder a las versiones anteriores por motivos de compatibilidad si los scripts tienen dependencias en formatos de datos específicos.

Cuando no especifique la versión, obtendrá un error con una lista de las versiones admitidas más recientes.

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

Versiones de API admitidas

Nota:

La versión 2023-07-01 todavía se está implementando, es posible que no esté disponible en algunas regiones.

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

Hay una definición completa de Swagger para IMDS disponible en https://github.com/Azure/azure-rest-api-specs/blob/main/specification/imds/data-plane/readme.md.

Disponibilidad regional

El servicio está disponible con carácter general en todas las nubes de Azure.

Punto de conexión raíz

El punto de conexión raíz es http://169.254.169.254/metadata.

Categorías de punto de conexión

La API de IMDS contiene varias categorías de punto de conexión que representan distintos orígenes de datos, cada uno de los cuales contiene uno o varios puntos de conexión. Consulte las categorías para más información.

Raíz de la categoría Descripción Versión introducida
/metadata/attested Consulte Datos atestiguados 2018-10-01
/metadata/identity Consulte Identidad administrada mediante IMDS. 2018-02-01
/metadata/instance Consulte Metadatos de instancia. 2017-04-02
/metadata/loadbalancer Consulte Recuperación de metadatos de Load Balancer a través de IMDS. 2020-10-01
/metadata/scheduledevents Consulte Eventos programados mediante IMDS. 2017-08-01
/metadata/versions Consulte Versiones. N/D

Versiones

Enumeración de las versiones de API

Devuelve el conjunto de versiones de API admitidas.

GET /metadata/versions

Parámetros

Ninguno (este punto de conexión no tiene versión).

Response

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

Metadatos de instancia

Obtención de los metadatos de una máquina virtual

Expone los metadatos importantes de las instancias de máquina virtual, como el proceso, la red y el almacenamiento.

GET /metadata/instance

Parámetros

Nombre Obligatorio/opcional Descripción
api-version Obligatorio Versión usada para atender la solicitud.
format Opcional* Formato de la respuesta (json o text). *Nota: Puede ser necesario al usar parámetros de solicitud.

Este punto de conexión admite el filtrado de respuestas mediante parámetros de ruta.

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

Desglose del esquema:

Proceso

data Descripción Versión introducida
azEnvironment Entorno de Azure donde se está ejecutando la máquina virtual 2018-10-01
additionalCapabilities.hibernationEnabled Identifica si la hibernación está habilitada en la máquina virtual. 2021-11-01
customData Esta característica está en desuso y deshabilitada en IMDS. Se ha reemplazado por userData 01-02-2019
evictionPolicy Establece cómo se expulsará una máquina virtual de acceso puntual. 2020-12-01
extendedLocation.type Tipo de la ubicación extendida de la máquina virtual 2021-03-01
extendedLocation.name Nombre de la ubicación extendida de la máquina virtual 2021-03-01
host.id Nombre del host de la máquina virtual. Tenga en cuenta que una máquina virtual tendrá un host o un hostGroup, pero no ambos. 15-11-2021
hostGroup.id Nombre del hostGroup de la máquina virtual. Tenga en cuenta que una máquina virtual tendrá un host o un hostGroup, pero no ambos. 15-11-2021
isHostCompatibilityLayerVm Identifica si la máquina virtual se ejecuta en el nivel de compatibilidad del host. 2020-06-01
licenseType Tipo de licencia para la Ventaja híbrida de Azure. Esta opción solo está presente en las máquinas virtuales habilitadas para Ventaja híbrida de Azure. 01-09-2020
location La región de Azure donde se ejecuta la máquina virtual 2017-04-02
name Nombre de la máquina virtual 2017-04-02
offer Ofrece información de la imagen de la máquina virtual y solo está presente para imágenes implementadas desde la galería de imágenes de Azure. 2017-04-02
osProfile.adminUsername Especifica el nombre de la cuenta de administrador. 2020-07-15
osProfile.computerName Especifica el nombre del equipo. 2020-07-15
osProfile.disablePasswordAuthentication Especifica si se deshabilita la autenticación de contraseña. Esta opción solo está presente en las máquinas virtuales Linux. 2020-10-01
osType Linux o Windows 2017-04-02
placementGroupId Grupo de selección de ubicación de su conjunto de escalado de máquinas virtuales. 2017-08-01
plan Plan que contiene el nombre, el producto y el editor de una máquina virtual si es una imagen de Azure Marketplace 2018-04-02
platformUpdateDomain El dominio de actualización en que se ejecuta la máquina virtual. 2017-04-02
platformFaultDomain El dominio de error en que se ejecuta la máquina virtual. 2017-04-02
platformSubFaultDomain Dominio de error secundario en el que se ejecuta la máquina virtual, si procede. 01-10-2021
priority Prioridad de la máquina virtual. Consulte Máquinas virtuales de acceso puntual para más información 2020-12-01
provider Proveedor de la máquina virtual 2018-10-01
publicKeys Colección de claves públicas asignada a la máquina virtual y rutas de acceso 2018-04-02
publisher Publicador de la imagen de VM 2017-04-02
resourceGroupName Grupo de recursos para su máquina virtual 2017-08-01
resourceId El identificador completo del recurso 2019-03-11
sku SKU específica de la imagen de VM 2017-04-02
securityProfile.secureBootEnabled Identifica si el arranque seguro UEFI está habilitado en la máquina virtual. 2020-06-01
securityProfile.virtualTpmEnabled Identifica si el Módulo de plataforma segura (TPM) virtual está habilitado en la máquina virtual. 2020-06-01
securityProfile.encryptionAtHost Identifica si el Cifrado en el host está habilitado en la máquina virtual. 2021-11-01
securityProfile.securityType Identifica si la máquina virtual es una Máquina virtual de confianza o una Máquina virtual confidencial. 2021-12-13
storageProfile Consulte el perfil de almacenamiento a continuación. 2019-06-01
subscriptionId Suscripción de Azure para la máquina virtual 2017-08-01
tags Etiquetas para su máquina virtual 2017-08-01
tagsList Etiquetas con formato de matriz de JSON para facilitar el análisis mediante programación 2019-06-04
userData Conjunto de datos especificado cuando se creó la máquina virtual para su uso durante o después del aprovisionamiento (codificado en Base64) 01-01-2021
version Versión de la imagen de máquina virtual 2017-04-02
virtualMachineScaleSet.id Identificador del conjunto de escalado de máquinas virtuales creado con orquestación flexible del que forma parte la máquina virtual. Este campo no está disponible para los conjuntos de escalado de máquinas virtuales creados con orquestación uniforme. 2021-03-01
vmId Identificador único para la VM. El blog al que se hace referencia solo se adapta a las máquinas virtuales que tienen SMBIOS < 2.6. En el caso de las máquinas virtuales que tienen SMBIOS >= 2.6, el UUID de DMI se muestra en formato little-endian, por lo que no es necesario cambiar de bytes. 2017-04-02
vmScaleSetName Nombre del conjunto de escalado de máquinas virtuales del conjunto de escalado 2017-12-01
vmSize Tamaño de VM 2017-04-02
zone Zona de disponibilidad de la máquina virtual 2017-12-01

† Esta versión aún no está totalmente disponible y es posible que no sea compatible en todas las regiones.

Perfil de almacenamiento

El perfil de almacenamiento de una máquina virtual se divide en tres categorías: referencia de imagen, disco del sistema operativo y discos de datos, además de un objeto adicional para el disco temporal local.

El objeto de referencia de imagen contiene la siguiente información sobre la imagen del sistema operativo, tenga en cuenta que una imagen podría provenir de la plataforma, marketplace, galería de comunidad o galería compartida directa, pero no ambas:

data Descripción Versión introducida
id Identificador del recurso 2019-06-01
offer Oferta de la plataforma o imagen de Marketplace 2019-06-01
publisher Publicador de la plataforma o imagen de Marketplace 2019-06-01
sku SKU de la plataforma o imagen de Marketplace 2019-06-01
version Versión de la imagen 2019-06-01
communityGalleryImageId Identificador de recurso de la imagen de la comunidad, en caso contrario, vacío 2023-07-01
sharedGalleryImageId Identificador de recurso o imagen compartida directa; en caso contrario, vacío 2023-07-01
exactVersion Versión de la comunidad o imagen compartida directa 2023-07-01

El objeto de disco del sistema operativo contiene la información siguiente sobre el disco del sistema operativo que usa la máquina virtual:

data Descripción
caching Requisitos de almacenamiento en caché
createOption Información sobre cómo se ha creado la máquina virtual
diffDiskSettings Configuración de discos efímeros
diskSizeGB Tamaño del disco en GB
image Disco duro virtual de la imagen de usuario de origen
managedDisk Parámetros de disco administrado
name Nombre del disco
vhd Disco duro virtual
writeAcceleratorEnabled Si writeAccelerator está habilitado o no en el disco

La matriz de discos de datos contiene una lista de discos de datos conectados a la máquina virtual. Cada objeto de disco de datos contiene la información siguiente:

data Descripción Versión introducida
bytesPerSecondThrottle* Cuota de lectura/escritura de disco en bytes 2021-05-01
caching Requisitos de almacenamiento en caché 2019-06-01
createOption Información sobre cómo se ha creado la máquina virtual 2019-06-01
diffDiskSettings Configuración de discos efímeros 2019-06-01
diskCapacityBytes* Tamaño del disco en bytes 2021-05-01
diskSizeGB Tamaño del disco en GB 2019-06-01
encryptionSettings Configuración de cifrado para el disco 2019-06-01
image Disco duro virtual de la imagen de usuario de origen 2019-06-01
isSharedDisk* Identifica si el disco se comparte entre los recursos 2021-05-01
isUltraDisk Identifica si el disco de datos es un disco Ultra 2021-05-01
lun Número de unidad lógica del disco 2019-06-01
managedDisk Parámetros de disco administrado 2019-06-01
name Nombre del disco 2019-06-01
opsPerSecondThrottle* Cuota de lectura/escritura de disco en IOPS 2021-05-01
osType Tipo de sistema operativo incluido en el disco 2019-06-01
vhd Disco duro virtual 2019-06-01
writeAcceleratorEnabled Si writeAccelerator está habilitado o no en el disco 2019-06-01

*Estos campos solo se rellenan para discos Ultra; son cadenas vacías de discos no Ultra.

El blob de configuración de cifrado contiene datos sobre cómo se cifra el disco (en caso de estarlo):

data Descripción Versión introducida
diskEncryptionKey.sourceVault.id Ubicación de la clave de cifrado de disco 2021-11-01
diskEncryptionKey.secretUrl Ubicación del secreto 2021-11-01
keyEncryptionKey.sourceVault.id Ubicación de la clave de cifrado de claves 2021-11-01
keyEncryptionKey.keyUrl Ubicación de la clave 2021-11-01

El objeto del disco de recursos contiene el tamaño del disco temporal local asociado a la máquina virtual, si es que tiene uno, en kilobytes. Si no hay ningún disco temporal local para la máquina virtual, este valor es 0.

data Descripción Versión introducida
resourceDisk.size Tamaño del disco temporal local para la máquina virtual (en KB) 2021-02-01

Network

data Descripción Versión introducida
ipv4.privateIpAddress Dirección IPv4 local de la máquina virtual 2017-04-02
ipv4.publicIpAddress Dirección IPv4 pública de la máquina virtual 2017-04-02
subnet.address Dirección de subred de la máquina virtual 2017-04-02
subnet.prefix Prefijo de la subred, ejemplo, 24 2017-04-02
ipv6.ipAddress Dirección IPv6 local de la máquina virtual 2017-04-02
macAddress Dirección de MAC de la VM 2017-04-02

Nota

No se garantiza que las NIC devueltas por la llamada de red estén en orden.

Obtención de los datos del usuario

Al crear una nueva máquina virtual, puede especificar un conjunto de datos que se usarán durante o después del aprovisionamiento de la máquina virtual y recuperarlos a través de IMDS. Compruebe la experiencia de datos del usuario final aquí.

Para configurar los datos de usuario, use la plantilla de inicio rápido aquí. En el ejemplo siguiente se muestra cómo recuperar estos datos a través de IMDS. Esta característica se publica con la versión 2021-01-01 y versiones posteriores.

Nota

Aviso de seguridad: IMDS está abierto a todas las aplicaciones de la máquina virtual; no se deben colocar datos confidenciales en los datos de usuario.

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

Muestra 1: Seguimiento de una máquina virtual que se ejecuta en Azure

Como proveedor de servicios, es posible que necesite hacer seguimiento de la cantidad de máquinas virtuales que ejecutan su software o que tenga agentes que deban hacer seguimiento de la unicidad de la máquina virtual. Para poder obtener un identificador único para una máquina virtual, use el campo vmId del servicio de metadatos de instancia.

Solicitud

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"

Respuesta

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

Ejemplo 2: ubicación de diferentes réplicas de datos

Para ciertos escenarios, la ubicación de las distintas réplicas de datos es de máxima importancia. Por ejemplo, para la ubicación de réplicas de HDFS o la ubicación de contenedores a través de un orquestador, debe saber en qué platformFaultDomain y platformUpdateDomain se ejecuta la VM. También puede usar las zonas de disponibilidad para las instancias para tomar estas decisiones. Puede consultar estos datos directamente a través de IMDS.

Solicitud

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"

Respuesta

0

Ejemplo 3: Obtención de etiquetas de máquina virtual

Las etiquetas de máquina virtual se incluyen en la API de instancia en el punto de conexión instance/compute/tags. Es posible que se hayan aplicado etiquetas a las máquinas virtuales de Azure para organizarlas de forma lógica en una taxonomía. Las etiquetas asignadas a una máquina virtual se pueden recuperar mediante esta solicitud.

Solicitud

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"

Respuesta

Department:IT;ReferenceNumber:123456;TestStatus:Pending

El campo tags es una cadena con las etiquetas delimitadas por puntos y coma. Esta salida puede ser un problema si se usan puntos y coma en las propias etiquetas. Si se escribe un analizador para extraer mediante programación las etiquetas, debe basarse en el campo tagsList. El campo tagsList es una matriz JSON sin delimitadores y, por tanto, es más fácil de analizar. La lista de etiquetas asignadas a una máquina virtual se puede recuperar mediante esta solicitud.

Solicitud

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

Respuesta

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

Ejemplo 4: Obtención de más información sobre la máquina virtual durante el caso de soporte técnico

Como proveedor de servicios, es posible que reciba una llamada de soporte técnico en la que le gustaría tener más información sobre la máquina virtual. Pedirle al cliente que comparta los metadatos del equipo puede proporcionar información básica para que el profesional de soporte técnico conozca la variante de máquina virtual en Azure.

Solicitud

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

Respuesta

Nota

La respuesta es una cadena JSON. La respuesta de ejemplo siguiente se ha impreso correctamente para mejorar la legibilidad.

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

Ejemplo 5: Obtención del entorno de Azure donde se ejecuta la máquina virtual

Azure tiene varias nubes soberanas, como Azure Government. En ocasiones, necesitará el entorno de Azure para tomar algunas decisiones acerca del tiempo de ejecución. En el siguiente ejemplo se muestra cómo lograr este comportamiento.

Solicitud

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"

Respuesta

AzurePublicCloud

Aquí se enumeran las nubes y los valores del entorno de Azure.

Nube Entorno de Azure
Todas las regiones globales de Azure disponibles con carácter general AzurePublicCloud
Azure Government AzureUSGovernmentCloud
Microsoft Azure operado por 21Vianet AzureChinaCloud
Azure Alemania AzureGermanCloud

Ejemplo 6: Recuperación de la información de red

Solicitud

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

Respuesta

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

Ejemplo 7: Recuperación de la dirección IP pública

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:

Datos atestiguados

Obtención de los datos atestiguados

IMDS le ofrece la garantía de que los datos proporcionados proceden de Azure. Microsoft firma parte de esta información, por lo que puede confirmar que una imagen de Azure Marketplace es la que se está ejecutando en Azure.

GET /metadata/attested/document

Parámetros

Nombre Obligatorio/opcional Descripción
api-version Obligatorio Versión usada para atender la solicitud.
nonce Opcionales Cadena de 10 dígitos que actúa como valor de seguridad criptográfico (nonce). Si no se proporciona ningún valor, IMDS utiliza la marca de tiempo UTC actual.

Response

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

El blob de firma es una versión con la firma pkcs7 del documento. Contiene el certificado usado para firmar junto con los detalles específicos de una determinada máquina virtual.

En el caso de las máquinas virtuales creadas con Azure Resource Manager, el documento incluye vmId, sku, nonce, subscriptionId y timeStamp para la creación y la expiración del documento, así como la información del plan sobre la imagen. La información del plan solo se rellena para las imágenes de Azure Marketplace.

En el caso de las máquinas virtuales creadas con el modelo de implementación clásica, solo se garantiza que se rellenen vmId y subscriptionId. Puede extraer el certificado de la respuesta y usarlo para confirmar que la respuesta es válida y procede de Azure.

El documento descodificado contiene estos campos:

data Descripción Versión introducida
licenseType Tipo de licencia para la Ventaja híbrida de Azure. Esta opción solo está presente en las máquinas virtuales habilitadas para Ventaja híbrida de Azure. 01-09-2020
nonce Una cadena que se puede proporcionar de manera opcional con la solicitud. Si no se ha proporcionado ningún elemento nonce, se usa la marca de tiempo de la Hora universal coordinada actual. 2018-10-01
plan El plan de imagen de Azure Marketplace. Contiene el identificador de plan (nombre), la oferta o imagen de producto (producto) y el identificador de publicador (publicador). 2018-10-01
timestamp.createdOn La marca de tiempo UTC para el momento en que se creó el documento firmado 2018-20-01
timestamp.expiresOn La marca de tiempo UTC para el momento en que expira el documento firmado 2018-10-01
vmId Identificador único para la máquina virtual. 2018-10-01
subscriptionId Suscripción de Azure para la máquina virtual 2019-04-30
sku SKU específica para la imagen de máquina virtual (se pone en correlación con la propiedad compute/sku del punto de conexión de Instance Metadata [/metadata/instance]) 2019-11-01

Nota

En el caso de las máquinas virtuales clásicas (no de Azure Resource Manager), solo se garantiza que se rellena vmId.

Documento de ejemplo:

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

Guía de validación de firmas

Al validar la firma, debe confirmar que la firma se creó con un certificado de Azure. Esto se hace validando el nombre alternativo del sujeto del certificado (SAN).

Ejemplo de SANDNS Name=eastus.metadata.azure.com, DNS Name=metadata.azure.com

Nota:

El dominio de la nube pública y cada nube soberana será diferente.

Nube Dominio en SAN
Todas las regiones globales de Azure disponibles con carácter general *.metadata.azure.com
Azure Government *.metadata.azure.us
Azure operado por 21Vianet *.metadata.azure.cn
Azure Alemania *.metadata.microsoftazure.de

Nota:

Es posible que los certificados no coincidan exactamente con el dominio. Por este motivo, la validación de certificación debe aceptar cualquier subdominio (por ejemplo, en las regiones de disponibilidad general de la nube pública aceptan *.metadata.azure.com).

No se recomienda la asignación de certificados para certificados intermedios. Para obtener más instrucciones, consulte anclaje de certificados: anclaje de certificados y servicios de Azure. Tenga en cuenta que Azure Instance Metadata Service NO ofrecerá notificaciones para futuros cambios de la entidad de certificación. En su lugar, debe seguir los detalles deentidad de certificación de Azure centralizados artículo para todas las actualizaciones futuras.

Muestra 1: validación de que la VM se ejecuta en Azure

Los proveedores de Azure Marketplace quieren asegurarse de que su software tiene licencia para ejecutarse solo en Azure. Si alguien copia el disco duro virtual en un entorno local, el proveedor debe ser capaz de detectarlo. A través de IMDS, estos proveedores pueden obtener datos firmados que garantizan que la respuesta es solo de Azure.

Nota

Tenga en cuenta que este ejemplo requiere la instalación de la utilidad JQ.

Validación

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

Compruebe que la firma proviene de Microsoft Azure y que no haya errores en la cadena 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

Se puede comparar el elemento nonce del documento firmado si proporcionó un parámetro nonce en la solicitud inicial.

Identidad administrada

Se puede habilitar una identidad administrada que haya asignado el sistema en la VM. También puede asignar una o varias identidades administradas que haya asignado el usuario a la VM. A continuación, puede solicitar tokens para identidades administradas desde IMDS. Estos tokens se pueden usar para autenticarse con otros servicios de Azure, como Azure Key Vault.

Para ver pasos detallados sobre cómo habilitar esta característica, consulte cómo adquirir un token de acceso.

Metadatos de Load Balancer

Al colocar instancias de máquina virtual o de conjunto de máquinas virtuales detrás de una instancia de Azure Standard Load Balancer, puede usar IMDS para recuperar los metadatos relacionados con el equilibrador de carga y las instancias. Para más información, consulte Recuperación de información del equilibrador de carga.

Eventos programados

Puede obtener el estado de los eventos programados mediante IMDS. A continuación, el usuario puede especificar un conjunto de acciones para que se ejecuten en estos eventos. Para más información, consulte Eventos programados para Linux o Eventos programados para Windows.

Código de ejemplo en diferentes lenguajes

En la tabla siguiente se muestran ejemplos de llamada a IMDS mediante el uso de diferentes idiomas en la VM:

Idioma Ejemplo
Bash https://github.com/Microsoft/azureimds/blob/master/IMDSSample.sh
C# https://github.com/Microsoft/azureimds/blob/master/IMDSSample.cs
Go https://github.com/Microsoft/azureimds/blob/master/imdssample.go
Java https://github.com/Microsoft/azureimds/blob/master/imdssample.java
NodeJS https://github.com/Microsoft/azureimds/blob/master/IMDSSample.js
Perl https://github.com/Microsoft/azureimds/blob/master/IMDSSample.pl
PowerShell https://github.com/Microsoft/azureimds/blob/master/IMDSSample.ps1
Puppet https://github.com/keirans/azuremetadata
Python https://github.com/Microsoft/azureimds/blob/master/IMDSSample.py
Ruby https://github.com/Microsoft/azureimds/blob/master/IMDSSample.rb

Errores y depuración

Si no se encuentra un elemento de datos o hay una solicitud con formato incorrecto, Instance Metadata Service devuelve errores HTTP estándar. Por ejemplo:

Código de estado HTTP Motivo
200 OK La solicitud fue correcta.
400 Bad Request Falta el encabezado Metadata: true o el parámetro format=json al consultar un nodo hoja
404 Not Found El elemento solicitado no existe
405 Method Not Allowed El método HTTP (verbo) no se admite en el punto de conexión.
410 Gone Reintente después de un tiempo durante un máximo de 70 segundos
429 Too Many Requests Se ha superado el límite de frecuencia de la API
500 Service Error Vuelva a intentarlo más tarde

Preguntas más frecuentes

  • Recibo el error 400 Bad Request, Required metadata header not specified. ¿Qué significa?

    • IMDS requiere que el encabezado Metadata: true se transmita en la solicitud. Transmitir este encabezado en la llamada de REST le permite obtener acceso a IMDS.
  • ¿Por qué no recibo información de proceso de mi máquina virtual?

    • Actualmente IMDS solo admite instancias creadas con Azure Resource Manager.
  • He creado mi VM mediante Azure Resource Manager hace algún tiempo. ¿Por qué no veo la información de metadatos de proceso?

    • Si creó la VM después de septiembre del 2016, agregue una etiqueta para empezar a ver los metadatos del proceso. Si creó la VM antes de septiembre de 2016, agregue extensiones o discos de datos en la instancia de VM (o quítelos) para actualizar los metadatos.
  • ¿Los datos de usuario son los mismos que los datos personalizados?

    • Los datos de usuario ofrecen una funcionalidad similar a la de los datos personalizados, lo que le permite pasar sus propios metadatos a la instancia de máquina virtual. La diferencia es que los datos de usuario se recuperan a través de IMDS y son persistentes en toda la duración de la instancia de máquina virtual. La característica de datos personalizados existente seguirá funcionando como se describe en este artículo. Sin embargo, solo puede obtener datos personalizados a través de la carpeta del sistema local, no a través de IMDS.
  • ¿Por qué no veo todos los datos rellenados para una nueva versión?

    • Si creó la VM después de septiembre del 2016, agregue una etiqueta para empezar a ver los metadatos del proceso. Si creó la VM antes de septiembre de 2016, agregue extensiones o discos de datos en la instancia de VM (o quítelos) para actualizar los metadatos.
  • ¿Por qué recibo el error 500 Internal Server Error o 410 Resource Gone?

    • Vuelva a intentar la solicitud. Para obtener más información, consulte Administración de errores transitorios. Si el problema persiste, cree un problema de soporte técnico en Azure Portal para la VM.
  • ¿Servirá para las instancias del conjunto de escalado?

    • Sí, IMDS está disponible para las instancias del conjunto de escalado.
  • Actualicé mis etiquetas en el conjunto de escalado, pero no aparecen en las instancias (a diferencia de las máquinas virtuales de instancia única). ¿Estoy haciendo algo mal?

    • Actualmente, las etiquetas para conjuntos de escalado solo se muestran a la máquina virtual durante un reinicio, un restablecimiento de imagen o un cambio de disco en la instancia.
  • ¿Por qué no veo la información de la SKU de la máquina virtual en los detalles de instance/compute?

    • En el caso de las imágenes personalizadas creadas desde Azure Marketplace, la plataforma de Azure no conserva la información de la SKU para la imagen personalizada y los detalles de las máquinas virtuales creadas a partir de la imagen personalizada. Esto es así por diseño y, por lo tanto, no se muestra en los detalles de la máquina virtual instance/compute.
  • ¿Por qué se agota el tiempo de espera de la solicitud (o no se puede conectar) para mi llamada al servicio?

    • Las llamadas de metadatos se deben hacer desde la dirección IP principal asignada a la tarjeta de red principal de la máquina virtual. Además, si ha cambiado las rutas, debe haber una ruta para la dirección 169.254.169.254/32 en la tabla de rutas local de la VM.

      1. Vuelque la tabla de rutas local y busque la entrada de IMDS. Por ejemplo:

        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. compruebe que existe una ruta para 169.254.169.254 y anote la interfaz de red correspondiente (por ejemplo, 172.16.69.7).

      3. Vuelque la configuración de la interfaz, busque aquella interfaz que se corresponda con la que se menciona en la tabla de rutas y anote la dirección MAC (física).

        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 que la interfaz corresponde a la NIC principal y la dirección IP principal de la máquina virtual. Para encontrar la NIC y la dirección IP principales, consulte la configuración de red en Azure Portal o búsquela con la CLI de Azure. Anote las direcciones IP privadas (y la dirección MAC, si usa la CLI). Aquí tiene un ejemplo de la CLI de 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. Si no coinciden, actualice la tabla de rutas para que la NIC y la dirección IP principales estén dirigidas.


  • Conmutación por error de clústeres en Windows Server

    • Cuando se consulta IMDS con los clústeres de conmutación por error, a veces es necesario agregar una ruta a la tabla de rutas. A continuación, se indica cómo puede hacerlo.

      1. Abra un símbolo del sistema con privilegios de administrador.

      2. Ejecute el siguiente comando y anote la dirección de la interfaz de red de destino (0.0.0.0) en la tabla de rutas IPv4.

      route print
      

      Nota

      La salida de ejemplo siguiente es de una VM de Windows Server que tiene un clúster de conmutación por error habilitado. Para simplificar las cosas, la salida solo contiene la tabla de rutas 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
      

      Ejecute el siguiente comando y use la dirección de la interfaz de red de destino (0.0.0.0) que es (10.0.1.10) en el ejemplo.

      route add 169.254.169.254/32 10.0.1.10 metric 1 -p
      

Soporte técnico

Si no puede obtener una respuesta de metadatos después de varios intentos, puede crear un problema de soporte técnico en Azure Portal.

Comentarios sobre el producto

Puede proporcionar comentarios sobre el producto e ideas en nuestro canal de la fuente de usuario en Virtual Machines > Instance Metadata Service aquí

Pasos siguientes