Ver y consultar metadatos de máquina virtual


Cada máquina virtual almacena sus metadatos en directorios de un servidor de metadatos. Tu VM tiene acceso automáticamente a esta API del servidor de metadatos sin necesidad de autorización adicional. Puede usar los métodos que se explican en las siguientes secciones de este documento para ver y consultar los valores de los metadatos de la VM:

Si se producen errores al acceder al servidor de metadatos, consulta el artículo Solucionar problemas de acceso al servidor de metadatos.

Antes de empezar

  • En el caso de las máquinas virtuales de Windows Server, usa PowerShell 3.0 o una versión posterior. Te recomendamos que uses ctrl+v para pegar los bloques de código copiados.
  • Consulta los conceptos básicos sobre cómo se definen, categorizan y organizan los metadatos de las máquinas virtuales de Compute Engine. Para obtener más información, consulta Acerca de los metadatos de las VMs.
  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    Python

    Para usar las Python muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Set up authentication for a local development environment.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Roles obligatorios

Para ver los metadatos personalizados desde fuera de la VM mediante la consola de Google Cloud , la CLI de Google Cloud o REST, se necesitan los siguientes roles y permisos. Si consultas los metadatos de forma programática desde la VM, solo necesitas los roles y permisos para conectarte a la VM.

Para obtener los permisos que necesitas para ver los metadatos personalizados desde fuera de la VM, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para ver los metadatos personalizados desde fuera de la VM. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

Se necesitan los siguientes permisos para ver los metadatos personalizados desde fuera de la VM:

  • Para ver los metadatos personalizados de un proyecto, sigue estos pasos: compute.projects.get en el proyecto
  • Para ver los metadatos zonales personalizados, sigue estos pasos: compute.instanceSettings.get en la configuración de la instancia de la zona que quieras del proyecto
  • Para ver los metadatos personalizados de una instancia de VM, haz lo siguiente: compute.instances.get en la VM
  • Si tus VMs usan cuentas de servicio: iam.serviceAccounts.actAs en las cuentas de servicio o en el proyecto

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Consultar metadatos de forma programática

Puedes acceder a todos los metadatos consultando las entradas de valor de metadatos de forma programática desde una VM Linux o Windows. Desde tu VM, puedes consultar los valores de los metadatos de forma programática de una de las siguientes maneras mediante herramientas como curl en Linux o Invoke-RestMethod en Windows:

Endpoints del servidor de metadatos

Para consultar metadatos de forma programática desde una VM, tienes los siguientes puntos de conexión del servidor de metadatos:

  • En todas las VMs, puedes consultar el servidor de metadatos mediante el endpoint HTTP (http://metadata.google.internal/computeMetadata/v1) o su dirección IP (169.254.169.254). Usa la dirección IPv4 incluso con instancias solo IPv6.
  • En el caso de las VMs blindadas, puedes consultar el servidor de metadatos de una de las siguientes formas:

En la mayoría de los ejemplos de este documento se usa el endpoint HTTP. Sin embargo, puede acceder a todas las mismas entradas de metadatos tanto si usa el endpoint https como el http.

Partes de una solicitud de metadatos

En la siguiente tabla se resumen las partes principales de una solicitud de consulta de metadatos.

Componentes Descripción
URLs raíz

Todos los valores de metadatos se definen como subrutas de las siguientes URLs raíz:

  • Endpoint HTTP:
    • http://metadata.google.internal/computeMetadata/v1
    • http://169.254.169.254/computeMetadata/v1
    • http://metadata.goog/computeMetadata/v1
  • Endpoint https (vista previa):
    • https://metadata.google.internal/computeMetadata/v1
      Esta es la única URL admitida durante la fase de vista previa.
Encabezado de solicitud

Este encabezado indica que la solicitud se ha enviado para recuperar valores de metadatos y que no proviene de una fuente no segura desde la que se ha enviado involuntariamente. Además, permite que el servidor de metadatos devuelva los datos que has solicitado. Si no proporcionas este encabezado, el servidor de metadatos denegará tu solicitud.

Metadata-Flavor: Google

Consultar una sola entrada de metadatos

Usa los siguientes comandos para consultar una sola entrada de metadatos.

Linux

  1. Conéctate a tu VM Linux.
  2. En tu VM de Linux, usa la herramienta curl para hacer una consulta. Para consultar una entrada de metadatos de una instancia de VM o de un proyecto, ejecuta el siguiente comando:

    curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY" -H "Metadata-Flavor: Google"
    

    Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

    • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
    • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
    • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.

    Por ejemplo, para consultar la imagen de arranque de la VM, ejecuta la siguiente consulta:

    user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/image" -H "Metadata-Flavor: Google"
    

    El resultado debería ser similar al siguiente:

    projects/rhel-cloud/global/images/rhel-8-v20210122

Windows

  1. Conéctate a tu VM de Windows.
  2. En tu máquina virtual de Windows, usa el comando Invoke-RestMethod para hacer una consulta. Para consultar una entrada de metadatos de una instancia de VM o de un proyecto, ejecuta el siguiente comando:

    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY")
    $value
    

    Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

    • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
    • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
    • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.

    Por ejemplo, para consultar la imagen de arranque de la VM, ejecuta la siguiente consulta:

    PS C:\> 
    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/image")
    $value
    

    El resultado debería ser similar al siguiente:

    projects/windows-cloud/global/images/windows-server-2019-dc-v20210112

Consultar listados de directorios de metadatos

Usa los siguientes comandos para consultar los listados de directorios de metadatos. Los listados de directorios son entradas de metadatos que contienen otras claves de metadatos. Cualquier entrada de metadatos que termine en una barra inclinada es un listado de directorios

Linux

  1. Conéctate a tu VM Linux.

  2. Para consultar un directorio de metadatos de instancia de VM o de proyecto, ejecuta el siguiente comando desde tu VM Linux:

      curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/" -H "Metadata-Flavor: Google"
      

    Sustituye PATH_TO_METADATA_DIRECTORY por la ruta del directorio de metadatos de la instancia de VM o del proyecto para el que quieras consultar las listas de forma recursiva. Por ejemplo:

    • Para ver la entrada del directorio de metadatos del proyecto attributes, la ruta que debes especificar es project/attributes/.
    • Para ver la entrada del directorio de metadatos de la instancia de VM disks, la ruta que debes especificar es instance/disks/.

    Por ejemplo, considera la entrada disks/, que es un directorio de discos conectado a la VM. Para consultar la entrada disks/, sigue estos pasos:

    1. Ejecuta la herramienta curl en el directorio de discos.

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/" -H "Metadata-Flavor: Google"
      

      El resultado debería ser similar al siguiente:

      0/
      1/
      2/
      
    2. Si quieres obtener más información sobre el directorio 0/, puedes consultar la URL específica de ese directorio:

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/" -H "Metadata-Flavor: Google"
      

      El resultado debería ser similar al siguiente:

      device-name
      index
      mode
      type
      
    3. Para consultar el tipo de disco (type) de los discos 0/, puedes ejecutar lo siguiente:

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/type" -H "Metadata-Flavor: Google"
      

      El resultado debería ser similar al siguiente:

      PERSISTENT
      

Windows

La entrada disks/ es un directorio de discos que está conectado a la VM. Para consultar la entrada de discos, sigue estos pasos:

  1. Conéctate a tu VM de Windows.

  2. Para consultar un directorio de metadatos de una instancia de VM o de un proyecto, ejecuta el siguiente comando desde tu VM de Windows:

    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/")
    $value
    

    Sustituye PATH_TO_METADATA_DIRECTORY por la ruta del directorio de metadatos de la instancia de VM o del proyecto para el que quieras consultar las listas de forma recursiva. Por ejemplo:

    • Para ver la entrada del directorio de metadatos del proyecto attributes, la ruta que debes especificar es project/attributes/.
    • Para ver la entrada del directorio de metadatos de la instancia de VM disks, la ruta que debes especificar es instance/disks/.

    Por ejemplo, considera la entrada disks/, que es un directorio de discos conectado a la VM. Para consultar la entrada disks/, sigue estos pasos:

    1. Usa el comando Invoke-RestMethod en el directorio de discos.

      PS C:\> 
      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/")
      $value
      

      El resultado debería ser similar al siguiente:

      0/
      1/
      2/
      
    2. Si quieres obtener más información sobre el directorio 0/, puedes consultar la URL específica de ese directorio:

      PS C:\> 
      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/")
      $value
      

      El resultado debería ser similar al siguiente:

      device-name
      index
      mode
      type
      
    3. Para consultar el tipo de disco (type) de los discos 0/, puedes ejecutar lo siguiente:

      PS C:\> 
      $value = (Invoke-RestMethod `
                -Headers @{'Metadata-Flavor' = 'Google'} `
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/type")
      $value
      

      El resultado debería ser similar al siguiente:

      PERSISTENT
      

Consultar de forma recursiva las listas de directorios

Si quieres devolver todo el contenido de un directorio, usa el parámetro de consulta recursive=true con tu solicitud:

Linux

  1. Conéctate a tu VM Linux.

  2. En tu VM de Linux, usa la herramienta curl para hacer una consulta. Para consultar de forma recursiva los listados de un directorio de metadatos de una instancia de VM o de un proyecto, ejecuta el siguiente comando:

    curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/?recursive=true" -H "Metadata-Flavor: Google"
    

    Sustituye PATH_TO_METADATA_DIRECTORY por la ruta del directorio de metadatos de la instancia de VM o del proyecto para el que quieras consultar las listas de forma recursiva. Por ejemplo:

    • Para ver la entrada del directorio de metadatos del proyecto attributes, la ruta que debes especificar es project/attributes/.
    • Para ver la entrada del directorio de metadatos de la instancia de VM disks, la ruta que debes especificar es instance/disks/.

    Por ejemplo, el siguiente comando consulta de forma recursiva los listados de metadatos de la instancia del directorio disks/.

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true" -H "Metadata-Flavor: Google"
      

    El resultado debería ser similar al siguiente:

      [{"deviceName":"boot","index":0,"mode":"READ_WRITE","type":"PERSISTENT"},
      {"deviceName":"persistent-disk-1","index":1,"mode":"READ_WRITE","type":"PERSISTENT"},
      {"deviceName":"persistent-disk-2","index":2,"mode":"READ_ONLY","type":"PERSISTENT"}]
      

    De forma predeterminada, el contenido recursivo se devuelve en formato JSON. Si quiere devolver este contenido en formato de texto, añada el parámetro de consulta alt=text:

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text" -H "Metadata-Flavor: Google"
      

    El resultado debería ser similar al siguiente:

      0/device-name boot
      0/index 0
      0/mode READ_WRITE
      0/type PERSISTENT
      1/device-name persistent-disk-1
      1/index 1
      1/mode READ_WRITE
      1/type PERSISTENT
      2/device-name persistent-disk-1
      2/index 2
      2/mode READ_ONLY
      2/type PERSISTENT
      

Windows

  1. Conéctate a tu VM de Windows.

  2. En tu VM de Windows, usa el comando Invoke-RestMethod para hacer una consulta. Para consultar de forma recursiva los listados de un directorio de metadatos de una instancia de VM o de un proyecto, ejecuta el siguiente comando:

      $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
                -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/?recursive=true")
      $value
      

    Sustituye PATH_TO_METADATA_DIRECTORY por la ruta del directorio de metadatos de la instancia de VM o del proyecto para el que quieras consultar las listas de forma recursiva. Por ejemplo:

    • Para ver la entrada del directorio de metadatos del proyecto attributes, la ruta que debes especificar es project/attributes/.
    • Para ver la entrada del directorio de metadatos de la instancia de VM disks, la ruta que debes especificar es instance/disks/.

    Por ejemplo, el siguiente comando consulta de forma recursiva los listados de metadatos de la instancia del directorio disks/.

    PS C:\> 
    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true")
    $value
    

    El resultado debería ser similar al siguiente:

    [{"deviceName":"boot","index":0,"mode":"READ_WRITE","type":"PERSISTENT"},
    {"deviceName":"persistent-disk-1","index":1,"mode":"READ_WRITE","type":"PERSISTENT"},
    {"deviceName":"persistent-disk-2","index":2,"mode":"READ_ONLY","type":"PERSISTENT"}]
    

    De forma predeterminada, el contenido recursivo se devuelve en formato JSON. Si quiere devolver este contenido en formato de texto, añada el parámetro de consulta alt=text:

    PS C:\> 
    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text")
    $value
    

    El resultado debería ser similar al siguiente:

    0/device-name boot
    0/index 0
    0/mode READ_WRITE
    0/type PERSISTENT
    1/device-name persistent-disk-1
    1/index 1
    1/mode READ_WRITE
    1/type PERSISTENT
    2/device-name persistent-disk-1
    2/index 2
    2/mode READ_ONLY
    2/type PERSISTENT
    

Aplicar formato a los resultados de una consulta

De forma predeterminada, cada endpoint tiene un formato predefinido para la respuesta. Algunos endpoints pueden devolver datos en formato JSON de forma predeterminada, mientras que otros pueden devolver datos como una cadena. Puede anular la especificación del formato de datos predeterminado mediante los parámetros de consulta alt=json o alt=text, que devuelven los datos en formato de cadena JSON o como una representación de texto sin formato, respectivamente.

Linux

  1. Conéctate a tu VM Linux.
  2. En tu VM de Linux, usa la herramienta curl para hacer una consulta. Para cambiar el formato de los datos de respuesta de una consulta de una instancia de VM o de una entrada de metadatos de un proyecto, ejecuta el siguiente comando:

    curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?alt=DATA_FORMAT" -H "Metadata-Flavor: Google"
    

    Haz los cambios siguientes:

    • Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

      • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
      • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
      • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.
    • DATA_FORMAT: el formato en el que quieres que se muestren los datos de respuesta de la consulta (por ejemplo, text o json).

Ejemplo

Por ejemplo, la clave tags devuelve automáticamente los datos en formato JSON. Para devolver los datos en formato de texto, especifica el parámetro de consulta alt=text.

Consulta predeterminada

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
  

El resultado debería ser similar al siguiente:

  ["http-server", "db-client", "app-server", "mysql-server"]
  

Consulta con formato

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?alt=text" -H "Metadata-Flavor: Google"
  

El resultado debería ser similar al siguiente:

  http-server
  db-client
  app-server
  mysql-server

Windows

  1. Conéctate a tu VM de Windows.
  2. En tu VM de Windows, usa el comando Invoke-RestMethod para hacer una consulta. Para cambiar el formato de los datos de respuesta de una consulta de una instancia de máquina virtual o de una entrada de metadatos de un proyecto, ejecuta el siguiente comando:

      $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
                -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?alt=DATA_FORMAT")
      $value
      

    Haz los cambios siguientes:

    • Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

      • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
      • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
      • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.
    • DATA_FORMAT: el formato en el que quieres que se muestren los datos de respuesta de la consulta (por ejemplo, text o json).

Ejemplo

Por ejemplo, la clave tags devuelve automáticamente los datos en formato JSON. Para devolver los datos en formato de texto, especifica el parámetro de consulta alt=text.

Consulta predeterminada

  PS C:> 
  $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
            -Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags")
  $value
  

El resultado debería ser similar al siguiente:

  ["http-server", "db-client", "app-server", "mysql-server"]
  

Consulta con formato

  PS C:> 
  $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
            -Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?alt=text")
  $value
  

El resultado debería ser similar al siguiente:

  http-server
  db-client
  app-server
  mysql-server

Consultar los cambios en los metadatos con la función wait-for-change

Dado que los valores de los metadatos pueden cambiar mientras se ejecuta la VM, se puede notificar al servidor de metadatos los cambios en los metadatos mediante la función wait-for-change. Con esta opción, la solicitud solo devuelve un resultado cuando los metadatos especificados han cambiado.

Puedes usar esta función en metadatos personalizados o definidos por el servidor. De esta forma, si cambia algo en tu máquina virtual o proyecto, o si alguien actualiza una entrada de metadatos personalizados, puedes reaccionar al cambio de forma programática.

Por ejemplo, puedes hacer una solicitud en la clave tags para que la solicitud solo se devuelva si el contenido de los metadatos de las etiquetas ha cambiado. Cuando se devuelve la solicitud, se proporciona el nuevo valor de esa clave de metadatos.

La función wait-for-change también te permite buscar coincidencias con tu solicitud y definir tiempos de espera.

Cuando trabajes con la función wait-for-change, ten en cuenta lo siguiente:

  • Solo puedes hacer una solicitud wait-for-change en un endpoint de metadatos o de forma recursiva en el contenido de un directorio. No puedes realizar una solicitud wait-for-change en una ficha de directorio. Si intentas hacerlo, el servidor de metadatos rechazará tu solicitud y devolverá un error 400 (solicitud no válida).

  • No puedes realizar una solicitud wait-for-change para un token de cuenta de servicio. Si intentas enviar una solicitud wait-for-change a la URL del token de la cuenta de servicio, la solicitud falla inmediatamente y devuelve un error 400 Invalid Request.

Para hacer una solicitud wait-for-change, consulta una clave de metadatos y añade el parámetro de consulta ?wait_for_change=true:

Linux

  1. Conéctate a tu VM Linux.
  2. En tu VM de Linux, usa la herramienta curl para hacer una consulta. Para enviar una solicitud wait-for-change de una entrada de metadatos de una instancia de VM o de un proyecto, ejecuta el siguiente comando:

    curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true" -H "Metadata-Flavor: Google"
    

    Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

    • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
    • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
    • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.

    Cuando se cambia la clave de metadatos especificada, la consulta devuelve el nuevo valor.

Ejemplos

En este ejemplo, si se hace una solicitud a setInstanceTags method, la solicitud devuelve los nuevos valores:

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true" -H "Metadata-Flavor: Google"
  

El resultado debería ser similar al siguiente:

  http-server
  db-client
  

También puedes realizar una solicitud wait-for-change de forma recursiva en el contenido de un directorio:

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&wait_for_change=true" -H "Metadata-Flavor: Google"
  

El servidor de metadatos devuelve el nuevo contenido si hay algún cambio:

  {"foo":"bar","baz":"bat"}
  

Windows

  1. Conéctate a tu VM de Windows.
  2. En tu VM de Windows, usa el comando Invoke-RestMethod para hacer una consulta. Para enviar una solicitud wait-for-change de una entrada de metadatos de una instancia de VM o de un proyecto, ejecuta el siguiente comando:

    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} `
              -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true")
    $value
    

    Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

    • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
    • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
    • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.

    Cuando se cambia la clave de metadatos especificada, la consulta devuelve el nuevo valor.

Ejemplos

Cuando se cambia la clave de metadatos especificada, la consulta devuelve el nuevo valor. En este ejemplo, si se hace una solicitud a setInstanceTags method, la solicitud devuelve los nuevos valores:

  PS C:> 
  $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
            -Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true")
  $value
  

El resultado debería ser similar al siguiente:

  http-server
  db-client
  

También puedes realizar una solicitud wait-for-change de forma recursiva en el contenido de un directorio:

  PS C:> 
  $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
            -Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes?recursive=true&wait_for_change=true")
  $value
  

El servidor de metadatos devuelve el nuevo contenido si hay algún cambio:

  {"foo":"bar","baz":"bat"}
  

Usar ETags

Cuando envías una consulta wait-for-change, el servidor de metadatos devuelve una respuesta si ha cambiado algo en el contenido de esos metadatos. Sin embargo, existe una condición de carrera inherente entre una actualización de metadatos y una solicitud wait-for-change, por lo que es útil tener una forma fiable de saber que estás obteniendo el valor de metadatos más reciente.

Para ello, puede usar el parámetro de consulta last_etag, que compara el valor de ETag que proporcione con el valor de ETag guardado en el servidor de metadatos. Si los valores de ETag coinciden, se acepta la solicitud wait-for-change. Si los valores de ETag no coinciden, significa que el contenido de los metadatos ha cambiado desde la última vez que recuperó el valor de ETag, y el servidor de metadatos devuelve inmediatamente este último valor.

Máquinas virtuales Linux

Para obtener el valor de ETag actual de una clave de metadatos, siga estos pasos:

  1. Conéctate a tu VM Linux.
  2. Haz una solicitud a esa clave e imprime los encabezados. Para ello, usa la curl herramienta con la marca -v. Para obtener el ETag actual de una instancia de VM o de una entrada de metadatos de un proyecto, ejecuta el siguiente comando:

    curl -v "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY" -H "Metadata-Flavor: Google"
    

    Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

    • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
    • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
    • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.

    Por ejemplo, el siguiente comando obtiene el valor de ETag actual de la clave de metadatos de la instancia tags.

      user@myinst:~$ curl -v "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
      

    El resultado debería ser similar al siguiente:

    * About to connect() to metadata port 80 (#0)
    * Trying 169.254.169.254... connected
    * Connected to metadata (169.254.169.254) port 80 (#0)
    > GET /computeMetadata/v1/instance/tags HTTP/1.1
    > User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15
    > Host: metadata
    > Accept: */*
    >
    < HTTP/1.1 200 OK
    < Content-Type: application/text
    < ETag: 411261ca6c9e654e
    < Date: Wed, 13 Feb 2013 22:43:45 GMT
    < Server: Metadata Server for VM
    < Content-Length: 26
    < X-XSS-Protection: 1; mode=block
    < X-Frame-Options: SAMEORIGIN
    <
    http-server
    db-client
  3. A continuación, puedes usar ese valor de ETag con el comando curl en tu solicitud wait-for-change. Para usar el valor de ETag en la solicitud wait-for-change de metadatos de una instancia o un proyecto, ejecuta el siguiente comando:

      curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&last_etag=ETAG" -H "Metadata-Flavor: Google"
      

    Haz los cambios siguientes:

    • Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

      • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
      • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
      • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.
    • ETAG: el valor de ETag de la clave de metadatos.

    En este ejemplo, el siguiente comando usa el valor de ETag de la clave tags y consulta la entrada de metadatos de la instancia.

      user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&last_etag=411261ca6c9e654e" -H "Metadata-Flavor: Google"
      

    El servidor de metadatos coincide con el valor de ETag que has especificado y, si ese valor cambia, la solicitud se devuelve con el nuevo contenido de tu clave de metadatos.

Máquinas virtuales de Windows

Para obtener el valor de ETag actual de una clave de metadatos, siga estos pasos:

  1. Conéctate a tu VM de Windows.
  2. Haz una solicitud a esa clave e imprime los encabezados. En Windows, usa el comando Invoke-WebRequest. Para obtener el ETag actual de una instancia de VM o de una entrada de metadatos de un proyecto, ejecuta el siguiente comando:

      $value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} `
      -Uri http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY)

    $value.Headers.ETag

    Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

    • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
    • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
    • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.

    Por ejemplo, el siguiente comando obtiene el valor de ETag actual de la clave de metadatos de la instancia tags.

      PS C:> 
      $value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} `
      -Uri http://metadata.google.internal/computeMetadata/v1/instance/tags)

    $value.Headers.ETag

    El resultado debería ser similar al siguiente:

      * About to connect() to metadata port 80 (#0)
      * Trying 169.254.169.254... connected
      * Connected to metadata (169.254.169.254) port 80 (#0)
      > GET /computeMetadata/v1/instance/tags HTTP/1.1
      > User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15
      > Host: metadata
      > Accept: /
      >
      < HTTP/1.1 200 OK
      < Content-Type: application/text
      < ETag: 411261ca6c9e654e
      < Date: Wed, 13 Feb 2013 22:43:45 GMT
      < Server: Metadata Server for VM
      < Content-Length: 26
      < X-XSS-Protection: 1; mode=block
      < X-Frame-Options: SAMEORIGIN
      <
      http-server
      db-client

  3. Después, puedes usar ese valor de ETag en tu solicitud wait-for-change. Para usar el valor de ETag en la solicitud wait-for-change de metadatos de instancia o de proyecto, ejecuta el siguiente comando:

      $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
              -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&last_etag=ETAG")
      $value
      

    Haz los cambios siguientes:

    • Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

      • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
      • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
      • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.
    • ETAG: el valor de ETag de la clave de metadatos.

    En este ejemplo, el siguiente comando usa el valor de ETag de la clave tags y consulta la entrada de metadatos de la instancia.

      PS C:> 
      $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
                -Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&last_etag=411261ca6c9e654e")
      $value
      

    El servidor de metadatos coincide con el valor de ETag que has especificado y, si ese valor cambia, la solicitud se devuelve con el nuevo contenido de tu clave de metadatos.

Python

En el siguiente ejemplo de Python se muestra cómo monitorizar de forma programática el servidor de metadatos para detectar cambios.

En este ejemplo se asigna el valor 0 al ETag inicial. El servidor de metadatos no devuelve una respuesta con 0 como valor de ETag. Cuando se especifica 0 como último ETag en una solicitud, el servidor de metadatos responde con el valor y el ETag actuales. De esta forma, se ahorra parte del código necesario para obtener el valor inicial y el ETag.

last_etag = "0"

while True:
    r = requests.get(
        url,
        params={"last_etag": last_etag, "wait_for_change": True},
        headers=METADATA_HEADERS,
    )

    # During maintenance the service can return a 503, so these should
    # be retried.
    if r.status_code == 503:
        time.sleep(1)
        continue
    r.raise_for_status()

    last_etag = r.headers["etag"]

Definir tiempos de espera

Si quieres que tu solicitud wait-for-change se agote después de un número determinado de segundos, puedes definir el parámetro timeout_sec. El parámetro timeout_sec limita el tiempo de espera de tu solicitud al número de segundos que hayas especificado. Cuando la solicitud alcanza ese límite, devuelve el contenido actual de la clave de metadatos.

Cuando se define el parámetro timeout_sec, la solicitud siempre se devuelve después del número de segundos especificado, independientemente de si el valor de los metadatos ha cambiado o no. Solo se puede definir un valor entero para el tiempo de espera.

Linux

  1. Conéctate a tu VM Linux.
  2. En tu VM de Linux, usa la herramienta curl para hacer una consulta. Para enviar una solicitud wait-for-change con un valor de tiempo de espera para una entrada de metadatos de instancia de VM o de proyecto, ejecuta el siguiente comando:

      curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&timeout_sec=TIMEOUT" -H "Metadata-Flavor: Google"
      

    Haz los cambios siguientes:

    • Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

      • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
      • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
      • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.
    • TIMEOUT: el valor de tiempo de espera.

Por ejemplo, el siguiente comando realiza una solicitud wait-for-change que se agota al cabo de 360 segundos:

  user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&timeout_sec=360" -H "Metadata-Flavor: Google"
  

Windows

  1. Conéctate a tu VM de Windows.
  2. En tu máquina virtual de Windows, usa el comando Invoke-RestMethod para hacer una consulta. Para enviar una solicitud wait-for-change con un valor de tiempo de espera para una entrada de metadatos de una instancia de VM o de un proyecto, ejecuta el siguiente comando:

      $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
              -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&timeout_sec=TIMEOUT")
      $value
      

    Haz los cambios siguientes:

    • Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

      • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
      • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
      • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.
    • TIMEOUT: el valor de tiempo de espera.

Por ejemplo, el siguiente comando realiza una solicitud wait-for-change que se agota al cabo de 360 segundos:

  PS C:> 
  $value = (Invoke-RestMethod -Headers @{'Metadata-Flavor' = 'Google'}
            -Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&timeout_sec=360")
  $value
  

Consultar metadatos mediante el endpoint del servidor de metadatos HTTPS

El endpoint del servidor de metadatos HTTPS (https://metadata.google.internal/computeMetadata/v1) proporciona más seguridad para la transmisión de información entre el servidor de metadatos y la VM.

Para usar el endpoint del servidor de metadatos HTTPS, la VM debe cumplir los siguientes requisitos:

  • El entorno de invitado debe ejecutarse en la VM.
  • La clave de metadatos disable-https-mds-setup de la VM debe tener el valor FALSE.
  • La VM debe ser una VM blindada. Esto se debe a que el servidor de metadatos HTTPS requiere el uso de Unified Extensible Firmware Interface (UEFI) y Virtual Trusted Platform Module (vTPM) para verificar los certificados.

Para obtener una descripción general de cómo se gestionan las consultas al endpoint del servidor de metadatos HTTPS, consulta Endpoint del servidor de metadatos HTTPS. Puedes hacer las mismas consultas al servidor de metadatos tanto si usas el endpoint https como el http. Sin embargo, para llamar al endpoint https, debes especificar la ruta a los certificados de identidad del cliente y, en algunos casos, el certificado raíz.

Los siguientes comandos muestran cómo consultar el servidor de metadatos mediante el endpoint https.

Linux

  1. Conéctate a tu VM Linux.

  2. En tu VM de Linux, usa la herramienta curl para hacer una consulta y especificar el certificado de identidad del cliente. También puedes especificar el certificado raíz.

    curl "https://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY" \
      -E CLIENT_CERTIFICATE \
      [--cacert ROOT_CERTIFICATE] \
      -H "Metadata-Flavor: Google"
    

    Haz los cambios siguientes:

    • Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

      • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
      • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
      • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.
    • CLIENT_CERTIFICATE: la ruta al certificado de identidad del cliente: /run/google-mds-mtls/client.key.
    • Opcional: ROOT_CERTIFICATE, la ruta al certificado raíz: /run/google-mds-mtls/root.crt. Debe especificar este valor si el certificado raíz no se ha añadido al almacén de confianza del SO.

    Por ejemplo, para consultar la imagen de arranque de una VM, ejecuta la siguiente consulta:

    user@myinst:~$ 
    curl "https://metadata.google.internal/computeMetadata/v1/instance/image" \
      -E /run/google-mds-mtls/client.key \
      -H "Metadata-Flavor: Google"
    

    El resultado debería ser similar al siguiente:

    projects/rhel-cloud/global/images/rhel-8-v20210122

    Si aparece un mensaje de error, consulta la documentación para solucionar problemas.

Windows

  1. Conéctate a tu VM de Windows.

  2. Obtén el certificado de identidad del cliente con uno de los siguientes comandos:

    • $cert = Get-PfxCertificate -FilePath "C:\ProgramData\Google\Compute Engine\mds-mtls-client.key.pfx"
      
    • $cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Issuer -like "google.internal" }
      
  3. En tu VM de Windows, usa el comando Invoke-RestMethod y especifica el certificado de identidad del cliente para hacer una consulta.

    PS C:\> 
    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} -Certificate CLIENT_CERTIFICATE `
              -Uri "https://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY")
    $value
    

    Haz los cambios siguientes:

    • CLIENT_CERTIFICATE: la ruta al certificado de identidad del cliente en la VM. Esta es la variable $cert que se ha definido en el paso anterior.
    • Sustituye PATH_TO_METADATA_ENTRY por la ruta a la clave de metadatos de la instancia de VM o del proyecto cuyo valor quieras consultar. Si la clave está en un subdirectorio del directorio de la instancia o del proyecto, asegúrese de incluir también el subdirectorio. Por ejemplo:

      • Para ver la clave de metadatos project-id, que se almacena en los metadatos del proyecto, especifica project/project-id.
      • Para ver la clave de metadatos image, que se almacena en los metadatos de la instancia de VM, especifique instance/image.
      • Para ver el enable-oslogin que se puede almacenar en el subdirectorio de atributos de los metadatos del proyecto o de la instancia de VM, especifica project/attributes/enable-oslogin o instance/attributes/enable-oslogin en función de tu caso de uso.

    Por ejemplo, para consultar la imagen de arranque de una VM de Windows Server 2019, ejecuta la siguiente consulta:

    PS C:\> 
    $value = (Invoke-RestMethod `
              -Headers @{'Metadata-Flavor' = 'Google'} -Certificate $cert `
              -Uri "https://metadata.google.internal/computeMetadata/v1/instance/image")
    $value
    

    El resultado debería ser similar al siguiente:

    projects/windows-cloud/global/images/windows-server-2019-dc-v20210112

Limitaciones

  • El servidor de metadatos rechaza automáticamente las solicitudes que contienen el encabezado X-Forwarded-For. Este encabezado suele indicar que la solicitud se ha enviado a través de un proxy y que puede que no la haya realizado un usuario autorizado. Por motivos de seguridad, se rechazan todas las solicitudes de este tipo.

  • Cuando usas el comando curl para obtener metadatos del servidor, ten en cuenta que algunos caracteres codificados no se admiten en la ruta de la solicitud. Los caracteres codificados solo se admiten en la ruta de consulta.

    Por ejemplo, es posible que la siguiente solicitud no funcione:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/123456789-compute%40developer.gserviceaccount.com/?query_path=https%3A%2F%2Flocalhost%3A8200%2Fexample%2Fquery&another_param=true" -H "Metadata-Flavor: Google"

    Para que esta solicitud funcione, debe sustituir el carácter codificado no admitido en la ruta de la solicitud (%40) por el valor aceptado equivalente (@).

    curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/1234567898-compute@developer.gserviceaccount.com/?query_path=https%3A%2F%2Flocalhost%3A8200%2Fexample%2Fquery&another_param=true" -H "Metadata-Flavor: Google"

    En la siguiente tabla se resumen los caracteres codificados que no se admiten en una ruta de solicitud.

    Carácter codificado Valor aceptado
    %21
    !
    %24
    $
    %27
    '
    %28
    (
    %29
    )
    %2A
    *
    %2C
    ,
    %40
    @

Códigos de estado

Cuando haces una solicitud al servidor de metadatos, este devuelve códigos de estado HTTP estándar para indicar si la solicitud se ha completado correctamente o no. A veces, las condiciones de la red o los eventos del host pueden provocar que el servidor de metadatos no pueda procesar tu solicitud y devuelva un código de error. En estos casos, debes diseñar tu aplicación para que sea tolerante a fallos y pueda reconocer y gestionar estos errores.

Para ver una lista detallada de los códigos de estado que se pueden devolver, consulta Solucionar problemas con códigos de servidor.

Ver los metadatos personalizados de tus VMs

Puede ver los valores de los metadatos personalizados de sus VMs de Compute Engine de una de las siguientes formas:

Ver metadatos de un proyecto

Para ver los metadatos personalizados que se aplican a todas las VMs de tu proyecto, usa uno de los siguientes métodos.

Consola

  1. En la Google Cloud consola, ve a la página Metadatos.

    Ir a la página Metadatos

    En la página Metadatos, verá una lista de todas las entradas de metadatos de proyecto personalizados de su proyecto.

gcloud

Usa el comando gcloud compute project-info describe para consultar los metadatos del proyecto:

gcloud compute project-info describe --flatten="commonInstanceMetadata[]"

El resultado debería ser similar al siguiente:

---
fingerprint: HcSFdS_1_1I=
items:
- key: ssh-keys
  value: USERNAME:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWZ...
kind: compute#metadata

REST

Para consultar los metadatos de un proyecto, crea una solicitud GET al método project.get.

Sustituye PROJECT_ID por el ID del proyecto.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID

El resultado debería ser similar al siguiente:

"kind": "compute#project",
"id": "XXXXXXX",
"creationTimestamp": "2018-12-10T08:34:33.616-08:00",
"name": "YOUR_PROJECT",
"commonInstanceMetadata": {
  "kind": "compute#metadata",
  "fingerprint": "XXXXXCdg=",
  "items": [
    {
      "key": "enable-guest-attributes",
      "value": "TRUE"
    },
    {
      "key": "enable-os-inventory",
      "value": "true"
    },
    {
      "key": "enable-osconfig",
      "value": "TRUE"
    },
    {
      "key": "enable-oslogin",
      "value": "TRUE"
    },
    {
      "key": "sshKeys",
      "value": "XXXXX"
    }
  ]
}, ...

Ver metadatos zonales

Para ver los metadatos personalizados que se aplican a todas las instancias de máquina virtual de una zona específica de un proyecto, utiliza uno de los siguientes métodos.

gcloud

Para consultar los metadatos zonales personalizados, usa el comando gcloud compute project-zonal-metadata describe.

gcloud compute project-zonal-metadata describe \
    --zone=ZONE \
    --project=PROJECT_ID

Haz los cambios siguientes:

  • PROJECT_ID: tu ID de proyecto
  • ZONE: la zona de la que quieres ver los metadatos zonales.

El resultado debería ser similar al siguiente:

{
  "fingerprint": "VlRIl8dx9vk=",
  "metadata": {
    items: {
      "key-1": "value-1",
      "key-2": "value-2"
    }
  }
}

REST

Para consultar los metadatos zonales personalizados, haz una solicitud GET al método instanceSettings().get.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceSettings

Haz los cambios siguientes:

  • PROJECT_ID: tu ID de proyecto
  • ZONE: la zona de la que quieres ver los metadatos zonales.

El resultado debería ser similar al siguiente:

{
  "fingerprint": "VlRIl8dx9vk=",
  "metadata": {
    items: {
      "key-1": "value-1",
      "key-2": "value-2"
    }
  }
}

Ver metadatos de instancias

Para ver los metadatos que se aplican a una sola VM de tu proyecto, utiliza uno de los siguientes métodos.

Consola

  1. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ir a instancias de VM

  2. Haga clic en el nombre de la VM de la que quiera ver los metadatos.

    • Claves SSH de esta VM. En la sección Seguridad y acceso, consulta el campo Claves SSH.

      • El valor None indica que no hay claves SSH almacenadas en los metadatos de la instancia.

      • Cualquier otro valor indica que hay claves SSH almacenadas en los metadatos de la instancia.

    • Claves SSH de un proyecto. En la sección Seguridad y acceso, consulta el campo Bloquear claves SSH del proyecto.

      • El valor On indica que el valor de la clave de metadatos block-project-ssh-keys es TRUE en los metadatos de instancia.

      • El valor Off indica que el valor de la clave de metadatos block-project-ssh-keys es FALSE o que la clave no está definida.

    • Todos los demás metadatos personalizados. Consulta la sección Metadatos personalizados. Verá todas las claves y los valores de metadatos personalizados, excepto los metadatos de claves SSH.

gcloud

Usa el comando gcloud compute instances describe para consultar los metadatos de la instancia:

gcloud compute instances describe VM_NAME --flatten="metadata[]"

Sustituye VM_NAME por el nombre de la VM de la que quieras obtener los metadatos.

El resultado debería ser similar al siguiente:

---
fingerprint: MTgTJ5m-Cjs=
items:
- key: enable-oslogin
  value: 'true'
kind: compute#metadata

REST

Para consultar los metadatos de una VM específica, envía una solicitud GET al método instances.get.

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME

El resultado debería ser similar al siguiente:

......
"metadata": {
"kind": "compute#metadata",
"fingerprint": "XXXXXXVo=",
"items": [
  {
    "key": "enable-oslogin",
    "value": "true"
  }
]
},....

Haz los cambios siguientes:

  • PROJECT_ID: tu ID de proyecto
  • ZONE: la zona en la que se encuentra la VM
  • VM_NAME: el nombre de la VM

Siguientes pasos