

# Acessar metadados de instância para uma instância do EC2
<a name="instancedata-data-retrieval"></a>

É possível acessar os metadados das instâncias do EC2 na própria instância ou no console do EC2, na API, nos SDKs ou na AWS CLI. Para obter as configurações atuais de metadados de instância para uma instância no console ou na linha de comandos, consulte [Consultar as opções de metadados da instância para as instâncias existentes](#query-IMDS-existing-instances).

É possível modificar os dados do usuário das instâncias com um volume raiz do EBS. A instância deve estar no estado interrompido. Para obter instruções para o console, consulte [Atualizar os dados do usuário da instância](user-data.md#user-data-modify). Para obter um exemplo do Linux que usa a AWS CLI, consulte [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html). Para obter um exemplo do Windows que usa o Tools for Windows PowerShell, consulte [Dados do usuário e Tools for Windows PowerShell](user-data.md#user-data-powershell).

**nota**  
Você não será cobrado pelas solicitações HTTP usadas para recuperar os metadados da instância e os dados do usuário.

## Considerações sobre o acesso aos metadados da instância
<a name="imds-considerations"></a>

Para evitar problemas com os metadados de instância, considere os aspectos a seguir.

**Falhas na inicialização da instância devido à imposição do IMDSv2 (`HttpTokensEnforced=enabled`)**  
Antes de habilitar a imposição do IMDSv2, você precisa que todo o software na instância ofereça suporte ao IMDSv2. Depois disso, você pode alterar o padrão para desabilitar o IMDSv1 (`httpTokens=required`) e depois habilitar a imposição. Para obter mais informações, [Transição para usar o Serviço de metadados da instância versão 2](instance-metadata-transition-to-version-2.md).

**Formato do comando**  
O formato do comando é diferente, dependendo de você usar a versão 1 do serviço de metadados de instância (IMDSv1) ou a versão 2 do serviço de metadados de instância (IMDSv2). Por padrão, você pode usar as duas versões do serviço de metadados de instância. Para exigir o uso do IMDSv2, consulte [Use o serviço de metadados de instância para acessar metadados de instância](configuring-instance-metadata-service.md).

**Se o IMDSv2 for necessário, o IMDSv1 não funcionará**  
Se você usa o IMDSv1 e não recebe nenhuma resposta, é provável que o IMDSv2 seja necessário. Para verificar se o IMDSv2 é necessário, selecione a instância para visualizar seus detalhes. O valor de **IMDSv2** indica **Obrigatório** (você deve usar IMDSv2) ou **Opcional** (é possível usar IMDSv2 ou IMDSv1). 

**(IMDSv2) Use /latest/api/token para recuperar o token**  
Emitir solicitações `PUT` para qualquer caminho específico da versão, por exemplo `/2021-03-23/api/token`, faz com que o serviço de metadados retorne erros 403 Forbidden. Este é o comportamento pretendido.

**Versão de metadados**  
Para evitar ter que atualizar seu código sempre que o Amazon EC2 lançar uma nova compilação de metadados de instância, recomendamos que você use `latest` no caminho em vez do número da versão.

**Suporte a IPv6**  
Para recuperar metadados da instância usando um endereço IPv6, certifique-se de habilitar e usar o endereço IPv6 do IMDS `[fd00:ec2::254]`, em vez do endereço IPv4 `169.254.169.254`. A instância deve ser uma [instância baseada em Nitro](instance-types.md#instance-hypervisor-type) executada em uma [sub-rede com suporte para IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range).

**(Windows) Criar AMIs personalizadas usando o Sysprep do Windows.**  
Para garantir que o IMDS funcione quando você iniciar uma instância usando uma AMI personalizada do Windows, a AMI deverá ser uma imagem padronizada criada com a ferramenta Sysprep do Windows. Caso contrário, o IMDS não funcionará. Para obter mais informações, consulte [Criar uma AMI do Amazon EC2 usando o Sysprep do Windows](ami-create-win-sysprep.md).

**Em um ambiente de contêiner, considere reconfigurar ou aumentar o limite de saltos para 2.**  
Os SDKs da AWS usam chamadas IMDSv2 por padrão. Caso a chamada do IMDSv2 não receba resposta, alguns AWS SDKs tentam realizar a chamada novamente e, se ainda não tiver sucesso, usam o IMDSv1. Isso pode resultar em um atraso, especialmente em um ambiente de contêiner. Para os AWS SDKs que *precisam* do IMDSv2, se o limite de saltos for 1 em um ambiente de contêiner, a chamada pode não receber nenhuma resposta, pois acessar o contêiner é considerado um salto de rede adicional.  
Para mitigar esses problemas em um ambiente de contêiner, considere alterar a configuração para transferir as configurações (como a Região da AWS) diretamente para o contêiner, ou considere aumentar o limite de saltos para 2. Para obter informações sobre o impacto do limite de saltos, consulte [Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Service](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/). Para obter informações sobre como alterar o limite de saltos, consulte [Alterar o limite de salto de resposta PUT](configuring-IMDS-existing-instances.md#modify-PUT-response-hop-limit).

**Limite de pacotes por segundo (PPS)**  
Há um limite de 1.024 pacotes por segundo (PPS) para serviços que usam endereços [locais do link](using-instance-addressing.md#link-local-addresses). Esse limite inclui o agregado de [consultas ao DNS do Route 53 Resolver](https://docs.aws.amazon.com/vpc/latest/userguide/AmazonDNS-concepts.html#vpc-dns-limits), solicitações do Serviço de metadados de instância (IMDS), solicitações do [Amazon Time Service Network Time Protocol (NTP)](set-time.md) e solicitações do [Windows Licensing Service (para instâncias baseadas no Microsoft Windows)](https://aws.amazon.com/windows/resources/licensing/). 

**Considerações adicionais sobre acesso aos dados do usuário**
+ Os dados do usuário são tratados como dados opacos: o que você especifica é o que receberá de volta na recuperação. Cabe à instância interpretar e agir com base nos dados do usuário.
+ Os dados do usuário devem ser codificados por base64. Dependendo da ferramenta ou do SDK que você está usando, a codificação base64 pode ser executada para você. Por exemplo:
  + O console do Amazon EC2 pode executar a codificação base64 para você ou aceitar a entrada codificada por base64.
  + A [AWS CLI versão 2](https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-binaryparam) executa a codificação base64 de parâmetros binários para você por padrão. A AWS CLI versão 1 executa a codificação base64 do `--user-data` parâmetro para você.
  + O AWS SDK para Python (Boto3) executa a codificação base64 do parâmetro `UserData` para você.
+ Os dados do usuário são limitados a 16 KB, na forma bruta, antes de serem codificados em base64. O tamanho de uma string de comprimento *n* depois que a codificação em base64 for ceil (*n*/3)\$14.
+ Os dados do usuário devem ser decodificados em base64 quando você os recupera. Se você recuperar os dados usando o console ou os metadados da instância, eles serão decodificados automaticamente para você.
+ Se você interromper uma instância, modificar os dados do usuário e iniciar a instância, os dados do usuário atualizados não serão executados automaticamente quando você iniciar a instância. Com as instâncias do Windows, é possível definir configurações para que os scripts de dados do usuário atualizados sejam executados uma vez quando você inicia a instância ou sempre que você reinicia ou inicia a instância.
+ Os dados do usuário são um atributo da instância. Se você criar uma AMI a partir de uma instância, os dados do usuário da instância não serão incluídos na AMI.

## Acessar os metadados de instância em uma instância do EC2
<a name="instancedata-inside-access"></a>

Como os metadados da instância estão disponíveis na sua instância em execução, você não precisa usar o console do Amazon EC2 nem a AWS CLI. Isso pode ser útil quando você for elaborar scripts a serem executados a partir de sua instância. Por exemplo, é possível acessar o endereço IP local de sua instância a partir dos metadados da instância para gerenciar uma conexão com uma aplicação externa.

Todos os itens a seguir são considerados metadados de instância, mas são acessados de maneiras diferentes. Selecione a guia que representa o tipo de metadados de instância que você quer acessar para ver mais informações.

------
#### [ Metadata ]

As propriedades de metadados de instância são divididas em categorias. Para obter uma descrição de cada categoria de metadados de instância, consult [Categorias de metadados da instância](ec2-instance-metadata.md#instancedata-data-categories).

Para acessar as propriedades de metadados da instância em uma instância em execução, obtenha os dados dos URIs IPv4 ou IPv6 a seguir. Esses endereços IP são endereços locais de link e são válidos apenas a partir da instância. Para obter mais informações, consulte [Endereços locais de link](using-instance-addressing.md#link-local-addresses).

**IPv4**

```
http://169.254.169.254/latest/meta-data/
```

**IPv6**

```
http://[fd00:ec2::254]/latest/meta-data/
```

------
#### [ Dynamic data ]

Para recuperar dados dinâmicos de uma instância em execução, use um dos seguintes URIs.

**IPv4**

```
http://169.254.169.254/latest/dynamic/
```

**IPv6**

```
http://[fd00:ec2::254]/latest/dynamic/
```

**Exemplos: acessar com cURL**  
Os exemplos a seguir usam `cURL` para recuperar as categorias de identidade de instância de alto nível.

*IMDSv2*

```
[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" http://169.254.169.254/latest/dynamic/instance-identity/
rsa2048
pkcs7
document
signature
dsa2048
```

*IMDSv1*

```
[ec2-user ~]$ curl http://169.254.169.254/latest/dynamic/instance-identity/
rsa2048
pkcs7
document
signature
dsa2048
```

**Exemplos: acessar com o PowerShell**  
Os exemplos a seguir usam o PowerShell para recuperar as categorias de identidade de instância de alto nível.

*IMDSv2*

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/dynamic/instance-identity/
document
rsa2048
pkcs7
signature
```

*IMDSv1*

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/dynamic/instance-identity/
document
rsa2048
pkcs7
signature
```

Para obter mais informações sobre dados dinâmicos e os exemplos de como recuperá-los, consulte [Documentos de identidade da instância para instâncias do Amazon EC2](instance-identity-documents.md).

------
#### [ User data ]

Para recuperar os dados do usuário de uma instância, use um dos URIs a seguir. Para recuperar dados do usuário usando o endereço IPv6, você deve habilitá-lo, e a instância deve ser uma [instância baseada em Nitro](instance-types.md#instance-hypervisor-type) em uma sub-rede compatível com IPv6.

**IPv4**

```
http://169.254.169.254/latest/user-data
```

**IPv6**

```
http://[fd00:ec2::254]/latest/user-data
```

Uma solicitação de dados do usuário retorna os dados no estado em que se encontram (tipo de conteúdo `application/octet-stream`). Se a instância não tiver dados do usuário, a solicitação retornará `404 - Not Found`.

**Exemplos: acessar com cURL para recuperar texto separado por vírgula**  
Os exemplos a seguir usam `cURL` para recuperar dados do usuário que foram especificados como texto separado por vírgula.

*IMDSv2*

```
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" http://169.254.169.254/latest/user-data
1234,john,reboot,true | 4512,richard, | 173,,,
```

*IMDSv1*

```
curl http://169.254.169.254/latest/user-data
1234,john,reboot,true | 4512,richard, | 173,,,
```

**Exemplos: acessar com o PowerShell para recuperar texto separado por vírgula**  
Os exemplos a seguir usam o PowerShell para recuperar dados do usuário que foram especificados como texto separado por vírgula.

*IMDSv2*

```
[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/user-data
1234,john,reboot,true | 4512,richard, | 173,,,
```

*IMDSv1*

```
Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
-Method PUT -Uri http://169.254.169.254/latest/api/token} -Method GET -uri http://169.254.169.254/latest/user-data
1234,john,reboot,true | 4512,richard, | 173,,,
```

**Exemplos: acessar com cURL para recuperar um script**  
Os exemplos a seguir usam `cURL` para recuperar dados do usuário que foram especificados como um script.

*IMDSv2*

```
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" http://169.254.169.254/latest/user-data
#!/bin/bash
yum update -y
service httpd start
chkconfig httpd on
```

*IMDSv1*

```
curl http://169.254.169.254/latest/user-data
#!/bin/bash
yum update -y
service httpd start
chkconfig httpd on
```

**Exemplos: acessar com o PowerShell para recuperar um script**  
Os exemplos a seguir usam o PowerShell para recuperar dados do usuário que foram especificados como um script.

*IMDSv2*

```
[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/user-data
<powershell>
$file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
New-Item $file -ItemType file
</powershell>
<persist>true</persist>
```

*IMDSv1*

```
Invoke-RestMethod -uri http://169.254.169.254/latest/user-data
<powershell>
$file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
New-Item $file -ItemType file
</powershell>
<persist>true</persist>
```

------

## Consultar as opções de metadados da instância para as instâncias existentes
<a name="query-IMDS-existing-instances"></a>

É possível consultar as opções de metadados da instância para instâncias existentes.

------
#### [ Console ]

**Para consultar as opções de metadados da instância para uma instância existente**

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 a instância e confira os seguintes campos:
   + **IMDSv2**: o valor é **Obrigatório** ou **Opcional**.
   + **Permitir etiquetas em metadados de instâncias**: o valor é **Habilitado** ou **Desabilitado**.

1. Com sua instância selecionada, escolha **Ações**, **Configurações da instância**, **Modificar opções de metadados da instância**.

   A caixa de diálogo mostra se o serviço de metadados da instância está habilitado ou desabilitado para a instância selecionada.

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

**Para consultar as opções de metadados da instância para uma instância existente**  
Use o comando [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html).

```
aws ec2 describe-instances \
    --instance-id i-1234567898abcdef0 \
    --query 'Reservations[].Instances[].MetadataOptions'
```

------
#### [ PowerShell ]

**Para consultar as opções de metadados da instância para uma instância existente, usando o Tools for PowerShell**  
Use o cmdlet [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html).

```
(Get-EC2Instance `
    -InstanceId i-1234567898abcdef0).Instances.MetadataOptions
```

------

## Respostas e mensagens de erro
<a name="instance-metadata-returns"></a>

Todos os metadados de instância são retornados como texto (tipo de conteúdo HTTP `text/plain`).

Uma solicitação para um recurso de metadados específico retorna o valor apropriado, ou um código de erro de HTTP `404 - Not Found` se o recurso não estiver disponível.

Uma solicitação de um recurso de metadados geral (o URI termina com /) retorna uma lista de recursos disponíveis, ou um código de erro de HTTP `404 - Not Found` se não houver esse recurso. Os itens da lista estão em linhas separadas que são delimitadas por caracteres de alimentação de linha (ASCII 10).

Se uma solicitação para o IMDSv1 não receber resposta, é provável que o IMDSv2 seja necessário.

Para solicitações realizadas usando o IMDSv2, os seguintes códigos de erro HTTP podem ser retornados:
+ `400 - Missing or Invalid Parameters` – a solicitação `PUT` não é válida.
+ `401 - Unauthorized` – a solicitação `GET` usa um token inválido. A ação recomendada é gerar um novo token.
+ `403 - Forbidden`: a solicitação não é permitida ou o IMDS está desativado.
+ `404 - Not Found`: o recurso não está disponível ou não existe esse recurso.
+ `503`: a solicitação não pôde ser concluída. Repetir a solicitação.

Se o IMDS retornar um erro, o **curl** imprimirá a mensagem de erro na saída e retornará um código de status de êxito. A mensagem de erro é armazenada na variável `TOKEN`, o que faz com que os comandos de **curl** que usam o token falhem. Se você chamar o **curl** com a opção **-f**, ele retornará um código de status de erro no caso de um erro no servidor de HTTP. Se você habilitar o tratamento de erros, o shell poderá capturar o erro e interromper o script.

## Limitação de consulta
<a name="instancedata-throttling"></a>

Controlamos a utilização de consultas ao IMDS em uma base por instância, e limitamos o número de conexões simultâneas de uma instância com o IMDS. 

Se você estiver usando o IMDS para recuperar as credenciais de segurança da AWS, evite consultar as credenciais durante cada transação ou simultaneamente em um número elevado de threads ou processos, pois isso pode levar a uma limitação. Em vez disso, recomendamos que você armazene em cache as credenciais até elas começarem a se aproximar da data de expiração. Para obter mais informações sobre o perfil do IAM e as credenciais de segurança associadas ao perfil, consulte [Recuperar credenciais de segurança dos metadados da instância](instance-metadata-security-credentials.md).

Se você ficar limitado ao acessar o IMDS, tente a consulta novamente com uma estratégia de recuo exponencial.

# Use o serviço de metadados de instância para acessar metadados de instância
<a name="configuring-instance-metadata-service"></a>

É possível acessar metadados de instância em uma instância em execução usando um dos seguintes métodos:
+ Serviço de metadados da instância versão 2 (IMDSv2): um método orientado a sessões

  Para obter exemplos, consulte [Exemplos para IMDSv2](#instance-metadata-retrieval-examples).
+ Serviço de metadados da instância versão 1 (IMDSv1) – um método de solicitação/resposta

  Para obter exemplos, consulte [Exemplos para IMDSv1](#instance-metadata-retrieval-examples-imdsv1).

Por padrão, é possível usar o IMDSv1 ou o IMDSv2 ou ambos.

É possível configurar o Serviço de metadados de instância (IMDS) em cada instância de modo a aceitar somente chamadas IMDSv2, o que fará com que as chamadas IMDSv1 falhem. Para obter informações sobre como configurar sua instância para usar o IMDSv2, consulte [Configurar as opções de serviço de metadados de instância](configuring-instance-metadata-options.md).

Os cabeçalhos `PUT` ou `GET` são exclusivos do IMDSv2. Se esses cabeçalhos estiverem presentes na solicitação, a solicitação será destinada ao IMDSv2. Se nenhum cabeçalho estiver presente, presume-se que a solicitação seja destinada ao IMDSv1.

Para obter uma análise extensa do IMDSv2, consulte [Adicionar defesa profunda contra firewalls abertos, proxies reversos e vulnerabilidades SSRF com melhorias no serviço de metadados da instância do EC2](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/).

**Topics**
+ [Como Serviço de metadados da instância versão 2 funciona](#instance-metadata-v2-how-it-works)
+ [Usar um AWS SDK compatível](#use-a-supported-sdk-version-for-imdsv2)
+ [Exemplos para IMDSv2](#instance-metadata-retrieval-examples)
+ [Exemplos para IMDSv1](#instance-metadata-retrieval-examples-imdsv1)

## Como Serviço de metadados da instância versão 2 funciona
<a name="instance-metadata-v2-how-it-works"></a>

O IMDSv2 usa solicitações orientadas a sessão. Com solicitações orientadas a sessão, você cria um token de sessão que define a duração da sessão, que pode ser, no mínimo, um segundo e, no máximo, seis horas. Durante o período especificado, é possível usar o mesmo token de sessão para solicitações subsequentes. Depois que a duração especificada expira, crie um novo token de sessão para uso em solicitações futuras.

**nota**  
Os exemplos nesta seção usam o endereço IPv4 do Serviço de metadados da instância (IMDS): `169.254.169.254`. Se você estiver recuperando metadados de instância para instâncias do EC2 pelo endereço IPv6, certifique-se de habilitar e usar o endereço IPv6: `[fd00:ec2::254]`. O endereço IPv6 do IMDS é compatível com comandos IMDSv2. O endereço IPv6 só é acessível em [instâncias baseadas em Nitro](instance-types.md#instance-hypervisor-type) em uma [sub-rede compatível com IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range) (pilha dupla ou somente IPv6).

Os exemplos apresentados a seguir usam um script de shell e um IMDSv2 para recuperar os itens de metadados da instância de nível superior. Cada exemplo:
+ Cria um token de sessão que dura seis horas (21.600 segundos) usando a solicitação `PUT`.
+ Armazena o cabeçalho do token da sessão em uma variável chamada `TOKEN` (para as instâncias do Linux) ou `token` (para as instâncias do Windows)
+ Solicita os itens de metadados de nível superior usando o token

### Exemplo do Linux
<a name="how-imdsv2-works-example-linux"></a>

É possível executar dois comandos separados ou combiná-los.

**Comandos separados**

Primeiro, gere um token usando o comando a seguir.

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
```

Em seguida, use o token para gerar itens de metadados de nível superior usando o comando a seguir.

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
```

**Comandos combinados**

É possível armazenar o token e combinar os comandos. O exemplo a seguir combina os dois comandos acima e armazena o cabeçalho do token de sessão em uma variável chamada TOKEN.

**nota**  
Se houver um erro na criação do token, em vez de um token válido, uma mensagem de erro será armazenada na variável e o comando não funcionará.

```
[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" http://169.254.169.254/latest/meta-data/
```

Depois de criar um token, é possível reutilizá-lo até que ele expire. No comando de exemplo a seguir, que obtém o ID da AMI usada para executar a instância, o token armazenado em `$TOKEN` no exemplo anterior é reutilizado.

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
```

### Exemplo do Windows
<a name="how-imdsv2-works-example-windows"></a>

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/
```

Depois de criar um token, é possível reutilizá-lo até que ele expire. No comando de exemplo a seguir, que obtém o ID da AMI usada para executar a instância, o token armazenado em `$token` no exemplo anterior é reutilizado.

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} `
	-Method GET -uri http://169.254.169.254/latest/meta-data/ami-id
```

Quando você usa o IMDSv2 para solicitar os metadados da instância, a solicitação deve incluir o seguinte:

1. Use uma solicitação `PUT` para solicitar a inicialização de uma sessão para o serviço de metadados da instância. A solicitação `PUT` retorna um token que deve ser incluído em solicitações `GET` subsequentes para o serviço de metadados da instância. O token é exigido para acessar metadados usando o IMDSv2.

1. Inclua o token em todas as solicitações `GET` para o IMDS. Quando o uso do token está definido como `required`, as solicitações sem um token válido ou com um token expirado recebem um código de erro HTTP `401 - Unauthorized`.
   + O token é uma chave específica da instância. O token não é válido em outras instâncias do EC2 e será rejeitado se você tentar usá-lo fora da instância na qual foi gerado.
   + A solicitação `PUT` deve incluir um cabeçalho que especifique a vida útil (TTL) do token, em segundos, até um máximo de seis horas (21.600 segundos). O token representa uma sessão lógica. O TTL especifica o período de validade do token e, portanto, a duração da sessão.
   + Depois que o token expira, para continuar a acessar os metadados da instância, crie uma nova sessão usando outro `PUT`.
   + É possível optar por reutilizar um token ou criar um novo token para cada solicitação. Para um número pequeno de solicitações, pode ser mais fácil gerar e usar imediatamente um token a cada vez que você precisar acessar o IMDS. Mas, para obter eficiência, é possível especificar uma duração maior para o token e reutilizá-lo, em vez de precisar escrever uma solicitação `PUT` toda vez que precisar solicitar metadados da instância. Não há um limite prático para o número de tokens simultâneos, cada um representando sua própria sessão. No entanto, o IMDSv2 ainda é restringido pela conexão do IMDS e pelos limites de controle de utilização. Para obter mais informações, consulte [Limitação de consulta](instancedata-data-retrieval.md#instancedata-throttling).

Os métodos HTTP `GET` e `HEAD` são permitidos em solicitações de metadados de instâncias do IMDSv2. As solicitações `PUT` serão rejeitadas se contiverem um cabeçalho X-Forwarded-For.

Por padrão, a resposta a solicitações `PUT` tem um limite de saltos de resposta (vida útil) de `1` no nível de protocolo IP. Se você precisar de um limite maior de saltos, é possível ajustar o limite usando o comando [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) da AWS CLI. Por exemplo, um limite de saltos maior pode ser necessário para compatibilidade com versões anteriores de serviços de contêiner em execução na instância. 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).

## Usar um AWS SDK compatível
<a name="use-a-supported-sdk-version-for-imdsv2"></a>

Para usar o IMDSv2, as instâncias do EC2 devem usar uma versão do AWS SDK compatível com o uso do IMDSv2. As versões mais recentes de todos os AWS SDKs permitem usar o IMDSv2.

**Importante**  
Recomendamos que você se mantenha atualizado com as versões do SDK para acompanhar os recursos, as atualizações de segurança e as dependências subjacentes mais recentes. O uso contínuo de uma versão não compatível do SDK não é recomendado e é feito a seu critério. Para obter mais informações, consulte a [Política de manutenção de SDKs e ferramentas da AWS](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) no *Guia de referência de SDKs e ferramentas da AWS*.

Veja a seguir as versões mínimas que são compatíveis com o uso do IMDSv2:
+ [AWS CLI](https://github.com/aws/aws-cli): 1.16.289
+ [AWS Tools for Windows PowerShell](https://github.com/aws/aws-tools-for-powershell): 4.0.1.0
+ [AWS SDK para .NET](https://github.com/aws/aws-sdk-net): 3.3.634.1
+ [AWS SDK para C\$1\$1](https://github.com/aws/aws-sdk-cpp): 1.7.229
+ [AWS SDK para Go](https://github.com/aws/aws-sdk-go): 1.25.38
+ [AWS SDK para Go v2](https://github.com/aws/aws-sdk-go-v2) – 0.19.0
+ [AWS SDK para Java](https://github.com/aws/aws-sdk-java): 1.11.678
+ [AWS SDK for Java 2.x](https://github.com/aws/aws-sdk-java-v2): 2.10.21
+ [AWS SDK para JavaScript em Node.js](https://github.com/aws/aws-sdk-js) – 2.722.0
+ [AWS SDK para Kotlin](https://github.com/awslabs/aws-sdk-kotlin) – 1.1.4
+ [AWS SDK para PHP](https://github.com/aws/aws-sdk-php): 3.147.7
+ [AWS SDK para Python (Botocore)](https://github.com/boto/botocore) – 1.13.25
+ [AWS SDK para Python (Boto3)](https://github.com/boto/boto3): 1.12.6
+ [AWS SDK para Ruby](https://github.com/aws/aws-sdk-ruby): 3.79.0

## Exemplos para IMDSv2
<a name="instance-metadata-retrieval-examples"></a>

Execute os exemplos a seguir na sua instância do Amazon EC2 para recuperar os metadados da instância para o IMDSv2.

Em instâncias do Windows, é possível usar o Windows PowerShell ou instalar cURL ou wget. Se você instalar uma ferramenta de terceiros em uma instância do Windows, leia a documentação que a acompanha, pois as chamadas e a saída podem ser diferentes do que é descrito aqui.

**Topics**
+ [Obter as versões disponíveis dos metadados da instância](#instance-metadata-ex-1)
+ [Obter itens de metadados de nível superior.](#instance-metadata-ex-2)
+ [Obtenção dos valores dos itens de metadados](#instance-metadata-ex-2a)
+ [Obter a lista de chaves públicas disponíveis](#instance-metadata-ex-3)
+ [Mostrar os formatos nos quais a chave pública 0 está disponível](#instance-metadata-ex-4)
+ [Obter a chave pública 0 (no formato de chave OpenSSH)](#instance-metadata-ex-5)
+ [Obter o ID de sub-rede de uma instância](#instance-metadata-ex-6)
+ [Obter as tags de instância de uma instância de uma instância](#instance-metadata-ex-7)

### Obter as versões disponíveis dos metadados da instância
<a name="instance-metadata-ex-1"></a>

Este exemplo obtém as versões disponíveis dos metadados da instância. Cada versão indica uma compilação de metadados de instância quando novas categorias de metadados de instância foram lançadas. As versões de compilação de metadados de instância não têm correlação com as versões de API do Amazon EC2. As versões anteriores estarão disponíveis caso você tenha scripts que contam com a estrutura e as informações presentes em uma versão anterior.

------
#### [ cURL ]

```
[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" http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------

### Obter itens de metadados de nível superior.
<a name="instance-metadata-ex-2"></a>

Este exemplo obtém itens de metadados de nível superior. Para obter mais informações sobre os itens na resposta, consulte [Categorias de metadados da instância](ec2-instance-metadata.md#instancedata-data-categories).

Observe que as tags serão incluídas nessa saída somente se você tiver permitido o acesso. Para obter mais informações, consulte [Habilitar o acesso a tags em metadados da instância](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS).

------
#### [ cURL ]

```
[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" http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------

### Obtenção dos valores dos itens de metadados
<a name="instance-metadata-ex-2a"></a>

Esses exemplos obtêm os valores de alguns dos itens de metadados de nível superior obtidos no exemplo anterior. Essas solicitações usam o token armazenado que foi criado usando o comando no exemplo anterior. O token não pode estar expirado.

------
#### [ cURL ]

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------

### Obter a lista de chaves públicas disponíveis
<a name="instance-metadata-ex-3"></a>

Este exemplo obtém uma lista de chaves públicas disponíveis.

------
#### [ cURL ]

```
[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" http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key
```

------

### Mostrar os formatos nos quais a chave pública 0 está disponível
<a name="instance-metadata-ex-4"></a>

Este exemplo mostra os formatos nos quais a chave pública 0 está disponível.

------
#### [ cURL ]

```
[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" http://169.254.169.254/latest/meta-data/public-keys/0/
openssh-key
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
openssh-key
```

------

### Obter a chave pública 0 (no formato de chave OpenSSH)
<a name="instance-metadata-ex-5"></a>

Este exemplo obtém a chave pública 0 (no formato de chave OpenSSH).

------
#### [ cURL ]

```
[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" http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------

### Obter o ID de sub-rede de uma instância
<a name="instance-metadata-ex-6"></a>

Este exemplo obtém o ID de sub-rede para uma instância.

------
#### [ cURL ]

```
[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" http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------
#### [ PowerShell ]

```
PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------

### Obter as tags de instância de uma instância de uma instância
<a name="instance-metadata-ex-7"></a>

Se o acesso às tags da instância nos metadados da instância estiver ativado, será possível obter as tags de uma instância nos metadados da instância. Para obter mais informações, consulte [Recuperar tags dos metadados da instância](work-with-tags-in-IMDS.md#retrieve-tags-from-IMDS).

## Exemplos para IMDSv1
<a name="instance-metadata-retrieval-examples-imdsv1"></a>

Execute os exemplos a seguir na sua instância do Amazon EC2 para recuperar os metadados da instância para o IMDSv1.

Em instâncias do Windows, é possível usar o Windows PowerShell ou instalar cURL ou wget. Se você instalar uma ferramenta de terceiros em uma instância do Windows, leia a documentação que a acompanha, pois as chamadas e a saída podem ser diferentes do que é descrito aqui.

**Topics**
+ [Obter as versões disponíveis dos metadados da instância](#instance-metadata-ex-1-imdsv1)
+ [Obter itens de metadados de nível superior.](#instance-metadata-ex-2-imdsv1)
+ [Obtenção dos valores dos itens de metadados](#instance-metadata-ex-2a-imdsv1)
+ [Obter a lista de chaves públicas disponíveis](#instance-metadata-ex-3-imdsv1)
+ [Mostrar os formatos nos quais a chave pública 0 está disponível](#instance-metadata-ex-4-imdsv1)
+ [Obter a chave pública 0 (no formato de chave OpenSSH)](#instance-metadata-ex-5-imdsv1)
+ [Obter o ID de sub-rede de uma instância](#instance-metadata-ex-6-imdsv1)
+ [Obter as tags de instância de uma instância de uma instância](#instance-metadata-ex-7-imdsv1)

### Obter as versões disponíveis dos metadados da instância
<a name="instance-metadata-ex-1-imdsv1"></a>

Este exemplo obtém as versões disponíveis dos metadados da instância. Cada versão indica uma compilação de metadados de instância quando novas categorias de metadados de instância foram lançadas. As versões de compilação de metadados de instância não têm correlação com as versões de API do Amazon EC2. As versões anteriores estarão disponíveis caso você tenha scripts que contam com a estrutura e as informações presentes em uma versão anterior.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------

### Obter itens de metadados de nível superior.
<a name="instance-metadata-ex-2-imdsv1"></a>

Este exemplo obtém itens de metadados de nível superior. Para obter mais informações sobre os itens na resposta, consulte [Categorias de metadados da instância](ec2-instance-metadata.md#instancedata-data-categories).

Observe que as tags serão incluídas nessa saída somente se você tiver permitido o acesso. Para obter mais informações, consulte [Habilitar o acesso a tags em metadados da instância](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS).

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------

### Obtenção dos valores dos itens de metadados
<a name="instance-metadata-ex-2a-imdsv1"></a>

Esses exemplos obtêm os valores de alguns dos itens de metadados de nível superior obtidos no exemplo anterior.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------

### Obter a lista de chaves públicas disponíveis
<a name="instance-metadata-ex-3-imdsv1"></a>

Este exemplo obtém uma lista de chaves públicas disponíveis.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key
```

------

### Mostrar os formatos nos quais a chave pública 0 está disponível
<a name="instance-metadata-ex-4-imdsv1"></a>

Este exemplo mostra os formatos nos quais a chave pública 0 está disponível.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/
openssh-key
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
openssh-key
```

------

### Obter a chave pública 0 (no formato de chave OpenSSH)
<a name="instance-metadata-ex-5-imdsv1"></a>

Este exemplo obtém a chave pública 0 (no formato de chave OpenSSH).

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------

### Obter o ID de sub-rede de uma instância
<a name="instance-metadata-ex-6-imdsv1"></a>

Este exemplo obtém o ID de sub-rede para uma instância.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------

### Obter as tags de instância de uma instância de uma instância
<a name="instance-metadata-ex-7-imdsv1"></a>

Se o acesso às tags da instância nos metadados da instância estiver ativado, será possível obter as tags de uma instância nos metadados da instância. Para obter mais informações, consulte [Recuperar tags dos metadados da instância](work-with-tags-in-IMDS.md#retrieve-tags-from-IMDS).

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

# Limitar o acesso ao serviço de metadados de instância
<a name="instance-metadata-limiting-access"></a>

É possível considerar o uso de regras de firewall local para desabilitar o acesso de alguns ou de todos os processos ao serviço de metadados de instância (IMDS).

Em [instâncias baseadas em Nitro](instance-types.md#instance-hypervisor-type), o IMDS pode ser acessado de sua própria rede quando um dispositivo de rede na VPC, como um roteador virtual, encaminha pacotes para o endereço do IMDS e a [verificação de origem e de destino](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck) padrão na instância está desabilitada. Para evitar que uma fonte externa à VPC acesse o IMDS, recomendamos que você modifique a configuração do dispositivo de rede para descartar pacotes com o endereço IPv4 de destino do IMDS `169.254.169.254` e, se você tiver habilitado o endpoint IPv6, o endereço IPv6 do IMDS `[fd00:ec2::254]`.

## Limitar acesso ao IMDS para instâncias do Linux
<a name="instance-metadata-limiting-access-linux"></a>

**Usar iptables para limitar o acesso**

O exemplo a seguir usa iptables do Linux e seu módulo `owner` para impedir que o servidor Web do Apache (com base no ID de usuário da instalação padrão do `apache`) acesse 169.254.169.254. Ele usa uma *regra de negação* para rejeitar todas as solicitações de metadados de instância (IMDSv1 ou IMDSv2) de qualquer processo que execute como esse usuário.

```
$ sudo iptables --append OUTPUT --proto tcp --destination 169.254.169.254 --match owner --uid-owner apache --jump REJECT
```

Ou é possível considerar permitir o acesso apenas a usuários ou grupos específicos usando *regras de permissão*. As regras de permissão podem ser mais fáceis de gerenciar de uma perspectiva de segurança, porque elas exigem que você decida qual software precisa acessar os metadados de instância. Se você usar *regras de permissão*, haverá menos probabilidade de você permitir acidentalmente que o software acesse o serviço de metadados (que você não queria que tivesse acesso) se você alterar o software ou a configuração posteriormente em uma instância. Também é possível combinar o uso de grupos com regras de permissão, para que você possa adicionar ou remover usuários de um grupo com permissão sem precisar alterar a regra do firewall.

O exemplo a seguir impede o acesso ao IMDS por todos os processos, exceto os processos em execução na conta do usuário `trustworthy-user`.

```
$ sudo iptables --append OUTPUT --proto tcp --destination 169.254.169.254 --match owner ! --uid-owner trustworthy-user --jump REJECT
```

**nota**  
Para usar regras de firewall local, você precisa adaptar os comandos do exemplo anterior para se ajustarem a suas necessidades. 
Por padrão, as regras de iptables não são persistentes em todas as reinicializações do sistema. Elas podem ser transformadas em persistentes usando recursos do SO não descritos aqui.
O módulo `owner` das iptables só corresponderá à associação do grupo se o grupo for o grupo primário de um determinado usuário local. Outros grupos não são correspondidos.

**Usar PF ou IPFW para limitar o acesso**

Se você estiver usando FreeBSD ou OpenBSD, poderá considerar também o uso de PF ou IPFW. Os exemplos a seguir limitam o acesso ao IMDS apenas ao usuário raiz.

**PF**

```
$ block out inet proto tcp from any to 169.254.169.254
```

```
$ pass out inet proto tcp from any to 169.254.169.254 user root
```

**IPFW**

```
$ allow tcp from any to 169.254.169.254 uid root
```

```
$ deny tcp from any to 169.254.169.254
```

**nota**  
A ordem dos comandos PF e IPFW é importante. O padrão de PF e a regra correspondente mais recente, e o padrão de IPFW é a primeira regra correspondente.

## Limitar acesso ao IMDS para instâncias do Windows
<a name="instance-metadata-limiting-access-windows"></a>

**Usar o firewall do Windows para limitar o acesso**

O seguinte PowerShell de exemplo usa o firewall interno do Windows para impedir que o servidor Web do Servidor de informações da Internet (com base no ID de usuário de sua instalação padrão de `NT AUTHORITY\IUSR`) acesse 169.254.169.254. Ele usa uma *regra de negação* para rejeitar todas as solicitações de metadados de instância (IMDSv1 ou IMDSv2) de qualquer processo que execute como esse usuário.

```
PS C:\> $blockPrincipal = New-Object -TypeName System.Security.Principal.NTAccount ("NT AUTHORITY\IUSR")
PS C:\> $BlockPrincipalSID = $blockPrincipal.Translate([System.Security.Principal.SecurityIdentifier]).Value
PS C:\> $BlockPrincipalSDDL = "D:(A;;CC;;;$BlockPrincipalSID)"
PS C:\> New-NetFirewallRule -DisplayName "Block metadata service from IIS" -Action block -Direction out `
-Protocol TCP -RemoteAddress 169.254.169.254 -LocalUser $BlockPrincipalSDDL
```

Ou é possível considerar permitir o acesso apenas a usuários ou grupos específicos usando *regras de permissão*. As regras de permissão podem ser mais fáceis de gerenciar de uma perspectiva de segurança, porque elas exigem que você decida qual software precisa acessar os metadados de instância. Se você usar *regras de permissão*, haverá menos probabilidade de você permitir acidentalmente que o software acesse o serviço de metadados (que você não queria que tivesse acesso) se você alterar o software ou a configuração posteriormente em uma instância. Também é possível combinar o uso de grupos com regras de permissão, para que você possa adicionar ou remover usuários de um grupo com permissão sem precisar alterar a regra do firewall.

O exemplo a seguir impede o acesso aos metadados da instância por todos os processos em execução como um grupo do SO especificado na variável `blockPrincipal` (neste exemplo, o grupo `Everyone` do Windows), exceto os processos especificados em `exceptionPrincipal` (neste exemplo, um grupo chamado `trustworthy-users`). Especifique as entidades de negação e de permissão porque o Firewall do Windows, ao contrário da regra `! --uid-owner trustworthy-user` nas iptables do Linux, não fornece um mecanismo de atalho para permitir somente uma entidade específica (usuário ou grupo) negando todas as outras.

```
PS C:\> $blockPrincipal = New-Object -TypeName System.Security.Principal.NTAccount ("Everyone")
PS C:\> $BlockPrincipalSID = $blockPrincipal.Translate([System.Security.Principal.SecurityIdentifier]).Value
PS C:\> $exceptionPrincipal = New-Object -TypeName System.Security.Principal.NTAccount ("trustworthy-users")
PS C:\> $ExceptionPrincipalSID = $exceptionPrincipal.Translate([System.Security.Principal.SecurityIdentifier]).Value
PS C:\> $PrincipalSDDL = "O:LSD:(D;;CC;;;$ExceptionPrincipalSID)(A;;CC;;;$BlockPrincipalSID)"
PS C:\> New-NetFirewallRule -DisplayName "Block metadata service for $($blockPrincipal.Value), exception: $($exceptionPrincipal.Value)" -Action block -Direction out `
-Protocol TCP -RemoteAddress 169.254.169.254 -LocalUser $PrincipalSDDL
```

**nota**  
Para usar regras de firewall local, você precisa adaptar os comandos do exemplo anterior para se ajustarem a suas necessidades. 

**Usar regras de netsh para limitar o acesso**

É possível considerar o bloqueio de todos os softwares usando regras de `netsh`, mas essas regras são muito menos flexíveis.

```
C:\> netsh advfirewall firewall add rule name="Block metadata service altogether" dir=out protocol=TCP remoteip=169.254.169.254 action=block
```

**nota**  
Para usar regras de firewall local, você precisa adaptar os comandos do exemplo anterior para se ajustarem a suas necessidades. 
`netsh`As regras de devem ser definidas em um prompt de comando elevado e não podem ser definidas para negar ou permitir principais específicos.