Skip to content

Como solucionar problemas de metadados na minha instância Linux do EC2?

8 minuto de leitura
0

Não consigo recuperar metadados de instância da minha instância Linux do Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrição

O Amazon EC2 acessa localmente os metadados da instância dentro da instância por meio de solicitações HTTP para o endpoint IPv4 169.254.169.254 ou iPv6 [fd00:ec2::254]. Para acessar os metadados da instância, use o serviço de metadados de instância (IMDS). O IMDSv1 não exige um token de autenticação, mas o IMDSv2 exige um token de sessão para maior segurança.

Ao recuperar metadados da instância, você pode encontrar os seguintes problemas:

  • Erros de solicitação HTTP, como tempos limite e erros HTTP 400 ou 404
  • Falhas na solicitação de token IMDSv2
  • Problemas de manuseio específicos do software
  • Interface de rede ou tabela de rotas mal configuradas
  • Configurações de proxy ou gateway NAT que bloqueiam o acesso aos metadados
  • (Somente IPv6) Um endpoint IMDSv6 que não está ativado
  • Anexos de perfil de instância do AWS Identity and Access Management (AWS IAM) ausentes ou obsoletos
  • Firewalls locais, como iptables ou firewalld, que bloqueiam o acesso a 169.254.169.254
  • Alto volume de solicitações que causa solicitações de metadados limitadas

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Resolver erros de solicitação HTTP

Execute as seguintes ações de solução de problemas com base no código de erro HTTP que você recebe.

(Somente IMDSv1) Erro "404 - Not Found"

O erro HTTP 404 ocorre quando você insere um URL que não é válida ou quando atualizou o perfil do IAM da sua instância, mas não atualizou o perfil.

Para resolver esse erro, verifique se você está usando o URL correto. Além disso, desanexe e reanexe o perfil do IAM da sua instância.

Em seguida, inicie e interrompa sua instância para aplicar as alterações.

(Somente IMDSv2) Erro "400 - Bad Request"

O erro HTTP 400 ocorre quando sua solicitação PUT usa um token que não é válido ou quando o software envia cabeçalhos incorretos. Por exemplo, alguns agentes do FortiGate ou do Matillion não armazenam em cache nem reutilizam tokens IMDSv2.

Para resolver esse erro, execute o comando a seguir para gerar um novo token para sua solicitação PUT:

$ TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl

Além disso, verifique os logs do sistema ou da aplicação para ver se há processos de longa duração que precisam atualizar seus tokens.

(Somente IMDSv2) Erro "401 - Unauthorized"

O erro HTTP 401 ocorre quando sua solicitação GET usa um token que não é válido.

Para resolver esse erro, execute o comando a seguir para gerar um novo token para sua solicitação GET:

$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/

Além disso, verifique os logs do sistema ou da aplicação para ver se há processos de longa duração que precisam atualizar seus tokens.

Erro "403 - Forbidden"

O erro HTTP 403 ocorre quando você desativa o IMDS no nível da instância ou ocorre quando um grupo de segurança, firewall ou tabela de rotas bloqueia o acesso à instância. O erro também pode ocorrer se você precisar usar o IMDSv2, mas o cliente usar o IMDSv1.

Para resolver esse problema, execute o seguinte comando describe-instances da AWS CLI para verificar a configuração do IMDS:

aws ec2 describe-instances --instance-ids your_instance_id --query 'Reservations[].Instances[].MetadataOptions'

Observação: substitua your_instance_id pelo ID da sua instância.

Se HttpEndpoint estiver definido como desativado, execute o seguinte comando modify-instance-metadata-options para ativar o IMDS:

aws ec2 modify-instance-metadata-options --instance-id your_instance_id --http-endpoint enabled

Observação: substitua your_instance_id pelo ID da sua instância.

Certifique-se de que sua configuração permita acesso HTTP de saída a 169.254.169.254 (para IPv4) ou [fd00:ec2::254] (para IPv6) da instância.

Se sua instância usa um proxy, configuração de NAT, balanceador de carga ou vários saltos de rede internos, é uma prática recomendada configurar HttpPutResponseHopLimit como 2 ou mais. Configure um valor de salto alto o suficiente para permitir que a resposta do token passe pelas camadas da rede. Por padrão, HttpPutResponseHopLimit permite apenas 1 salto. Para aumentar esse valor, execute o seguinte comando modify-instance-metadata-options:

aws ec2 modify-instance-metadata-options --instance-id your_instance_id --http-put-response-hop-limit 2

Observação: substitua your_instance_id pelo ID da sua instância.

Verificar se há problemas de configuração do proxy

Se sua instância usa um proxy para acessar a Internet, exclua o endereço IP do IMDS do tráfego do proxy. Caso contrário, você poderá receber erros HTTP 403 e 404 ou de tempos limite de conexão.

Para excluir os endereços IP IMDS do proxy, execute o seguinte comando para definir a variável de ambiente no_proxy:

export no_proxy='169.254.169.254,[fd00:ec2::254]'

Observação: algumas aplicações, como Matillion, Fortigate ou serviços personalizados, podem não usar as configurações no_proxy no nível do sistema. Nesse cenário, configure no_proxy na aplicação. Para uma configuração de pilha dupla, certifique-se de excluir os endpoints de metadados IPv4 e IPv6.

Verificar se ativou o suporte IPv6

Se você usa uma sub-rede somente IPv6, execute o seguinte comando modify-instance-metadata-options para ativar explicitamente o suporte IPv6 para IMDS:

aws ec2 modify-instance-metadata-options \
  --instance-id your_instance_id \
  --http-protocol-ipv6 enabled

Observação: substitua your_instance_id pelo ID da sua instância.

Se você usa endpoints de nuvem privada virtual (VPC) com regras rígidas de grupos de segurança, certifique-se de que eles permitam o acesso à porta 80 (HTTP) ao endereço IP dos metadados.

Para aplicações Fortigate ou Matillion, confirme se o software é compatível com tokens de sessão IMDSv2.

Solucionar problemas de configuração de rede obsoleta, associações de perfis do IAM obsoletas ou problemas internos de software

Reinicialize sua instância.

Verificar as regras de firewall locais

Para verificar se os blocos de firewall locais usam iptables para bloquear o acesso ao endpoint IMDS, execute o seguinte comando:

sudo iptables -L

Exemplo de saída de um endpoint bloqueado:

Chain OUTPUT (policy ACCEPT)
target     prot opt source    destination
REJECT     tcp  --  anywhere  169.254.169.254  owner UID match 1000-10000 reject-with icmp-port-unreachable

Para verificar as regras que bloqueiam o tráfego para 169.254.169.254, execute o seguinte comando:

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

Se uma regra bloquear o tráfego, você receberá uma saída semelhante ao exemplo a seguir:

curl: (7) Failed to connect to 169.254.169.254 port 80 after 0 ms: Connection refused

Para remover a regra de bloqueio, execute o seguinte comando:

sudo iptables -D OUTPUT -p tcp -d 169.254.169.254 -m owner --uid-owner 1000-10000 -j REJECT

Se sua instância for de pilha dupla, certifique-se de que nenhuma regra de firewall IPv6 bloqueie o endereço IPv4 [fd00:ec2::254]. Se seus iptables estiverem vazios, mas o tráfego ainda estiver bloqueado, verifique os daemons de firewall do sistema operacional (SO), como firewalld ou ufw. Além disso, verifique os agentes de segurança, como software antivírus ou de firewall, que possam impor regras ocultas.

Verificar se o Amazon EC2 limitou a solicitação

O Amazon EC2 limita o tráfego para o IMDS com base no número de pacotes por segundo (PPS). Cada interface de rede elástica anexada à instância tem uma cota máxima de 1.024 PPS para tráfego relacionado a metadados. Se sua taxa de PPS exceder essa cota, você receberá erros "HTTP 5xx", a recuperação de metadados falhará ou a aplicação atingirá o tempo limite.

Para atenuar os problemas de controle de utilização, execute as seguintes ações:

  • Implemente a lógica de recuo exponencial e repetição em sua aplicação ao acessar o IMDS.
  • Verifique com seu fornecedor ou atualize seu software para a versão mais recente para garantir que ele seja compatível com o IMDSv2.
  • Ao usar o IMDSv2, gere um token uma vez e reutilize-o para várias consultas de metadados durante seu Tempo de vida útil (TTL).
  • Atualize para a versão mais recente do IMDSv2 para garantir que sua configuração implemente corretamente a reutilização de tokens e o recuo exponencial.
  • Não pesquise metadados de instâncias com frequência.
  • Use o cache de instâncias em sua aplicação sempre que possível.

Se seu software inundar as solicitações de metadados em um ciclo restrito sem demora, você poderá enfrentar controles de utilização ou falhas de metadados. Use tcpdump, strace ou logs de depuração de aplicação para verificar se há chamadas repetidas frequentes para 169.254.169.254. Para monitorar eventos de controle de utilização, execute o comando a seguir para verificar o driver da interface de rede para a métrica linklocal_allowance_exceeded:

ethtool -S eth0

Observação: substitua eth0 pelo nome da sua interface de rede. Na saída, verifique linklocal_allowance_exceeded para um valor que não seja 0 para identificar o controle de utilização.

Exemplo de saída:

linklocal_allowance_exceeded: 245

O exemplo de saída anterior mostra que o Amazon EC2 limitou 245 pacotes para o IMDS devido a uma cota de PPS excedida.

Informações relacionadas

Usando um proxy em instâncias do Amazon EC2

Acessar os metadados da instância para uma instância do EC2

Limitar o acesso ao serviço de metadados de instância

Controle de utilização de consultas

AWS OFICIALAtualizada há um mês