Configuración del servicio de metadatos de instancia - Amazon Elastic Compute Cloud

Configuración del servicio de 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 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

De forma predeterminada, puede usar IMDSv1 o IMDSv2, o ambos. El servicio de metadatos de instancia distingue entre solicitudes IMDSv1 y IMDSv2 en función de si, en cualquier solicitud, los encabezados PUT o GET, que son exclusivos de IMDSv2, están presentes en dicha solicitud.

Puede configurar el servicio de metadatos de instancia en cada instancia de tal manera 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 instancia.

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.

En el siguiente ejemplo se usa un script de shell Linux y IMDSv2 para recuperar los elementos de metadatos de la instancia de nivel superior. El comando de 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

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

[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" -v 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 lanzar 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" -v 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. Incluir el token en todas las solicitudes GET del servicio de metadatos de instancia. 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 modify-instance-metadata-options en la AWS CLI Command Reference.

    • El token es una clave específica de la instancia. El token no es válido en otras instancias 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 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 instancia. 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 el número de token simultáneos, que represente a su propia sesión. Sin embargo, IMDSv2 sigue limitado por la conexión normal del servicio de metadatos de instancia y los límites controlados. Para obtener más información, consulte Limitación controlada.

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. Puede ajustar el límite de saltos con el comando modify-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 modify-instance-metadata-options en la AWS CLI Command Reference.

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

El uso de Servicio de metadatos de instancia versión 2 (IMDSv2) es opcional. Servicio de metadatos de instancia 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 y las CLI de AWS admiten IMDSv2. Para usar IMDSv2, asegúrese de que las instancias EC2 incluyan las versiones más recientes de los SDK y las CLI de AWS. Para obtener más información sobre cómo actualizar la CLI, consulte Actualización a la versión más reciente de la AWS CLI en la AWS Command Line Interface Guía del usuario.

  • CloudWatch: IMDSv2 utiliza sesiones respaldadas por token, mientras que IMDSv1, no. La métrica MetadataNoToken de CloudWatch realiza un seguimiento del número de llamadas al servicio de metadatos de instancia 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. Para obtener más información, consulte Métricas de la instancia.

  • Actualizaciones a API y CLI de EC2: para las instancias existentes, puede utilizar el comando de la CLI modify-instance-metadata-options (o la API ModifyInstanceMetadataOptions) para exigir el uso de IMDSv2. Para las instancias nuevas, puede usar el comando de la CLI run-instances (o la API RunInstances) y el parámetro metadata-options para lanzar instancias nuevas que exijan el uso de IMDSv2.

    Para exigir el uso de IMDSv2 en todas las instancias nuevas lanzadas por grupos de Auto Scaling, los grupos de Auto Scaling deben usar plantillas de lanzamiento. Cuando cree una plantilla de lanzamiento, configure los parámetros MetadataOptions para que requieran el uso de IMDSv2. Para los grupos de Auto Scaling que utilizan configuraciones de lanzamiento, reemplace las configuraciones de lanzamiento por plantillas de lanzamiento. Después de reemplazar una configuración de lanzamiento por una plantilla de lanzamiento, el grupo de Auto Scaling lanza las nuevas instancias con la nueva plantilla de lanzamiento, pero las instancias existentes no se ven afectadas. Utilice el comando de la CLI modify-instance-metadata-options (o la API ModifyInstanceMetadataOptions ) para requerir el uso de IMDSv2 en las instancias existentes, o termine las instancias y el grupo de Auto Scaling lanzará nuevas instancias de sustitución con la configuración de las opciones de metadatos de la instancia definida en la plantilla de lanzamiento.

  • SCP y políticas de IAM: puede usar una condición de IAM para impedir que los usuarios de IAM puedan lanzar una instancia a menos que esta utilice IMDSv2. También puede usar condiciones de IAM para forzar que los usuarios de IAM no puedan modificar las instancias en ejecución para reactivar IMDSv1 y para forzar que el servicio de metadatos de instancia esté disponible en la instancia.

    Las claves de condición de IAM ec2:MetadataHttpTokens, ec2:MetadataHttpPutResponseHopLimit y ec2:MetadataHttpEndpoint se pueden usar 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. Estas claves de condición se pueden utilizar en las políticas de IAM o en las políticas de control de servicios (SCP) de AWS Organizations.

    Además, puede elegir una capa de protección adicional para forzar el cambio de IMDSv1 a IMDSv2. En la capa de gestión del 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 cualquier política de IAM o política de control de servicios de AWS Organizations (SCP). En especial, 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 obtenidas 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, consulte Políticas de control de servicios en la Guía del usuario de AWS Organizations.

Ruta recomendada para exigir el acceso a IMDSv2

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

Paso 1: Al principio

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

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.

Paso 2: Durante la transición

Realice un seguimiento del progreso de la transición utilizando la métrica MetadataNoToken de CloudWatch. 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 Métricas de la instancia.

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

Todo está listo en todas las instancias cuando la métrica MetadataNoToken de CloudWatch muestra un uso de IMDSv1 igual a cero. En esta etapa, puede hacer lo siguiente:

  • En las instancias existentes, puede exigir el uso de IMDSv2 con el comando modify-instance-metadata-options. Puede hacer estos cambios en instancias en ejecución. No es necesario que reinicie las instancias.

  • En el caso de las instancias nuevas, cuando lance una nueva instancia, puede utilizar el comando run-instances para especificar que solo se va a utilizar IMDSv2.

La especificación de las opciones de metadatos de instancia solo está disponible a través de la API o la CLI de AWS; actualmente, no está disponible en la Consola de administración de AWS. Para obtener más información, consulte Configuración de las opciones de metadatos de instancia.

Paso 4: Cuando todas las instancias han pasado a IMDSv2

Las claves de condición de IAM ec2:MetadataHttpTokens, ec2:MetadataHttpPutResponseHopLimit y ec2:MetadataHttpEndpoint se pueden usar 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.

Configuración de las opciones de metadatos de instancia

Las opciones de metadatos de instancia le permiten configurar instancias nuevas o existentes para hacer lo siguiente:

  • Requerir el uso de IMDSv2 al solicitar metadatos de instancia

  • Especificar el límite de saltos de respuesta de PUT

  • Desactivar el acceso a los metadatos de instancia

También puede utilizar claves de condición de IAM en una política de IAM o SCP para hacer lo siguiente:

  • Permitir que una instancia se lance únicamente si está configurada para requerir el uso de IMDSv2

  • Restringir el número de saltos permitidos

  • Desactivar el acceso a los metadatos de instancia

Para configurar las opciones de metadatos de instancia en instancias nuevas o existentes, use el SDK o la CLI de AWS. Para obtener más información, consulte run-instances y modify-instance-metadata-options en la AWS CLI Command Reference.

nota

Debe proceder con cautela y realizar pruebas antes de realizar cambios. Tome nota de lo siguiente:

  • Si fuerza el uso de IMDSv2, las aplicaciones o los agentes que usen IMDSv1 para acceder a metadatos de instancia se interrumpirán.

  • Si desactiva todo acceso a los metadatos de instancia, las aplicaciones o los agentes que confíen en que el acceso a metadatos de instancia funcione, se interrumpirán.

Configuración de las opciones de metadatos en instancias nuevas

Puede exigir que se utilice IMDSv2 en una instancia cuando lance dicha instancia. También puede crear una política de IAM que impida a los usuarios iniciar nuevas instancias a menos que exijan el uso de IMDSv2 en la nueva instancia.

Para exigir el uso de IMDSv2 en una nueva instancia

En el siguiente ejemplo de run-instances, se lanza una instancia c3.large con --metadata-options establecido en HttpTokens=required. Cuando se especifica un valor para HttpTokens, también se debe establecer HttpEndpoint en enabled. Como el encabezado de token seguro está establecido en required para las solicitudes de recuperación de metadatos, esta opción indica a la instancia que exija el uso de IMDSv2 al solicitar metadatos de instancia.

aws ec2 run-instances --image-id ami-0abcdef1234567890 --instance-type c3.large ... --metadata-options "HttpEndpoint=enabled,HttpTokens=required"

Para forzar el uso de IMDSv2 en todas las instancias nuevas

Para asegurarse de que los usuarios de IAM solo puedan lanzar instancias que exigen el uso de IMDSv2 al solicitar metadatos de instancia, puede especificar que la condición para exigir IMDSv2 debe cumplirse antes de lanzar una instancia. Para ver una política de IAM de ejemplo, consulte Trabajar con metadatos de instancias.

Para desactivar el acceso a los metadatos de instancia

Para asegurarse de que el acceso a los metadatos de la instancia está desactivado, independientemente de la versión del servicio de metadatos de instancia que esté utilizando, inicie la instancia con el valor --metadata-options establecido en HttpEndpoint=disabled. Puede activar el acceso más adelante mediante el comando modify-instance-metadata-options .

aws ec2 run-instances --image-id ami-0abcdef1234567890 --instance-type c3.large ... --metadata-options "HttpEndpoint=disabled"

Configuración de opciones de metadatos en instancias existentes

Para exigir el uso de IMDSv2 en una instancia existente También puede cambiar el límite de saltos de respuesta de PUT y desactivar el acceso a los metadatos en una instancia existente. Además, puede crear una política de IAM que impida a los usuarios modificar las opciones de metadatos de una instancia existente.

Para exigir el uso de IMDSv2 en una instancia existente

En las instancias existentes, puede optar por exigir el uso de IMDSv2 al solicitar metadatos de instancia. Use el comando de la CLI modify-instance-metadata-options y establezca el parámetro http-tokens en required.

nota

Cuando especifique un valor para http-tokens, también tendrá que establecer http-endpoint en enabled.

aws ec2 modify-instance-metadata-options \ --instance-id i-1234567898abcdef0 \ --http-tokens required \ --http-endpoint enabled

Para modificar el límite de saltos de respuesta PUT en una instancia existente

En las instancias existentes, puede modificar la configuración del límite de saltos de respuesta PUT. Use el comando de la CLI modify-instance-metadata-options y establezca el parámetro http-put-response-hop-limit en el número de saltos necesario. En el siguiente ejemplo, el límite de saltos se ha establecido en 3. Tenga en cuenta que al especificar un valor para http-put-response-hop-limit, también debe establecer http-endpoint en enabled.

aws ec2 modify-instance-metadata-options \ --instance-id i-1234567898abcdef0 \ --http-put-response-hop-limit 3 \ --http-endpoint enabled

Para desactivar el acceso a los metadatos de instancia en una instancia existente

En las instancias existentes, para desactivar el acceso a los metadatos de instancia puede desconectar el punto de enlace HTTP del servicio de metadatos de instancia, sin importar la versión del servicio de metadatos de instancia que use. Puede anular este cambio en cualquier momento mediante la activación del punto de enlace HTTP. Use el comando de la CLI modify-instance-metadata-options y establezca el parámetro http-endpoint en disabled.

aws ec2 modify-instance-metadata-options \ --instance-id i-1234567898abcdef0 \ --http-endpoint disabled

Para controlar el uso de modify-instance-metadata-options

Para controlar qué usuarios de IAM pueden modificar las opciones de metadatos de una instancia existente, puede especificar una política que impida a todos los usuarios que no tengan un rol determinado utilizar la API ModifyInstanceMetadataOptions. Para ver una política de IAM de ejemplo, consulte Trabajar con metadatos de instancias.