

# Transição para usar o Serviço de metadados da instância versão 2
<a name="instance-metadata-transition-to-version-2"></a>

Se você deseja configurar suas instâncias para aceitar somente chamadas da versão 2 do serviço de metadados de instância (IMDSv2), recomendamos que use as ferramentas e o caminho de transição apresentados a seguir.

**Topics**
+ [Ferramentas para fazer a transição para o IMDSv2](#tools-for-transitioning-to-imdsv2)
+ [Caminho recomendado para exigir IMDSv2](#recommended-path-for-requiring-imdsv2)

## Ferramentas para fazer a transição para o IMDSv2
<a name="tools-for-transitioning-to-imdsv2"></a>

As ferramentas a seguir podem ajudar a identificar, monitorar e gerenciar a transição do seu software do IMDSv1 para o IMDSv2. Para obter instruções sobre como usar as ferramentas, consulte [Caminho recomendado para exigir IMDSv2](#recommended-path-for-requiring-imdsv2).

**AWS Software da**  
As versões mais recentes da AWS CLI e dos AWS SDKs são compatíveis com o IMDSv2. Para usar o IMDSv2, atualize as instâncias do EC2 para usar as versões mais recentes. Para obter as versões mínimas do AWS SDK compatíveis com IMDSv2, consulte [Usar um AWS SDK compatível](configuring-instance-metadata-service.md#use-a-supported-sdk-version-for-imdsv2).  
Todos os pacotes de software Amazon Linux 2 e Amazon Linux 2023 são compatíveis com o IMDSv2. O Amazon Linux 2023 desabilita o IMDSv1 por padrão.

**IMDS Packet Analyzer**  
O IMDS Packet Analyzer é uma ferramenta de código aberto que identifica e registra as chamadas IMDSv1 durante a fase de inicialização e as operações de runtime da sua instância. Ao analisar esses registros, você pode identificar com precisão o software que faz chamadas do IMDSv1 em suas instâncias e determinar o que precisa ser atualizado para oferecer suporte ao IMDSv2 somente em suas instâncias. É possível executar o IMDS Packet Analyzer em uma linha de comando ou instalá-lo como um serviço. Para obter mais informações, consulte [AWS ImdsPacketAnalyzer](https://github.com/aws/aws-imds-packet-analyzer) no *GitHub*.

**CloudWatch**  
O CloudWatch fornece as duas métricas a seguir para monitorar suas instâncias:  
`MetadataNoToken` – O IMDSv2 usa sessões baseadas em token, enquanto o IMDSv1 não o faz. A métrica `MetadataNoToken` rastreia o número de chamadas para o Serviço de metadados de instância (IMDS) que estão usando o IMDSv1. Rastreando essa métrica até zero, é possível determinar se e quando todo o software foi atualizado para usar o IMDSv2.  
`MetadataNoTokenRejected` – Após desabilitar o IMDSv1, é possível usar a métrica do `MetadataNoTokenRejected` para rastrear o número de vezes que uma chamada do IMDSv1 foi tentada e rejeitada. Ao rastrear essa métrica, você pode verificar se o software precisa ser atualizado para usar o IMDSv2.  
Para cada instância do EC2, essas métricas são mutuamente exclusivas. Quando o IMDSv1 está habilitado (`httpTokens = optional`), só emite `MetadataNoToken`. Quando o IMDSv1 está desabilitado (`httpTokens = required`), só emite `MetadataNoTokenRejected`. Para saber quando usar essas métricas, consulte [Caminho recomendado para exigir IMDSv2](#recommended-path-for-requiring-imdsv2).  
Para obter mais informações, consulte [Métricas de instância](viewing_metrics_with_cloudwatch.md#ec2-cloudwatch-metrics).

**Inicie APIs**  
**Novas instâncias:** use a API [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) para iniciar novas instâncias que exijam o uso do IMDSv2. Para obter mais informações, consulte [Configurar opções de metadados da instância para novas instâncias](configuring-IMDS-new-instances.md).  
**Instâncias existentes:** use a API [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) para exigir o uso do IMDSv2 nas instâncias existentes. Para obter mais informações, consulte [Modificar as opções de metadados de instância para as instâncias existentes](configuring-IMDS-existing-instances.md).  
**Novas instâncias iniciadas pelos grupos do Auto Scaling:** para exigir o uso do IMDSv2 em todas as novas instâncias executadas por grupos do Auto Scaling, seus grupos do Auto Scaling podem usar um modelo de execução ou uma configuração de execução. Quando você [cria um modelo de execução](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) ou [cria uma configuração de execução](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/create-launch-configuration.html), é necessário configurar os parâmetros de `MetadataOptions` para exigir o uso do IMDSv2. O grupo do Auto Scaling inicia novas instâncias usando o novo modelo de execução ou configuração de execução, mas as instâncias existentes não serão afetadas.   
**Instâncias existentes em um grupo do Auto Scaling:** use a API [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) para exigir o uso do IMDSv2 em instâncias existentes, ou encerrar as instâncias e o grupo do Auto Scaling executará novas instâncias de substituição com as configurações das opções de metadados de instância definidas no modelo ou na configuração de execução.

**AMIs**  
As AMIs configuradas com o parâmetro `ImdsSupport` definido como `v2.0` iniciarão instâncias que exigem o IMDSv2 por padrão. O Amazon Linux 2023 está configurado com `ImdsSupport = v2.0`.  
**Novas AMIs:** use o comando da CLI [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) para definir o parâmetro `ImdsSupport` como `v2.0` ao criar uma nova AMI.  
**AMIs existentes:** use o comando da CLI [modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) para definir o parâmetro `ImdsSupport` como `v2.0` ao modificar uma AMI existente.  
Para obter mais informações, consulte [Configurar a AMI](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-ami-configuration).

**Controles no nível de conta**  
Você pode configurar valores padrão para todas as opções de metadados da instância no nível da conta. Os valores padrão são aplicados automaticamente quando você executa uma instância. Para obter mais informações, consulte [Definir o IMDSv2 como o padrão para a conta](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults).  
Você também pode impor a exigência de usar o IMDSv2 no nível da conta. Quando a imposição do IMDSv2 está habilitada:  
+ **Novas instâncias:** as instâncias configuradas para serem executadas com o IMDSv1 habilitado falharão na inicialização
+ **Instâncias existentes com o IMDSv1 desativado:** as tentativas de habilitar o IMDSv1 em instâncias existentes serão evitadas.
+ **Instâncias existentes com o IMDSv1 habilitado:** as instâncias existentes com o IMDSv1 já habilitado não serão afetadas.
Para obter mais informações, consulte [Aplique o IMDSv2 no nível da conta](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level).

**Políticas do IAM e SCPs**  
É possível usar uma política do IAM ou uma política de controle de serviços (SCP) do AWS Organizations para controlar os usuários como se segue:  
+ Não é possível iniciar uma instância usando a API [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), a menos que a instância esteja configurada para usar o IMDSv2.
+ Não é possível modificar uma instância em execução usando a API [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) para reabilitar o IMDSv1.
A política do IAM ou a SCP devem conter as seguintes chaves de condição do IAM:  
+ `ec2:MetadataHttpEndpoint`
+ `ec2:MetadataHttpPutResponseHopLimit`
+ `ec2:MetadataHttpTokens`
Se um parâmetro da chamada de API ou CLI não corresponder ao estado especificado na política que contém a chave de condição, a chamada de API ou CLI falhará com uma resposta `UnauthorizedOperation`.  
Além disso, é possível escolher uma camada adicional de proteção para exigir a alteração do IMDSv1 para o IMDSv2. Na camada de gerenciamento de acesso com relação às APIs chamadas por meio de credenciais de função do EC2, é possível usar uma chave de condição nas políticas do IAM ou nas políticas de controle de serviço (SCPs) do AWS Organizations. Especificamente, usando a chave de condição da política `ec2:RoleDelivery` com um valor `2.0` nas políticas do IAM, as chamadas de API feitas com as credenciais do perfil do EC2 obtidas do IMDSv1 receberão uma resposta `UnauthorizedOperation`. A mesma coisa pode ser obtida de forma mais ampla com essa condição exigida por uma SCP. Isso garante que as credenciadas entregues por meio do IMDSv1 não podem ser realmente usadas para chamar APIs porque todas as chamadas à API que não corresponderem à condição especificada receberão um erro `UnauthorizedOperation`.  
Para obter exemplos de políticas do IAM, consulte [Trabalhar com metadados de instância](ExamplePolicies_EC2.md#iam-example-instance-metadata). Para obter mais informações sobre SCPs, consulte [Políticas de controle de serviço](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) no *Guia do usuário do AWS Organizations*.

**Políticas declarativas**  
Use políticas declarativas (um atributo do AWS Organizations) para definir centralmente as configurações padrão da conta IMDS, incluindo a aplicação do IMDSv2, em toda a sua organização. Para ver um exemplo de política, consulte a guia **Metadados da instância** na seção [Políticas declarativas compatíveis](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) no *Guia do usuário do AWS Organizations*.

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

**Topics**
+ [Etapa 1: identificar instâncias com IMDSv2=opcional e auditar o uso do IMDSv1](#path-step-1)
+ [Etapa 2: atualizar o software para o IMDSv2](#path-step-2)
+ [Etapa 3: exigir o IMDSv2 nas instâncias](#path-step-3)
+ [Etapa 4: definir IMDSv2=obrigatório como padrão](#path-step-4)
+ [Etapa 5: impor instâncias que exijam o IMDSv2](#path-step-5)

### Etapa 1: identificar instâncias com IMDSv2=opcional e auditar o uso do IMDSv1
<a name="path-step-1"></a>

Para avaliar seu escopo de migração do IMDSv2, identifique as instâncias configuradas para permitir o IMDSv1 ou o IMDSv2 e audite as chamadas do IMDSv1.

1. **Identifique instâncias configuradas para permitir o IMDSv1 ou o IMDSv2:**

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

   1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. No painel de navegação, escolha **Instances (Instâncias)**.

   1. Para ver somente as instâncias que estão configuradas para permitir IMDSv1 ou IMDSv2, adicione o filtro **IMDSv2 = opcional**.

   1. Como alternativa, para ver se o IMDSv2 é **opcional** ou **obrigatório** para todas as instâncias, abra a janela **Preferências** (ícone de engrenagem), ative o **IMDSv2** e escolha **Confirmar**. Isso adiciona a coluna **IMDSv2** à tabela **Instâncias**.

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

   Use o comando [describe-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-options.html) e filtre por `metadata-options.http-tokens = optional`, da seguinte forma:

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

------

1. **Audite as chamadas do IMDSv1 em cada instância:**

   Use a métrica `MetadataNoToken` do CloudWatch. Esta métrica mostra o número de chamadas IMDSv1 para o IMDS em suas instâncias. Para obter mais informações, consulte [Métricas de instância](https://docs.aws.amazon.com/en_us/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics).

1. **Identifique o software em suas instâncias que fazem chamadas do IMDSv1:**

   Use o [IMDS Packet Analyzer](https://github.com/aws/aws-imds-packet-analyzer) de código aberto para identificar e registrar chamadas do IMDSv1 durante a fase de inicialização e as operações de runtime da sua instância. Use essas informações para identificar o software a atualizar e preparar suas instâncias para usar somente o IMDSv2. É possível executar o IMDS Packet Analyzer em uma linha de comando ou instalá-lo como um serviço.

### Etapa 2: atualizar o software para o IMDSv2
<a name="path-step-2"></a>

Atualize todos os SDKs, as CLIs e o software que usam credenciais de função em suas instâncias para versões compatíveis com o IMDSv2. Para obter mais informações sobre como atualizar a CLI, consulte [Instalação ou atualização para a versão mais recente da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) no *Guia do usuário da AWS Command Line Interface*.

### Etapa 3: exigir o IMDSv2 nas instâncias
<a name="path-step-3"></a>

Depois de confirmar que não há chamadas do IMDSv1 por meio da métrica `MetadataNoToken`, configure suas instâncias existentes para exigir o IMDSv2. Além disso, configure todas as novas instâncias para exigir o IMDSv2. Em outras palavras, desative o IMDSv1 em todas as instâncias novas e existentes.

1. **Configure as instâncias existentes para exigir o IMDSv2:**

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

   1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. No painel de navegação, escolha **Instances (Instâncias)**.

   1. Selecione sua instância.

   1. Escolha **Ações**, **Configurações da instância** e **Modificar opções de metadados da instância**.

   1. Em **IMDSv2**, escolha **Obrigatório**.

   1. Escolha **Salvar**.

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

   Use o comando [modify-instance-metadata-options](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-options.html) da CLI para especificar que apenas o IMDSv2 deverá ser usado. 

------
**nota**  
É possível modificar essa configuração em instâncias em execução. A alteração entra em vigor imediatamente sem a necessidade de reiniciar a instância.

   Para obter mais informações, consulte [Exigir o uso de IMDSv2](configuring-IMDS-existing-instances.md#modify-require-IMDSv2).

1. **Monitore os problemas após a desativação do IMDSv1:**

   1. Rastreie o número de vezes que uma chamada do IMDSv1 foi tentada e rejeitada com a métrica `MetadataNoTokenRejected` do CloudWatch.

   1. Se a métrica `MetadataNoTokenRejected` registrar chamadas do IMDSv1 em uma instância com problemas de software, isso indica que o software precisa ser atualizado para usar o IMDSv2.

1. **Configure novas instâncias para exigir o IMDSv2:**

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

   1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Siga estas etapas para [executar uma instância](ec2-launch-instance-wizard.md).

   1. Expanda **Detalhes avançados** e, para a **versão de metadados**, escolha **somente V2 (token obrigatório)**.

   1. No painel **Resumo**, analise a configuração da instância e selecione **Iniciar instância**.

      Para obter mais informações, consulte [Configurar a instância na inicialização](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-instance-settings).

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

   AWS CLI: use o comando [run-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/run-instances.html) e especifique que o IMDSv2 é obrigatório.

------

### Etapa 4: definir IMDSv2=obrigatório como padrão
<a name="path-step-4"></a>

Você pode definir IMDSv2=obrigatório como a configuração padrão no nível da conta ou da organização. Isso garante que todas as instâncias recém-lançadas sejam automaticamente configuradas para exigir o IMDSv2.

1. **Definir padrão por conta:**

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

   1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. No painel de navegação, escolha **Painel**.

   1. No cartão **Atributos da conta**, em **Configurações**, escolha **Proteção e segurança de dados**.

   1. Em **Padrões do IMDS**, escolha **Gerenciar**.

   1. Em **Serviço de metadados de instância**, escolha **Habilitado**.

   1. Em **Versão de metadados**, selecione **Apenas V2 (token obrigatório)**.

   1. Selecione **Atualizar**.

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

   Use o comando [modify-instance-metadata-defaults](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-defaults.html) da CLI e especifique `--http-tokens required` e `--http-put-response-hop-limit 2`.

------

   Para obter mais informações, consulte [Definir o IMDSv2 como o padrão para a conta](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults).

1. **Como alternativa, defina o padrão no nível da organização usando uma Política Declarativa:**

   Use uma política declarativa para definir o padrão da organização para o IMDSv2 como obrigatório. Para ver um exemplo de política, consulte a guia **Metadados da instância** na seção [Políticas declarativas compatíveis](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) no *Guia do usuário do AWS Organizations*.

### Etapa 5: impor instâncias que exijam o IMDSv2
<a name="path-step-5"></a>

Depois de confirmar que não há dependência do IMDSv1 em nenhuma de suas instâncias, recomendamos que você aplique o IMDSv2 em todas as novas instâncias.

Use uma das seguintes opções a seguir para impor o IMDSv2:

1. **Impor o IMDSv2 com uma propriedade de conta**

   Você pode impor o uso do IMDSv2 por conta para cada Região da AWS. Quando impostas, as instâncias só podem ser iniciadas se estiverem configuradas para exigir o IMDSv2. Essa imposição se aplica independentemente de como a instância ou a AMI estejam configuradas. Para obter mais informações, consulte [Aplique o IMDSv2 no nível da conta](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level). Para aplicar essa configuração no nível da organização, defina uma política declarativa. Para ver um exemplo de política, consulte a guia **Metadados da instância** na seção [Políticas declarativas compatíveis](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) no *Guia do usuário do AWS Organizations*.

   Para evitar a reversão da imposição, você deve usar uma política do IAM para impedir o acesso à API [ModifyInstanceMetadataDefaults](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataDefaults.html). Para obter mais informações, consulte [Usar uma política do IAM](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-iam-policy).
**nota**  
Essa configuração não altera a versão do IMDS das instâncias existentes, mas bloqueia a ativação do IMDSv1 em instâncias existentes que atualmente têm o IMDSv1 desabilitado.
**Atenção**  
Se a imposição do IMDSv2 estiver habilitada e o `httpTokens` não tiver sido definido para `required` na configuração da instância na inicialização, nas configurações da conta ou na configuração da AMI, sua execução falhará. Para obter informações sobre a solução de problemas, consulte [Falha na inicialização de uma instância habilitada para IMDSv1](troubleshooting-launch.md#launching-an-imdsv1-enabled-instance-fails).

1. **Como alternativa, impor o IMDSv2 usando as seguintes chaves de condição do IAM ou do SCP:**
   + `ec2:MetadataHttpTokens`
   + `ec2:MetadataHttpPutResponseHopLimit`
   + `ec2:MetadataHttpEndpoint`

   Essas chaves de condição controlam o uso de [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), da API [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) e da CLI correspondente. Se uma política for criada, e um parâmetro na chamada à API não corresponder ao estado especificado na política usando a chave de condição, a chamada à API ou à CLI falhará com uma resposta `UnauthorizedOperation`.

   Para obter exemplos de políticas do IAM, consulte [Trabalhar com metadados de instância](ExamplePolicies_EC2.md#iam-example-instance-metadata).