Acceso al servicio de metadatos de instancias (IMDS) en y configúrelo Lightsail - Amazon Lightsail

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Acceso al servicio de metadatos de instancias (IMDS) en y configúrelo Lightsail

Para acceder a los metadatos de instancia desde una instancia en ejecución, puede usar uno de los métodos siguientes:

  • Servicio de metadatos de instancia, versión 1 (IMDSv1): un método de solicitud y respuesta

  • Servicio de metadatos de instancia, versión 2 (IMDSv2): un método orientado a la sesión

    importante

    No todos los esquemas de instancias en Lightsail son compatibles con IMDSv2. Use la métrica de instancia MetadataNoToken para realizar un seguimiento del número de llamadas al servicio de metadatos de instancia que usa IMDSv1. Para obtener más información, consulte Visualización de métricas de instancia.

De forma predeterminada, puede usar IMDSv1 o IMDSv2, o ambos. El servicio de metadatos de instancias distingue entre solicitudes de IMDSv1 y IMDSv2 en función de si los encabezados PUT o GET, que son exclusivos de IMDSv2, están presentes en una solicitud determinada. Para obtener más información, consulte Agregar defensa en profundidad contra firewalls abiertos, proxies inversos y vulnerabilidades SSRF con mejoras en el servicio de metadatos de instancias EC2.

Puede configurar el servicio de metadatos de la instancia en cada instancia para que el código local o los usuarios deban usar IMDSv2. Si especifica que debe usarse IMDSv2, IMDSv1 dejará de funcionar. Para obtener más información, consulte Configuración de las opciones de metadatos de instancias en la Guía del usuario de Amazon Elastic Compute Cloud para instancias de Linux.

Para recuperar metadatos de instancias, consulte Recuperar metadatos de instancias en la Guía del usuario de Amazon Elastic Compute Cloud para instancias de Linux.

nota

En los ejemplos de esta sección, se utiliza la dirección IPv4 del servicio de metadatos de instancia: 169.254.169.254. Si recupera metadatos de instancia para las instancias a través de la dirección IPv6, asegúrese de habilitar y usar la dirección IPv6 en su lugar: fd00:ec2::254. La dirección IPv6 del servicio de metadatos de instancia es compatible con los comandos IMDSv2.

Funcionamiento de Servicio de metadatos de instancia, versión 2

IMDSv2 usa las solicitudes orientadas a la sesión. Las solicitudes orientadas a la sesión permiten crear un token de sesión que define la duración de la sesión, que puede ser de mínimo un segundo a un máximo de seis horas. En esa duración, puede utilizar el mismo token de sesión para solicitudes subsiguientes. Cuando la duración llegue a su fin, deberá crear un token de sesión nuevo para utilizarlo en las solicitudes futuras.

importante

Las instancias de Lightsail lanzadas a partir de los esquemas de Amazon Linux 2023 y Ubuntu 24 tendrán IMDSv2 configurado de forma predeterminada.

En los siguientes ejemplos se usa un script del intérprete de comandos de Linux y PowerShell e IMDSv2 para recuperar los elementos de metadatos de instancias de nivel superior. Estos ejemplos realizan lo siguiente:

  • Crear un token de sesión que dura seis horas (21 600 segundos) con la solicitud PUT

  • Almacenar el encabezado del token de sesión en una variable denominada TOKEN (en Linux) o token (en Windows)

  • Solicitar los elementos de metadatos de nivel superior con el token

Primero, ejecute los siguientes comandos:

  • En Linux:

    • Primero, genere un token con el siguiente comando.

      [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
    • A continuación, use el token para generar elementos de metadatos de nivel superior mediante el siguiente comando.

      [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
  • En Windows:

    • Primero, genere un token con el siguiente comando.

      PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
    • A continuación, use el token para generar elementos de metadatos de nivel superior mediante el siguiente comando.

      PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/

Después de crear un token, puede volverlo a usar hasta que caduque. En los ejemplos siguientes, cada comando obtiene el ID del esquema (Imagen de máquina de Amazon (AMI)) que se usa para lanzar la instancia. Se vuelve a usar el token del ejemplo anterior. Se almacena en $TOKEN (en Linux) o $token (en Windows).

  • En Linux:

    [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id
  • En Windows:

    PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} ` -Method GET -uri http://169.254.169.254/latest/meta-data/ami-id

Al utilizar IMDSv2 para solicitar metadatos de instancia, la solicitud debe incluir lo siguiente:

  • Una solicitud PUT: use una solicitud PUT para iniciar una sesión en el servicio de metadatos de instancias. La solicitud PUT devuelve un token que debe incluirse en las solicitudes GET subsiguientes del servicio de metadatos de instancia. El token debe acceder a los metadatos al usar IMDSv2.

  • El token: incluya el token en todas las solicitudes GET del servicio de metadatos de instancias. Cuando el uso del token se establece en required, las solicitudes sin un token válido o con un token que ha vencido reciben un código de error HTTP 401 - Unauthorized. Para obtener información sobre cómo cambiar el requisito de uso del token, consulte update-instance-metadata-options en la Referencia de comandos de la AWS CLI.

    • El token es una clave específica de la instancia. El token no es válido en otras instancias y se rechazará si intenta usarlo fuera de la instancia en la que se generó.

    • La solicitud PUT debe incluir un encabezado que especifique el tiempo de vida (TTL) del token en segundos. El TTL puede especificarse en un máximo de seis horas (21 600 segundos). El token representa una sesión lógica. El TTL especifica el período de tiempo que es válido el token y, en consecuencia, la duración de la sesión.

    • Cuando un token caduca, para poder seguir accediendo a los metadatos de instancia hay que crear una sesión nueva con otra solicitud PUT.

    • Puede elegir entre volver a utilizar un token o crear uno nuevo con cada solicitud. Si hay un número pequeño de solicitudes, puede ser más sencillo generar y usar inmediatamente un token cada vez que necesite acceder al servicio de metadatos de instancias. Pero para ser más eficientes, puede especificar una duración más larga para el token y volver a usarlo en vez de escribir una solicitud PUT cada vez que tenga que solicitar metadatos de instancia. No existe ningún límite práctico sobre la cantidad de tokens simultáneos, que representen cada uno a su propia sesión. Sin embargo, IMDSv2 sigue limitado por la conexión normal del servicio de metadatos de instancia y la limitación controlada. Para obtener más información, consulte Limitación de consultas en la Guía del usuario de Amazon Elastic Compute Cloud para instancias de Linux.

Los métodos HTTP GET y HEAD están permitidos en las solicitudes de metadatos de instancias IMDSv2. Las solicitudes PUT se rechazan si contienen un encabezado X-Forwarded-For.

De forma predeterminada, la respuesta a las solicitudes PUT tiene un límite de saltos de respuesta (tiempo de vida) de 1 en el nivel del protocolo IP. Puede ajustar el límite de saltos con el comando update-instance-metadata-options si tiene que ampliarlo. Por ejemplo, puede necesitar un límite de saltos mayor para una compatibilidad con versiones anteriores con servicios de contenedor ejecutándose en la instancia. Para obtener más información, consulte update-instance-metadata-options en la Referencia de comandos de la AWS CLI.

Transición al uso de Servicio de metadatos de instancia, versión 2

El uso del servicio de metadatos de instancia en la versión 2 (IMDSv2) es opcional. El servicio de metadatos de instancia en la versión 1 (IMDSv1) seguirá siendo compatible de forma indefinida. Si elige migrar para usar IMDSv2, le recomendamos que utilice las herramientas y la ruta de transición siguientes.

Herramientas para ayudar en la transición a IMDSv2

Si el software usa IMDSv1, utilice las siguientes herramientas a la hora de configurar el software para que use IMDSv2.

  • Software de AWS: las versiones más recientes de los SDK de AWS y la AWS CLI admiten IMDSv2. Para usar IMDSv2, asegúrese de que las instancias incluyan las versiones más recientes de los SDK de AWS y la AWS CLI. Para obtener información acerca de cómo actualizar la AWS CLI, consulte Instalar, actualizar y desinstalar la AWS CLI en la Guía del usuario de AWS Command Line Interface. Todos los paquetes de software de Amazon Linux 2 son compatibles con IMDSv2.

  • Métrica de instancias: IMDSv2 usa sesiones respaldadas por tokens, mientras que IMDSv1 no. La métrica de instancias MetadataNoToken realiza un seguimiento del número de llamadas al servicio de metadatos de instancias que usan IMDSv1. Al seguir esta métrica hasta cero, puede determinar si y cuándo se ha actualizado el software para utilizar IMDSv2. Para obtener más información, consulte Ver métricas de instancia en Amazon Lightsail.

  • Actualizaciones de operaciones de la API de Lightsail y comandos de la AWS CLI: en las instancias existentes, puede usar el comando update-instance-metadata-options de la AWS CLI (o la operación de la API UpdateInstanceMetadataOptions) para solicitar el uso de IMDSv2. El siguiente comando es un ejemplo. Asegúrate de reemplazar InstanceName por el nombre de su instancia y RegionName por el nombre de su instancia de Región de AWS.

    aws lightsail update-instance-metadata-options --region RegionName --instance-name InstanceName --http-tokens required

Ruta recomendada para exigir el acceso a IMDSv

Si se usan las herramientas anteriores, recomendamos que siga esta ruta para pasar a IMDSv2:

Paso 1: Al principio

Actualice los SDK de AWS, la AWS CLI y el software que usen credenciales de rol en sus instancias a las versiones compatibles con IMDSv2. Para obtener más información sobre cómo actualizar la AWS CLI, consulte Actualizar a la versión más reciente de la AWS CLI en la Guía del usuario de AWS Command Line Interface.

A continuación, cambie el software que accede directamente a los metadatos de instancias (en otras palabras, el que no usa un SDK de AWS) con las solicitudes IMDSv2.

Paso 2: Durante la transición

Realice un seguimiento del progreso de la transición mediante la métrica de instancia MetadataNoToken. Esta métrica muestra el número de llamadas al servicio de metadatos de instancia que están utilizando IMDSv1 en las instancias. Para obtener más información, consulte Visualización de métricas de instancia.

Paso 3: Cuando todo esté listo en todas las instancias

Todo está listo en todas las instancias cuando la métrica de instancias MetadataNoToken muestra un uso de IMDSv1 igual a cero. Llegados a este punto, puede exigir el uso de IMDSv2 con el comando update-instance-metadata-options. Puede hacer estos cambios en instancias en ejecución. No es necesario que reinicie las instancias.

La actualización de las opciones de metadatos de instancias para instancias existentes solo está disponible a través de la API de Lightsail o la AWS CLI. Actualmente no está disponible en la consola de Lightsail. Para obtener más información, consulte update-instance-metadata-options.

Documentación IMDS adicional

La siguiente documentación de IMDS está disponible en la Guía del usuario de Amazon Elastic Compute Cloud para instancias de Linux y la Guía del usuario de Amazon Elastic Compute Cloud para instancias de Windows:

nota

En Amazon EC2, los esquemas de instancias se denominan imágenes de máquina de Amazon (AMI).