Transição para usar o Serviço de metadados da instância versão 2 - Amazon Elastic Compute Cloud

Transição para usar o Serviço de metadados da instância versão 2

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.

Ferramentas para fazer a transição para o IMDSv2

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.

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.

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 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.

Para obter mais informações, consulte Métricas de instância.

Inicie APIs

Novas instâncias: use a API RunInstances 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.

Instâncias existentes: use a API ModifyInstanceMetadataOptions 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.

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 ou cria uma configuração de execução, é 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 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 para definir o parâmetro ImdsSupport como v2.0 ao criar uma nova AMI.

AMIs existentes: use o comando da CLI modify-image-attribute para definir o parâmetro ImdsSupport como v2.0 ao modificar uma AMI existente.

Para obter mais informações, consulte Configurar a AMI.

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.

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.

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, 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 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. Para obter mais informações sobre SCPs, consulte Políticas de controle de serviço 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 no Guia do usuário do AWS Organizations.

Etapa 1: identificar instâncias com IMDSv2=opcional e auditar o uso do IMDSv1

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/.

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

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

    4. 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 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
  2. 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.

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

    Use o 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

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 no Guia do usuário da AWS Command Line Interface.

Etapa 3: exigir o IMDSv2 nas instâncias

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/.

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

    3. Selecione sua instância.

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

    5. Em IMDSv2, escolha Obrigatório.

    6. Escolha Salvar.

    AWS CLI

    Use o comando modify-instance-metadata-options 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.

  2. 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.

    2. 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.

  3. 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/.

    2. Siga estas etapas para executar uma instância.

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

    4. 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.

    AWS CLI

    AWS CLI: use o comando run-instances e especifique que o IMDSv2 é obrigatório.

Etapa 4: definir IMDSv2=obrigatório como padrão

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/.

    2. No painel de navegação, escolha Painel.

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

    4. Em Padrões do IMDS, escolha Gerenciar.

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

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

    7. Selecione Atualizar.

    AWS CLI

    Use o comando modify-instance-metadata-defaults 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.

  2. 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 no Guia do usuário do AWS Organizations.

Etapa 5: impor instâncias que exijam o IMDSv2

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. 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 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. Para obter mais informações, consulte Usar uma política do IAM.

    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.

  2. 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, da API ModifyInstanceMetadataOptions 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.