

# Transición al uso de Servicio de metadatos de instancia, versión 2
<a name="instance-metadata-transition-to-version-2"></a>

Si desea configurar las instancias para que solo acepten las llamadas del servicio de metadatos de instancias versión 2 (IMDSv2), recomendamos que utilice las siguientes herramientas y la ruta de transición.

**Topics**
+ [Herramientas para la transición a IMDSv2](#tools-for-transitioning-to-imdsv2)
+ [Ruta recomendada para exigir IMDSv2](#recommended-path-for-requiring-imdsv2)

## Herramientas para la transición a IMDSv2
<a name="tools-for-transitioning-to-imdsv2"></a>

Las siguientes herramientas permiten identificar, supervisar y administrar la transición del software del IMDSv1 al IMDSv2. Para obtener instrucciones sobre cómo utilizar estas herramientas, consulte [Ruta recomendada para exigir IMDSv2](#recommended-path-for-requiring-imdsv2).

**AWS Software de**  
Las últimas versiones de los SDK AWS CLI y AWS son compatibles con IMDSv2. Para utilizar IMDSv2, actualice las instancias de EC2 para hacer uso de las versiones más recientes. Para conocer las versiones mínimas del AWS SDK compatibles con IMDSv2, consulte [Uso de un AWS SDK compatible](configuring-instance-metadata-service.md#use-a-supported-sdk-version-for-imdsv2).  
Todos los paquetes de software de Amazon Linux 2 y Amazon Linux 2023 son compatibles con IMDSv2. Amazon Linux 2023 deshabilita IMDSv1 de forma predeterminada.

**Analizador de paquetes IMDS**  
El analizador de paquetes IMDS es una herramienta de código abierto que identifica y registra las llamadas de IMDSv1 durante la fase de arranque y las operaciones del tiempo de ejecución de la instancia. Con el análisis de estos registros, puede identificar con precisión el software que realiza las llamadas a IMDSv1 en las instancias y determinar qué se debe actualizar para que solo sea compatible con IMDSv2 en las instancias. Puede ejecutar IMDS Packet Analyzer desde una línea de comandos o instalarlo como un servicio. Para obtener más información, consulte [AWS ImdsPacketAnalyzer](https://github.com/aws/aws-imds-packet-analyzer) en *GitHub*.

**CloudWatch**  
CloudWatch ofrece las dos siguientes métricas para supervisar las instancias:  
`MetadataNoToken`: IMDSv2 utiliza sesiones respaldadas por tokens, mientras que IMDSv1 no. La métrica `MetadataNoToken` 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.  
`MetadataNoTokenRejected`: Tras inhabilitar IMDSv1, puede usar la métrica `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 cada instancia de EC2, estas métricas se excluyen mutuamente. Cuando IMDSv1 está activado (`httpTokens = optional`), solo emite `MetadataNoToken`. Cuando IMDSv1 está deshabilitado (`httpTokens = required`), solo emite `MetadataNoTokenRejected`. Para saber cuándo usar estas métricas, consulte [Ruta recomendada para exigir IMDSv2](#recommended-path-for-requiring-imdsv2).  
Para obtener más información, consulte [Métricas de la instancia](viewing_metrics_with_cloudwatch.md#ec2-cloudwatch-metrics).

**Lanzamiento de las API**  
**Instancias nuevas:** Utilice la API [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) para lanzar instancias nuevas que exijan el uso de IMDSv2. Para obtener más información, consulte [Configurar las opciones de metadatos para instancias nuevas](configuring-IMDS-new-instances.md).  
**Instancias existentes:** Utilice la API [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) para exigir el uso de IMDSv2 en las instancias existentes. Para obtener más información, consulte [Configurar las opciones de metadatos para instancias existentes](configuring-IMDS-existing-instances.md).  
**Instancias nuevas lanzadas por los grupos de escalado automático:** Para requerir el uso de IMDSv2 en todas las instancias nuevas lanzadas por grupos de escalado automático, los cuales pueden utilizar una plantilla de lanzamiento o una configuración de lanzamiento. Al [crear una plantilla de inicialización](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) o [crear una configuración de inicialización](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/create-launch-configuration.html), 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.   
**Instancias existentes en un grupo de escalado automático:** Utilice la API [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) para exigir el uso de IMDSv2 en las instancias existentes o terminar las instancias, y el grupo de escalado automático lanzará nuevas instancias de sustitución con la configuración de las opciones de metadatos de la instancia definida en la plantilla de lanzamiento o en la configuración de lanzamiento.

**AMI de**  
Las AMI configuradas con el parámetro `ImdsSupport` establecido en `v2.0`, por defecto, lanzarán las instancias que exigen IMDSv2. Amazon Linux 2023 está configurado con `ImdsSupport = v2.0`.  
**AMI nuevas:** Utilice el comando CLI [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) para establecer el parámetro `ImdsSupport` en `v2.0` al crear una AMI nueva.  
**AMI existentes:** Utilice el comando CLI [modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) para establecer el parámetro `ImdsSupport` en `v2.0` al modificar una AMI existente.  
Para obtener más información, consulte [Configuración de la AMI](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-ami-configuration).

**Controles a nivel de cuenta**  
Puede establecer valores predeterminados para las opciones de metadatos de instancia a nivel de cuenta. Los valores predeterminados se aplican automáticamente al lanzar una instancia. Para obtener más información, consulte [Ajuste de IMDSv2 como valor predeterminado de la cuenta](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults).  
También puede hacer cumplir el requisito de usar IMDSv2 a nivel de cuenta. Cuando la aplicación de IMDSv2 está habilitada:  
+ **Instancias nuevas:** las instancias configuradas para lanzarse con IMDSv1 activado no se iniciarán
+ **Instancias existentes con IMDSv1 deshabilitado:** se impedirán los intentos de habilitar IMDSv1 en las instancias existentes.
+ **Instancias existentes con IMDSv1 activado:** las instancias existentes con IMDSv1 ya activado no se verán afectadas.
Para obtener más información, consulte [Aplicar IMDSv2 a nivel de cuenta](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level).

**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](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), a menos que la instancia esté configurada para usar IMDSv2.
+ No se puede modificar una instancia existente mediante la API [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) 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 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](ExamplePolicies_EC2.md#iam-example-instance-metadata). Para obtener más información sobre las SCP, consulte [Políticas de control de servicios](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) en la *Guía del usuario de AWS Organizations*.

**Políticas declarativas**  
Utilice las políticas declarativas (una característica de AWS Organizations) para configurar de forma predeterminada la cuenta de IMDS, incluida la aplicación de IMDSv2, en toda la organización. Para ver un ejemplo de política, consulte la pestaña **Metadatos de las instancias** en la sección [Políticas declarativas compatibles](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) de la *Guía del usuario de AWS Organizations*.

## Ruta recomendada para exigir IMDSv2
<a name="recommended-path-for-requiring-imdsv2"></a>

**Topics**
+ [Paso 1: Identificar las instancias con IMDSv2=optional y auditar el uso de IMDSv1](#path-step-1)
+ [Paso 2: Actualizar el software a IMDSv2](#path-step-2)
+ [Paso 3: Requerir IMDSv2 en las instancias](#path-step-3)
+ [Paso 4: Establecer IMDSv2=required como predeterminado](#path-step-4)
+ [Paso 5: Aplicar las instancias que requieran IMDSv2](#path-step-5)

### Paso 1: Identificar las instancias con IMDSv2=optional y auditar el uso de IMDSv1
<a name="path-step-1"></a>

Para evaluar el alcance de la migración a IMDSv2, identifique las instancias que estén configuradas para permitir IMDSv1 o IMDSv2 y audite las llamadas a IMDSv1.

1. **Cómo identificar las instancias que están configuradas para permitir IMDSv1 o IMDSv2:**

------
#### [ Amazon EC2 console ]

   1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. En el panel de navegación, seleccione **Instances (Instancias)**.

   1. Para ver solo las instancias configuradas para permitir IMDSv1 o IMDSv2, agregue el filtro **IMDSv2 = optional**.

   1. Como alternativa, para ver si IMDSv2 es **opcional** u **obligatorio** para todas las instancias, abra la ventana de **Preferencias** (icono de engranaje), active **IMDSv2** y seleccione **Confirmar**. Esto agrega la columna **IMDSv2** a la tabla de **Instancias**.

------
#### [ AWS CLI ]

   Utilice el comando [describe-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-options.html) 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
   ```

------

1. **Cómo auditar las llamadas de IMDSv1 en cada instancia:**

   Utilice 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 instancia](https://docs.aws.amazon.com/en_us/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics).

1. **Cómo identificar el software de las instancias que realizan llamadas a IMDSv1:**

   Utilice el [analizador de paquetes IMDS](https://github.com/aws/aws-imds-packet-analyzer) de código abierto para identificar y registrar las llamadas a IMDSv1 durante la fase de arranque y las operaciones de tiempo de ejecución de la instancia. Con esta información, puede identificar el software que se va a actualizar para que las instancias estén listas para utilizarse únicamente con IMDSv2. Puede ejecutar IMDS Packet Analyzer desde una línea de comandos o instalarlo como un servicio.

### Paso 2: Actualizar el software a IMDSv2
<a name="path-step-2"></a>

Actualice todos los SDK, las 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 la actualización de la CLI, consulte [Instalación o actualización a la versión más reciente de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) en la *Guía del usuario de AWS Command Line Interface*.

### Paso 3: Requerir IMDSv2 en las instancias
<a name="path-step-3"></a>

Tras confirmar que no hubo llamadas de IMDSv1 mediante la métrica `MetadataNoToken`, configure las instancias existentes para que requieran IMDSv2. Además, configure todas las instancias nuevas para que requieran IMDSv2. Es decir, deshabilite IMDSv1 en todas las instancias nuevas y existentes.

1. **Cómo configurar las instancias existentes para que requieran IMDSv2:**

------
#### [ Amazon EC2 console ]

   1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. En el panel de navegación, seleccione **Instances (Instancias)**.

   1. Seleccione la instancia.

   1. Elija **Acciones**, **Configuración de la instancia** y **Modificar opciones de metadatos de instancia**.

   1. En **IMDSv2**, seleccione **Obligatorio**.

   1. Seleccione **Save**.

------
#### [ AWS CLI ]

   Utilice el comando de la CLI [modify-instance-metadata-options](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-options.html) para especificar que solo se debe utilizar IMDSv2. 

------
**nota**  
Modifique esta configuración en las instancias en ejecución. El cambio se aplica de inmediato sin necesidad de reiniciar la instancia.

   Para obtener más información, consulte [Requerir el uso de IMDSv2](configuring-IMDS-existing-instances.md#modify-require-IMDSv2).

1. **Cómo controlar los problemas después de deshabilitar IMDSv1:**

   1. Realice un seguimiento del número de veces que se intentó realizar una llamada de IMDSv1 y se rechazó con la métrica de CloudWatch `MetadataNoTokenRejected`.

   1. Si la métrica `MetadataNoTokenRejected` registra las llamadas de IMDSv1 a una instancia que tiene problemas de software, esto indica que es necesario actualizar el software para poder utilizar IMDSv2.

1. **Cómo configurar las nuevas instancias para que requieran IMDSv2:**

------
#### [ Amazon EC2 console ]

   1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Siga estos pasos para [lanzar una instancia](ec2-launch-instance-wizard.md).

   1. Amplíe **Detalles avanzados** y, en **Versión de metadatos**, seleccione **Solo V2 (se requiere un token)**.

   1. En el panel **Resumen**, revise la configuración de la instancia y, a continuación, elija **Iniciar instancia**.

      Para obtener más información, consulte [Configuración de la instancia en el momento de la inicialización](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-instance-settings).

------
#### [ AWS CLI ]

   AWS CLI: use el comando [run-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/run-instances.html) y especifique que solo se requiere IMDSv2.

------

### Paso 4: Establecer IMDSv2=required como predeterminado
<a name="path-step-4"></a>

Estableza IMDSv2=required como configuración predeterminada a nivel de cuenta o de organización. Esto garantiza que todas las instancias recién lanzadas se configuren automáticamente para que requieran IMDSv2.

1. **Cómo establecer el nivel de cuenta predeterminado:**

------
#### [ Amazon EC2 console ]

   1. Abra la consola de Amazon EC2 en [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. En el panel de navegación, elija **Panel**.

   1. En la tarjeta **Atributos de cuenta**, en **Configuración**, elija **Protección y seguridad de datos**.

   1. En **Valores predeterminados de IMDS**, seleccione **Administrar**.

   1. En **Servicio de metadatos de instancia**, seleccione **Habilitado**.

   1. En **Versión de metadatos**, elija **Solo V2 (token obligatorio)**.

   1. Elija **Actualizar**.

------
#### [ AWS CLI ]

   Utilice el comando de la CLI [modify-instance-metadata-defaults](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-defaults.html) y especifique `--http-tokens required` y `--http-put-response-hop-limit 2`.

------

   Para obtener más información, consulte [Ajuste de IMDSv2 como valor predeterminado de la cuenta](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults).

1. **Como alternativa, establezca los valores predeterminados a nivel de organización mediante una política declarativa:**

   Utilice una política declarativa para establecer como obligatorio el valor predeterminado de la organización para IMDSv2. Para ver un ejemplo de política, consulte la pestaña **Metadatos de las instancias** en la sección [Políticas declarativas compatibles](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) de la *Guía del usuario de AWS Organizations*.

### Paso 5: Aplicar las instancias que requieran IMDSv2
<a name="path-step-5"></a>

Una vez que haya confirmado que ninguna de sus instancias depende de IMDSv1, le recomendamos que aplique IMDSv2 en todas las instancias nuevas.

Utilice una de las opciones siguientes para aplicar IMDSv2:

1. **Aplica IMDSv2 con una propiedad de cuenta**

   Puede aplicar el uso de IMDSv2 a nivel de cuenta para cada Región de AWS. Cuando se aplican, las instancias solo se pueden lanzar si están configuradas para que exijan IMDSv2. Esta aplicación se aplica independientemente de cómo esté configurada la instancia o la AMI. Para obtener más información, consulte [Aplicar IMDSv2 a nivel de cuenta](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level). Para aplicar esta configuración a nivel de organización, defina una política declarativa. Para ver un ejemplo de política, consulte la pestaña **Metadatos de las instancias** en la sección [Políticas declarativas compatibles](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) de la *Guía del usuario de AWS Organizations*.

   Para evitar que se revoque la aplicación, debe utilizar una política de IAM para impedir el acceso a la API [ModifyInstanceMetadataDefaults.](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataDefaults.html) Para obtener más información, consulte [Uso de una política de IAM](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-iam-policy).
**nota**  
Esta configuración no cambia la versión de IMDS de las instancias existentes, pero bloquea la activación de IMDSv1 en las instancias existentes que actualmente tienen inhabilitado IMDSv1.
**aviso**  
Si la aplicación de IMDSv2 está habilitada y `httpTokens` no está establecida en la configuración de la instancia `required` en el momento del lanzamiento, en la configuración de la cuenta o en la configuración de la AMI, el lanzamiento de la instancia fallará. Para obtener información sobre la resolución de problemas, consulte [Se produce un error al lanzar una instancia habilitada para IMDSv1](troubleshooting-launch.md#launching-an-imdsv1-enabled-instance-fails).

1. **Como alternativa, aplique IMDSv2 mediante las siguientes claves de condición de IAM o SCP:**
   + `ec2:MetadataHttpTokens`
   + `ec2:MetadataHttpPutResponseHopLimit`
   + `ec2:MetadataHttpEndpoint`

   Estas claves de condición controlan el uso de las API [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) y [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html), así como las CLI correspondientes. 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](ExamplePolicies_EC2.md#iam-example-instance-metadata).