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ê optar por migrar para o IMDSv2, recomendamos que use as ferramentas e o caminho de transição a seguir.

Ferramentas para ajudar com a transição para o IMDSv2

Se seu software usar o IMDSv1, use as ferramentas a seguir para ajudar a configurar o software para usar o IMDSv2.

Software da AWS

As versões mais recentes da AWS CLI e dos AWS SDKs são compatíveis com o IMDSv2. Para usar o IMDSv2, certifique-se de que as instâncias do EC2 tenham as versões mais recentes da CLI e dos SDKs. Para obter informações sobre como atualizar a CLI, consulte Instalação, atualização e desinstalação da AWS CLI no Guia do usuário da AWS Command Line Interface.

Todos os pacotes de software Amazon Linux 2 e Amazon Linux 2023 são compatíveis com o IMDSv2. No Amazon Linux 2023, o IMDSv1 é desabilitado por padrão.

Para obter as versões mínimas do AWS SDK compatíveis com IMDSv2, consulte Usar um AWS SDK compatível.

IMDS Packet Analyzer

O IMDS Packet Analyzer é uma ferramenta de código aberto que identifica e registra as chamadas IMDSv1 da fase de inicialização da sua instância. Isso pode ajudar a identificar o software que faz chamadas IMDSv1 em instâncias do EC2, permitindo que você identifique exatamente o que precisa atualizar para preparar suas instâncias para usar somente o IMDSv2. Você pode executar o IMDS Packet Analyzer em uma linha de comando ou instalá-lo como um serviço. Para obter mais informações, consulte IMDS Packet Analyzer no GitHub.

CloudWatch

O IMDSv2 usa sessões baseadas em token, enquanto o IMDSv1 não o faz. A métrica MetadataNoToken do CloudWatch rastreia o número de chamadas para o Serviço de metadados da 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.

Após desabilitar o IMDSv1, é possível usar a métrica MetadataNoTokenRejected do CloudWatch 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 ter mais informações, consulte Métricas de instância.

Atualizações para APIs e CLIs do EC2

Para novas instâncias, é possível usar a API RunInstances para executar novas instâncias que exijam o uso do IMDSv2. Para ter mais informações, consulte Configurar opções de metadados da instância para novas instâncias.

Para instâncias existentes, é possível usar a API ModifyInstanceMetadataOptions para exigir o uso do IMDSv2. Para ter mais informações, consulte Modificar as opções de metadados de instância para as instâncias existentes.

Para exigir o uso do IMDSv2 em todas as novas instâncias executadas por grupos de Auto Scaling, seus grupos de 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. Para instâncias existentes em um grupo do Auto Scaling, é possível usar 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.

Usar uma AMI que configura o IMDSv2 por padrão

Ao iniciar uma instância, você pode configurá-la automaticamente para usar o IMDSv2 por padrão (o parâmetro HttpTokens é definido como required) iniciando-a com uma AMI configurada com o parâmetro ImdsSupport definido como v2.0. É possível definir o parâmetro ImdsSupport como v2.0 ao registrar a AMI usando o comando register-image da CLI, ou modificar uma AMI existente usando o comando modify-image-attribute da CLI. Para ter mais informações, consulte Configurar a AMI.

Políticas do IAM e SCPs

Você pode 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 nova 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.

Usando as ferramentas acima, recomendamos que você siga este caminho para fazer a transição para o IMDSv2.

Etapa 1: No início

Atualize os SDKs, as CLIs e os programas de software que usam credenciais do perfil nas instâncias do EC2 para versões compatíveis com o IMDSv2. Para obter informações sobre como atualizar a CLI, consulte Atualização para a versão mais recente da AWS CLI no Guia do usuário da AWS Command Line Interface.

Depois, altere o software que acessa os metadados da instância diretamente (ou seja, que não usa um SDK) usando as solicitações do IMDSv2. Você pode usar o IMDS Packet Analyzer para identificar o software que você precisa alterar para usar as solicitações IMDSv2.

Etapa 2: acompanhar o andamento da transição

Acompanhe o andamento da transição usando a métrica do CloudWatch MetadataNoToken. Esta métrica mostra o número de chamadas IMDSv1 para o IMDS em suas instâncias. Para ter mais informações, consulte Métricas de instância.

Etapa 3: quando a utilização do IMDSv1 é zero

Quando a métrica MetadataNoToken do CloudWatch registra uma utilização zero do IMDSv1, as instâncias estão prontas para passar a usar o IMDSv2. Nessa fase, é possível fazer o seguinte:

  • Padrão da conta

    Você pode definir o IMDSv2 como obrigatório como o padrão da conta. Quando uma instância é executada, a configuração da instância é definida automaticamente como a conta padrão.

    Para definir a conta padrão, faça o seguinte:

    • Console do Amazon EC2: no painel do EC2, em Atributos da conta, Proteção e segurança de dados, em Padrões do IMDS, defina Serviço de metadados da instância como Habilitado e Versão de metadados como Somente V2 (requer token). Para ter mais informações, consulte Definir o IMDSv2 como o padrão para a conta.

    • AWS CLI: use o comando modify-instance-metadata-defaults da CLI e especifique --http-tokens required e --http-put-response-hop-limit 2.

  • Instâncias novas

    Ao iniciar uma nova instância, você pode fazer o seguinte:

    • No console do Amazon EC2: no assistente de inicialização de instância, defina Metadata accessible (Metadados acessíveis) como Enabled (Habilitado) e Metadata version (Versão de metadados) como V2 only (token required) (Apenas V2 [token obrigatório]). Para ter mais informações, consulte Configurar a instância na inicialização.

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

  • Instâncias existentes

    Para instâncias existentes, é possível fazer o seguinte:

    • Console do Amazon EC2: na página Instâncias, selecione sua instância, escolha Ações, Configurações da instância, Modificar opções de metadados da instância e, para IMDSv2, escolha Obrigatório. Para ter mais informações, consulte Exigir o uso de IMDSv2.

    • AWS CLI: use o comando modify-instance-metadata-options da CLI para especificar que apenas o IMDSv2 deverá ser usado.

    É possível modificar as opções de metadados da instância em instâncias em execução, e você não precisará reiniciá-las depois de modificar as opções de metadados da instância.

Etapa 4: verificar se suas instâncias fizeram a transição para o IMDSv2

É possível verificar se alguma instância ainda não está configurada para exigir o uso do IMDSv2, em outras palavras, se o IMDSv2 ainda está configurado como optional. Se alguma instância ainda estiver configurada como optional, será possível modificar as opções de metadados da instância para tornar o IMDSv2 required. Para isso, repita a Etapa 3.

Para filtrar suas instâncias:

  • Console do Amazon EC2: na página Instâncias, filtre suas instâncias usando o filtro IMDSv2 = opcional. Para obter mais informações sobre filtragem, consulte Filtrar recursos usando o console. Você também pode ver se o IMDSv2 é obrigatório ou opcional para cada instância: na janela Preferências. Ative o IMDSv2 para adicionar a coluna IMDSv2 à tabela Instâncias.

  • AWS CLI: use o comando describe-instances da CLI 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

Etapa 5: quando todas as suas instâncias tiverem feito a transição para o IMDSv2

É possível usar as chaves de condição ec2:MetadataHttpTokens, ec2:MetadataHttpPutResponseHopLimit e ec2:MetadataHttpEndpoint do IAM para controlar o uso de RunInstances e das API ModifyInstanceMetadataOptions e das CLIs correspondentes. 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.

Mais ainda, após desabilitar o IMDSv1, é possível usar a métrica MetadataNoTokenRejected do CloudWatch para rastrear o número de vezes que uma chamada do IMDSv1 foi tentada e rejeitada. Se, após você desabilitar o IMDSv1, algum software não estiver funcionando corretamente e a métrica MetadataNoTokenRejected registrar as chamadas do IMDSv1, é provável que esse software precise ser atualizado para usar o IMDSv2.