Come posso risolvere i problemi relativi ai metadati delle istanze sulla mia istanza EC2 Linux?

4 minuti di lettura
0

Non riesco a recuperare i metadati dell'istanza dalla mia istanza Linux di Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrizione

I metadati dell'istanza sono informazioni sull'istanza EC2, come ID dell'istanza, indirizzi IP pubblici e privati, gruppi di sicurezza, ruoli di AWS Identity and Access Management (IAM) e così via. I metadati dell'istanza vengono esposti all'istanza tramite richieste HTTP all’indirizzo 169.254.169.254.

È possibile riscontrare i seguenti problemi durante il recupero dei metadati dell'istanza dall'servizio di metadati di istanza (IMDS):

  • Errori di richiesta HTTP
  • Configurazione proxy
  • Regole firewall locali
  • Limitazione delle richieste

Soluzione

Errori di richiesta HTTP

Quando si effettua una richiesta HTTP per recuperare i metadati dell'istanza, potrebbero essere restituiti i seguenti codici di errore HTTP:

HTTP 404 - Non trovato

L'errore HTTP 404 si applica a IMDS v1. Questo errore si verifica quando la risorsa richiesta non è disponibile. Verificare di utilizzare l'URL corretto.

400 - Richiesta non valida

L'errore 400 - Richiesta non valida si applica a IMDS v2. Questo errore si verifica se la richiesta PUT non è valida.

401 - Non autorizzato

L'errore 401 - Non autorizzato si verifica se la richiesta GET utilizza un token non valido. In tal caso, generare un nuovo token.

403 - Non consentito

L'errore 403 - Non consentito si verifica se la richiesta non è consentita o IMDS è disattivato. Esegui il seguente comando per verificare lo stato di IMDS. Nel seguente comando di esempio, sostituisci your_instance_ID con il valore corretto per il tuo caso d'uso.

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

Di seguito è riportato un esempio di output del comando precedente:

[
  {
    "State": "applied",
    "HttpTokens": "optional",
    "HttpPutResponseHopLimit": 1,
    "HttpEndpoint": "disabled",
    "HttpProtocolIpv6": "disabled",
    "InstanceMetadataTags": "disabled"
  }
]

Se l'opzione di comando mostra che HttpEndpoint è disattivato, esegui il seguente comando:

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

Configurazione proxy

Se utilizzi un proxy per accedere a Internet, è necessario escludere l'indirizzo IP IMDS (169.254.169.254). Se l'indirizzo IP IMDS non è escluso, potrebbe non essere possibile recuperare i metadati dell'istanza.

Per escludere l'indirizzo IP IMDS dall'uso del proxy, impostare una variabile di ambiente NO_PROXY con il seguente indirizzo:

export NO_PROXY=169.254.169.254

Regole firewall locali

I firewall presenti nell'istanza potrebbero impedire ad alcuni o a tutti i processi di accedere all'IMDS.

Assicurati che i firewall del sistema operativo dell'istanza non blocchino il traffico in uscita verso l'indirizzo IP dei metadati dell'istanza. I firewall includono iptables, UFW (firewall semplice) e così via.

Usa il seguente comando per controllare le regole del firewall per iptables

sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

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

Se il risultato dell'elenco di iptables mostra un rifiuto del recupero dei metadati, potresti ricevere il seguente errore:

$ curl http://169.254.169.254/latest/meta-data/
curl: (7) Failed to connect to 169.254.169.254 port 80 after 0 ms: Connection refused

Per risolvere questo errore, esegui il seguente comando per eliminare la regola:

$ sudo iptables -D OUTPUT -proto tcp -destination 169.254.169.254 -match owner -uid-owner 1000-10000 -jump REJECT

Limitazione delle richieste

Il traffico verso l'IMDS viene limitato in base al numero di pacchetti al secondo. Inoltre, esiste un limite di 1024 PPS per ogni interfaccia di rete elastica collegata all'istanza. Se la tua tariffa PPS per il servizio IMDS supera i 1024 PPS, la richiesta viene limitata.

Se si verifica una limitazione, riprova la richiesta con una strategia di backoff esponenziale.

Per visualizzare la frequenza con cui le istanze EC2 raggiungono i limiti di limitazione, controlla la metrica linklocal_allowance_exceeded nel driver Elastic Network Interface. Questa metrica indica che il numero di pacchetti formati a causa del traffico verso i servizi proxy locali supera il numero massimo per l'interfaccia di rete.

Esegui il comando seguente per visualizzare la metrica linklocal_allowance_exceeded:

$ ethtool -S <Network-Interface>
eg: $ ethtool -S eth0

Informazioni correlate

Utilizzo di un proxy sulle istanze Amazon EC2

Esempi di recupero dei metadati delle istanze

Limita l'accesso IMDS

Limitazione delle query

Metriche per il driver ENA

AWS UFFICIALE
AWS UFFICIALEAggiornata 10 mesi fa