Uso del servicio de metadatos de instancias para acceder a metadatos de instancia - Amazon Elastic Compute Cloud

Uso del servicio de metadatos de instancias para acceder a metadatos de instancia

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

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

    Para ver ejemplos, consulte Ejemplos de IMDSv2.

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

    Para ver ejemplos, consulte Ejemplos de IMDSv1.

De forma predeterminada, puede usar IMDSv1 o IMDSv2, o ambos.

Puede configurar el servicio de metadatos de instancia (IMDS) 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 información acerca de cómo configurar la instancia para usar IMDSv2, consulte Configuración de las opciones del servicio de metadatos de instancias.

Los encabezados PUT o GET son exclusivos de IMDSv2. Si estas cabeceras están presentes en la solicitud, entonces la solicitud está destinada a IMDSv2. Si no hay encabezados, se supone que la solicitud está destinada a IMDSv1.

Para obtener más información, consulte Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Service (Agregar defensa en profundidad contra firewalls abiertos, proxies inversos y vulnerabilidades SSRF con mejoras en el servicio de metadatos de instancias de EC2).

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.

nota

En los ejemplos de esta sección, se utiliza la dirección IPv4 del servicio de metadatos de instancia (IMDS): 169.254.169.254. Si recupera metadatos de instancia para las instancias de EC2 a través de la dirección IPv6, asegúrese de habilitar y utilizar la dirección IPv6 en su lugar: [fd00:ec2::254]. La dirección IPv6 de IMDS es compatible con los comandos de IMDSv2. Solo se puede acceder a la dirección IPv6 con instancias basadas en Nitro en una subred compatible con IPv6 (de doble pila o solo IPv6).

En los siguientes ejemplos se usa un script de intérprete de comandos e IMDSv2 para recuperar los elementos de metadatos de instancias de nivel superior. Cada ejemplo:

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

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

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

Puede ejecutar dos comandos separados o combinarlos.

Comandos separados

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, utilice el token para generar elementos de metadatos de nivel superior mediante el siguiente comando.

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

Comandos combinados

Puede almacenar el token y combinar los comandos. En el siguiente ejemplo se combinan los dos comandos anteriores y se almacena el encabezado del token de sesión en una variable denominada TOKEN.

nota

Si hay un error al crear el token, en lugar de un token válido, se almacena un mensaje de error en la variable y el comando no funcionará.

[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/

Después de crear un token, puede volverlo a usar hasta que venza. En el siguiente comando de ejemplo, que toma el ID de la AMI utilizada para iniciar la instancia, se vuelve a utilizar el token que se almacena en $TOKEN en el ejemplo anterior.

[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
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
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 venza. En el siguiente comando de ejemplo, que toma el ID de la AMI utilizada para iniciar la instancia, se vuelve a utilizar el token que se almacena en $token en el ejemplo anterior.

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:

  1. Use una solicitud PUT para iniciar una sesión en el servicio de metadatos de instancia. 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 con IMDSv2.

  2. Incluya el token en todas las solicitudes GET en IMDS. 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.

    • El token es una clave específica de la instancia. El token no es válido en otras instancias de EC2 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, de 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 otro PUT.

    • Puede escoger entre volver a utilizar un token o crear uno nuevo con cada solicitud. Para una cantidad pequeña de solicitudes, puede ser más sencillo generar y usar inmediatamente un token cada vez que necesite acceder a IMDS. 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 en cuanto a la cantidad de tokens simultáneos, cada uno de los cuales representa su propia sesión. Sin embargo, IMDSv2 sigue limitado por la conexión normal de IMDS y la limitación controlada. Para obtener más información, consulte Limitación de consultas.

Los métodos HTTP GET y HEAD están permitidos en las solicitudes de metadatos de instancia 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. Si necesita un límite de saltos mayor, puede ajustarlo con el comando modify-instance-metadata-options de AWS CLI. 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 Configurar las opciones de metadatos para instancias existentes.

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

Al migrar a 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 últimas versiones de los SDK AWS CLI y AWS son compatibles con IMDSv2. Para usar IMDSv2, asegúrese de que las instancias de EC2 incluyan las versiones más recientes de los SDK y la CLI. Para obtener información acerca de cómo actualizar la CLI, consulte Instalar, actualizar y desinstalar AWS CLI en la Guía del usuario de AWS Command Line Interface.

Todos los paquetes de software de Amazon Linux 2 y Amazon Linux 2023 son compatibles con IMDSv2. En Amazon Linux 2023, IMDSv1 está deshabilitado de forma predeterminada.

Para conocer las versiones mínimas del AWS SDK compatibles con IMDSv2, consulte Uso de un AWS SDK compatible.

Analizador de paquetes IMDS

El analizador de paquetes IMDS es una herramienta de código abierto que identifica y registra las llamadas de IMDSv1 desde la fase de arranque de la instancia. Esto puede ayudar a identificar el software que realiza llamadas a IMDSv1 en las instancias de EC2, lo que le permitirá determinar exactamente lo que necesita actualizar para que sus instancias estén listas para usar únicamente IMDSv2. Puede ejecutar IMDS Packet Analyzer desde una línea de comandos o instalarlo como un servicio. Para obtener más información, consulta IMDS Packet Analyzer en GitHub.

CloudWatch

IMDSv2 utiliza sesiones respaldadas por tokens, mientras que IMDSv1 no. La métrica MetadataNoToken de CloudWatch realiza un seguimiento del número de llamadas al servicio de metadatos de instancia (IMDS) que están utilizando IMDSv1. Al seguir esta métrica hasta cero, puede determinar si y cuándo se ha actualizado el software para utilizar IMDSv2.

Tras inhabilitar IMDSv1, puede usar la métrica de CloudWatch MetadataNoTokenRejected para hacer un seguimiento del número de veces que se intentó y rechazó una llamada de IMDSv1. Al seguir esta métrica, puede determinar si es necesario actualizar el software para utilizar IMDSv2.

Para obtener más información, consulte Métricas de la instancia.

Actualizaciones de las API y las CLI de EC2

Para las instancias nuevas, puede usar la API RunInstances para iniciar instancias nuevas que exijan el uso de IMDSv2. Para obtener más información, consulte Configurar las opciones de metadatos para instancias nuevas.

En las instancias existentes, puede usar la API ModifyInstanceMetadataOptions para exigir el uso de IMDSv2. Para obtener más información, consulte Configurar las opciones de metadatos para instancias existentes.

Para requerir el uso de IMDSv2 en todas las instancias nuevas iniciadas por grupos de Auto Scaling, los grupos de Auto Scaling pueden utilizar una plantilla de inicialización o una configuración de inicialización. Al crear una plantilla de inicialización o crear una configuración de inicialización, debe configurar los parámetros MetadataOptions para requerir el uso de IMDSv2. El grupo de escalado automático inicia nuevas instancias con la nueva plantilla de inicialización o la configuración de inicialización, pero las instancias existentes no resultan afectadas. Para las instancias existentes en un grupo de escalado automático, puede utilizar la API ModifyInstanceMetadataOptions para requerir el uso de IMDSv2 en las instancias existentes o terminar las instancias y el grupo de escalado automático iniciará nuevas instancias de sustitución con la configuración de las opciones de metadatos de la instancia definida en la plantilla de inicialización o en la configuración de inicialización.

Utilice una AMI que configure IMDSv2 de forma predeterminada

Al iniciar una instancia, puede configurarla automáticamente para que utilice IMDSv2 de forma predeterminada (el parámetro HttpTokens se establece en required) al iniciarlo con una AMI que esté configurada con el parámetro ImdsSupport establecido en v2.0. Puede establecer el parámetro ImdsSupport en v2.0 al registrar la AMI mediante el comando de CLI register-image o puede modificar una AMI existente mediante el comando de CLI modify-image-attribute. Para obtener más información, consulte Configuración de la AMI.

Políticas de IAM y SCP

Puede utilizar una política de IAM o una política de control de servicio (SCP) AWS Organizations para controlar a los usuarios de IAM de la siguiente forma:

  • No se puede iniciar una instancia con la API RunInstances, a menos que la instancia esté configurada para usar IMDSv2.

  • No se puede modificar una instancia en ejecución mediante la API ModifyInstanceMetadataOptions para volver a habilitar IMDSv1.

La política de IAM o SCP debe contener las siguientes claves de condición de IAM:

  • ec2:MetadataHttpEndpoint

  • ec2:MetadataHttpPutResponseHopLimit

  • ec2:MetadataHttpTokens

Si un parámetro en la llamada API o CLI no coincide con el estado especificado en la política que contiene la clave de condición, la llamada API o CLI falla con una respuesta UnauthorizedOperation.

Además, puede elegir una capa de protección adicional para forzar el cambio de IMDSv1 a IMDSv2. En la capa de administración de acceso, en relación con las API que se han llamado con credenciales de rol de EC2, puede usar una clave de condición nueva en políticas de IAM o políticas de control de servicios (SCP) de AWS Organizations. En específico, al usar la clave de condición de política ec2:RoleDelivery con un valor 2.0 en las políticas de IAM, las llamadas a la API realizadas con credenciales de rol de EC2 que se han obtenido de IMDSv1 recibirán la respuesta UnauthorizedOperation. Se puede conseguir lo mismo de forma más extensa si dicha condición la exige una SCP. De esta manera se logra que las credenciales proporcionadas mediante IMDSv1 no se puedan usar para llamar a las API porque cualquier llamada a la API que no cumpla la condición especificada recibirá un error UnauthorizedOperation.

Para ver ejemplos de políticas de IAM, consulte Trabajar con metadatos de instancias. Para obtener más información sobre SCP, consulte Políticas de control de servicios en la Guía del usuario de AWS Organizations.

Si se usan las herramientas anteriores, recomendamos seguir esta ruta para pasar a IMDSv2.

Paso 1: Al principio

Actualice los SDK, las CLI y su software que usan credenciales de rol en sus instancias de EC2 a versiones compatibles con IMDSv2. Para obtener más información sobre cómo actualizar CLI, consulte Actualizar a la versión más reciente de 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 instancia (en otras palabras, que no usan un SDK) con las solicitudes IMDSv2. Puede utilizar el analizador de paquetes IMDS para identificar el software que necesita cambiar para utilizar las solicitudes de IMDSv2.

Paso 2: haga un seguimiento del progreso de la transición

Realice un seguimiento del progreso de la transición utilizando la métrica de CloudWatch MetadataNoToken. Esta métrica muestra la cantidad de llamadas de IMDSv1 a IMDS de las instancias. Para obtener más información, consulte Métricas de la instancia.

Paso 3: cuando no hay uso de IMDSv1

Cuándo la métrica de CloudWatch MetadataNoToken no registra ningún uso de IMDSv1, las instancias están listas para la transición completa al uso de IMDSv2. En esta etapa, puede hacer lo siguiente:

  • Cuenta predeterminada

    Puede configurar IMDSv2 para que sea un requisito predeterminado de la cuenta. Cuando se inicia una instancia, la configuración de la instancia se establece automáticamente en la cuenta predeterminada.

    Para configurar la cuenta predeterminada, haga lo siguiente:

    • Consola Amazon EC2: en el panel de EC2, en Atributos de la cuenta, Protección y seguridad de datos, para ver los valores predeterminados de IMDS, establezca el Servicio de metadatos de instancia en Habilitado y la Versión de metadatos en V2 únicamente (token obligatorio). Para obtener más información, consulte Ajuste de IMDSv2 como valor predeterminado de la cuenta.

    • AWS CLI: use el comando de la CLI modify-instance-metadata-defaults y especifique --http-tokens required y --http-put-response-hop-limit 2.

  • instancias nuevas

    Al iniciar una nueva instancia, puede hacer lo siguiente:

    • Consola de Amazon EC2: En el asistente de instancia de inicialización, establezca Metadata accessible (Metadatos accesibles) en Enabled (Habilitados) y Metadata version (Versión de metadatos) en V2 only (token required) (Solo V2 [token necesario]). Para obtener más información, consulte Configuración de la instancia en el momento de la inicialización.

    • AWS CLI: use el comando de la CLI run-instances y especifique que solo se requiere IMDSv2.

  • instancias existentes

    Para instancias existentes, puede hacer lo siguiente:

    • Consola de Amazon EC2: en la página instancias, seleccione su instancia, elija Acciones, Configuración de la instancia, Modificar las opciones de metadatos de la instancia y, para IMDSv2, elija Obligatorio. Para obtener más información, consulte Requerir el uso de IMDSv2.

    • AWS CLI: utilice el comando de la CLI modify-instance-metadata-options para especificar que solo se debe utilizar IMDSv2.

    Puede modificar las opciones de metadatos de las instancias en ejecución y no es necesario reiniciar las instancias después de modificar las opciones de metadatos de la instancia.

Paso 4: Comprobación de si todas las instancias han pasado a IMDSv2

Puede comprobar si alguna instancia aún no está configurada para requerir el uso de IMDSv2; en otras palabras, IMDSv2 sigue configurado como optional. Si alguna instancia sigue configurada como optional, puede modificar las opciones de metadatos de la instancia para hacer que IMDSv2 sea required mediante la repetición del paso 3 anterior.

Para filtrar las instancias, haga lo siguiente:

  • Consola de Amazon EC2: en la página instancias, filtre las instancias mediante el filtro IMDSv2 = opcional. Para obtener más información sobre cómo filtrar, consulte Filtrar recursos mediante la consola. También puede ver si IMDSv2 es obligatorio u opcional para cada instancia. En la ventana Preferencias, active IMDSv2 para agregar la columna IMDSv2 a la tabla instancias.

  • AWS CLI: utilice el comando de la CLI describe-instances y filtre por metadata-options.http-tokens = optional, de la siguiente manera:

    aws ec2 describe-instances --filters "Name=metadata-options.http-tokens,Values=optional" --query "Reservations[*].Instances[*].[InstanceId]" --output text

Paso 5: Cuando todas las instancias han pasado a IMDSv2

Las claves de condición de IAM ec2:MetadataHttpTokens, ec2:MetadataHttpPutResponseHopLimit y ec2:MetadataHttpEndpoint se pueden utilizar para controlar el uso de las API RunInstances y ModifyInstanceMetadataOptions, así como la CLI correspondiente. Si se crea una política y un parámetro en la llamada a la API no coincide con el estado especificado en la política que usa la clave de condición, la llamada a la API o a la CLI devolverá una respuesta de error UnauthorizedOperation. Para ver ejemplos de políticas de IAM, consulte Trabajar con metadatos de instancias.

Además, después de deshabilitar IMDSv1, puede usar la métrica de CloudWatch MetadataNoTokenRejected para hacer un seguimiento del número de veces que se intentó y rechazó una llamada de IMDSv1. Si, después de deshabilitar IMDSv1, tiene un software que no funciona correctamente y la métrica MetadataNoTokenRejected registra las llamadas de IMDSv1, es probable que este software deba actualizarse para usar IMDSv2.

Uso de un AWS SDK compatible

Para usar IMDSv2, las instancias de EC2 deben usar una versión de AWS SDK que admita el uso de IMDSv2. Las últimas versiones de todos los SDK de AWS son compatibles con IMDSv2.

importante

Le recomendamos que se mantenga al día con las versiones del SDK para estar al tanto de las características, las actualizaciones de seguridad y las dependencias subyacentes más recientes. No se recomienda el uso continuo de una versión del SDK no admitida, hágalo según su criterio. Para obtener más información, consulte Política de mantenimiento de SDK y herramientas de AWS en la Guía de referencia de SDK y herramientas de AWS.

Las siguientes son las versiones mínimas que admiten el uso de IMDSv2:

Ejemplos de IMDSv2

Ejecute los siguientes ejemplos en su instancia de Amazon EC2 para recuperar los metadatos de la instancia para IMDSv2.

En las instancias de Windows, se puede usar Windows PowerShell o instalar cURL o wget. Si se instala una herramienta de terceros en una instancia de Windows, asegúrese de leer detenidamente la documentación asociada, ya que las llamadas y el formato de salida pueden ser distintos a lo que se indica aquí.

Obtener las versiones disponibles de los metadatos de instancia

Este ejemplo obtiene las versiones disponibles de los metadatos de la instancia. Cada versión hace referencia a una compilación de metadatos de instancia correspondiente al momento en que se publicaron nuevas categorías de metadatos de instancia. No existe una correlación entre las versiones de compilación de metadatos de instancia y las versiones de la API de Amazon EC2. Tiene disponibles las versiones anteriores en caso de que tenga scripts que se basen en la estructura y la información presente en la versión anterior.

cURL
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest
PowerShell
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
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest

Obtener los elementos de metadatos del nivel superior

Este ejemplo obtiene los elementos de metadatos del nivel superior. Para obtener más información sobre los elementos en la respuesta, consulte Categorías de metadatos de instancia.

Tenga en cuenta que se incluyen las etiquetas en este resultado solo si ha permitido el acceso. Para obtener más información, consulte Permitir acceso a etiquetas en metadatos de instancia.

cURL
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ events/ hostname iam/ instance-action instance-id instance-life-cycle instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/
PowerShell
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
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname iam/ instance-action instance-id instance-life-cycle instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/

Cómo obtener los valores de los elementos de metadatos

En estos ejemplos se obtienen los valores de algunos elementos de metadatos de nivel superior del ejemplo anterior. Estas solicitudes usan el token almacenado creado mediante el comando del ejemplo anterior. El token no debe estar vencido.

cURL
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com
PowerShell
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com

Obtener la lista de claves públicas disponibles

Este ejemplo obtiene la lista de las claves públicas disponibles.

cURL
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key
PowerShell
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
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key

Mostrar los formatos en los que se encuentra disponible la clave pública 0

Este ejemplo muestra los formatos en los que se encuentra disponible la clave pública 0.

cURL
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/0/ openssh-key
PowerShell
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
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key openssh-key

Obtener la clave pública 0 (en formato de clave OpenSSH)

Este ejemplo obtiene la clave pública 0 (en formato de clave OpenSSH).

cURL
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
PowerShell
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
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key

Obtener el ID de subred de una instancia

Este ejemplo obtiene el ID de subred de una instancia.

cURL
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7
PowerShell
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
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7

Obtener las etiquetas de instancia de una instancia

Si el acceso a las etiquetas de la instancia en los metadatos de instancia está encendido, puede obtener las etiquetas para una instancia de los metadatos de instancia. Para obtener más información, consulte Recuperar etiquetas desde los metadatos de instancia.

Ejemplos de IMDSv1

Ejecute los siguientes ejemplos en su instancia de Amazon EC2 para recuperar los metadatos de la instancia para IMDSv1.

En las instancias de Windows, se puede usar Windows PowerShell o instalar cURL o wget. Si se instala una herramienta de terceros en una instancia de Windows, asegúrese de leer detenidamente la documentación asociada, ya que las llamadas y el formato de salida pueden ser distintos a lo que se indica aquí.

Obtener las versiones disponibles de los metadatos de instancia

Este ejemplo obtiene las versiones disponibles de los metadatos de la instancia. Cada versión hace referencia a una compilación de metadatos de instancia correspondiente al momento en que se publicaron nuevas categorías de metadatos de instancia. No existe una correlación entre las versiones de compilación de metadatos de instancia y las versiones de la API de Amazon EC2. Tiene disponibles las versiones anteriores en caso de que tenga scripts que se basen en la estructura y la información presente en la versión anterior.

cURL
[ec2-user ~]$ curl http://169.254.169.254/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest

Obtener los elementos de metadatos del nivel superior

Este ejemplo obtiene los elementos de metadatos del nivel superior. Para obtener más información sobre los elementos en la respuesta, consulte Categorías de metadatos de instancia.

Tenga en cuenta que se incluyen las etiquetas en este resultado solo si ha permitido el acceso. Para obtener más información, consulte Permitir acceso a etiquetas en metadatos de instancia.

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ events/ hostname iam/ instance-action instance-id instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname iam/ instance-action instance-id instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/

Cómo obtener los valores de los elementos de metadatos

En estos ejemplos se obtienen los valores de algunos elementos de metadatos de nivel superior del ejemplo anterior.

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com

Obtener la lista de claves públicas disponibles

Este ejemplo obtiene la lista de las claves públicas disponibles.

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key

Mostrar los formatos en los que se encuentra disponible la clave pública 0

Este ejemplo muestra los formatos en los que se encuentra disponible la clave pública 0.

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/ openssh-key
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key openssh-key

Obtener la clave pública 0 (en formato de clave OpenSSH)

Este ejemplo obtiene la clave pública 0 (en formato de clave OpenSSH).

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key

Obtener el ID de subred de una instancia

Este ejemplo obtiene el ID de subred de una instancia.

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7

Obtener las etiquetas de instancia de una instancia

Si el acceso a las etiquetas de la instancia en los metadatos de instancia está encendido, puede obtener las etiquetas para una instancia de los metadatos de instancia. Para obtener más información, consulte Recuperar etiquetas desde los metadatos de instancia.