Recupero dei metadati dell'istanza
Dal momento che i metadati dell'istanza sono disponibili dall'istanza in esecuzione, non devi utilizzare la console Amazon EC2 o AWS CLI. Ciò può risultare utile quando sta scrivendo script da eseguire dall'istanza. Ad esempio, puoi accedere all'indirizzo IP locale dell'istanza dai metadati dell'istanza per gestire una connessione a un'applicazione esterna.
I metadati dell'istanza sono suddivisi in categorie. Per una descrizione di ciascuna categoria di metadati dell'istanza, consulta Categorie di metadati dell'istanza.
Per visualizzare tutte le categorie dei metadati dell'istanza dall'interno di un'istanza in esecuzione, utilizza gli URI IPv4 o IPv6 seguenti.
IPv4
http://169.254.169.254/latest/meta-data/
IPv6
http://[fd00:ec2::254]/latest/meta-data/
Gli indirizzi IP sono indirizzi link-local e sono validi solo dall'istanza. Per ulteriori informazioni, consultare Indirizzo link-local
Negli esempi riportati in questa sezione viene utilizzato l'indirizzo IPv4 del servizio metadati dell'istanza: 169.254.169.254
. Se si recuperano i metadati per le istanze EC2 tramite l'indirizzo IPv6, accertarsi invece di abilitare e utilizzare l'indirizzo IPv6: fd00:ec2::254
. L'indirizzo IPv6 del servizio metadati dell'istanza è compatibile con i comandi IMDSv2. L'indirizzo IPv6 è accessibile solo su Istanze costruite sul sistema Nitro.
Il formato del comando è diverso, a seconda che si utilizzi IMDSv1 o IMDSv2. Per impostazione predefinita, puoi utilizzare entrambi i servizi di metadati dell'istanza. Per richiedere l'utilizzo di IMDSv2, consulta Usa IMDSv2.
Puoi anche utilizzare uno strumento quale cURL, come mostrato nell'esempio seguente.
Per il comando per recuperare i metadati dell'istanza da un'istanza di Windows, consulta la sezione Recupero dei metadati dell'istanza nella Guida per l'utente di Amazon EC2 per le istanze Windows.
Costi
Non verrà addebitato alcun costo per le richieste HTTP utilizzate per recuperare i metadati dell'istanza e i dati utente.
Considerazioni
Per evitare problemi con il recupero dei metadati dell'istanza, considerare quanto segue:
-
I kit SDK AWS utilizzano le chiamate IMDSv2 per impostazione di default. Se la chiamata IMDSv2 non riceve alcuna risposta, l'SDK ritenta la chiamata e, se ancora non riesce, utilizza IMDSv1. Ciò può comportare un ritardo. In un ambiente container, se il limite di hop è 1, la risposta IMDSv2 non viene restituita perché andare al container è considerato un hop di rete aggiuntivo. Per evitare il processo di fallback di IMDSv1 e il ritardo risultante, in un ambiente container si consiglia di impostare il limite di hop su 2. Per ulteriori informazioni, consulta Configurazione delle opzioni dei metadati dell'istanza.
-
Per IMDSv2, devi utilizzare
/latest/api/token
durante il recupero del token. L'emissione di richiestePUT
a qualsiasi percorso specifico della versione, ad esempio/2021-03-23/api/token
, farà sì che il servizio metadati restituisca l'errore 403 Non consentito. Questo è il comportamento previsto.
Risposte e messaggi di errore
Tutti i metadati dell'istanza vengono restituiti come testo (tipo di contenuto HTTP text/plain
).
Una richiesta relativa a una risorsa di metadati specifica restituisce il valore appropriato o un codice di errore HTTP 404 - Not Found
se la risorsa non è disponibile.
Una richiesta relativa a una risorsa di metadati generica (l'URI termina con /) restituisce l'elenco delle risorse disponibili o un codice di errore HTTP 404 - Not Found
se la risorsa specificata non è disponibile. Le voci dell'elenco si trovano su righe distinte che terminano con caratteri di avanzamento riga (ASCII 10).
Per richieste effettuate mediante Servizio di metadati dell'istanza Versione 2, possono essere restituiti i seguenti codici di errore HTTP:
-
400 - Missing or Invalid Parameters
– La richiestaPUT
non è valida. -
401 - Unauthorized
– La richiestaGET
utilizza un token non valido. L'operazione consigliata è quella di generare un nuovo token. -
403 - Forbidden
– La richiesta non è consentita o il servizio di metadati dell'istanza è disattivato.
Esempi di recupero di metadati dell'istanza
Gli esempi seguenti forniscono comandi che è possibile utilizzare su un'istanza Linux. Per i comandi per recuperare i metadati dell'istanza da un'istanza di Windows, consulta la sezione Recupero dei metadati dell'istanza nella Guida per l'utente di Amazon EC2 per le istanze Windows.
Esempi
- Recupero delle versioni disponibili dei metadati dell'istanza
- Recupero degli elementi di metadati di primo livello
- Recupero dell'elenco di chiavi pubbliche disponibili
- Visualizzazione dei formati in cui è disponibile la chiave pubblica 0
- Recupero della chiave pubblica 0 (nel formato di chiave OpenSSH)
- Recupero dell'ID della sottorete per un'istanza
- Ottenere i tag dell'istanza per un'istanza
Recupero delle versioni disponibili dei metadati dell'istanza
Questo esempio recupera le versioni disponibili dei metadati dell'istanza. Ogni versione fa riferimento a una build dei metadati dell'istanza quando sono state rilasciate nuove categorie di metadati dell'istanza. Le versioni di build dei metadati dell'istanza non sono correlate alle versioni dell'API di Amazon EC2. Le versioni precedenti sono disponibili in presenza di script basati sulla struttura e sulle informazioni presenti in una versione precedente.
Per evitare di dover aggiornare il codice ogni volta che Amazon EC2 rilascia una nuova build di metadati dell'istanza, ti consigliamo di utilizzare latest
nel percorso e non nel numero di versione. Ad esempio, utilizza latest
come segue:
curl http://169.254.169.254/latest/meta-data/ami-id
Recupero degli elementi di metadati di primo livello
Questo esempio recupera gli elementi di metadati di primo livello. Per ulteriori informazioni, consulta Categorie di metadati dell'istanza.
Gli esempi seguenti consentono di recuperare i valori di alcuni degli elementi di metadati di primo livello che sono stati ottenuti nell'esempio precedente. Le richieste IMDSv2 utilizzano il token memorizzato che è stato creato nel comando di esempio precedente, ipotizzando che non sia scaduto.
Recupero dell'elenco di chiavi pubbliche disponibili
Questo esempio recupera l'elenco delle chiavi pubbliche disponibili.
Visualizzazione dei formati in cui è disponibile la chiave pubblica 0
Questo esempio mostra i formati in cui è disponibile la chiave pubblica 0.
Recupero della chiave pubblica 0 (nel formato di chiave OpenSSH)
Questo esempio recupera la chiave pubblica 0 (nel formato di chiave OpenSSH).
Recupero dell'ID della sottorete per un'istanza
In questo esempio viene recuperato l'ID della sottorete per un'istanza.
Ottenere i tag dell'istanza per un'istanza
Negli esempi seguenti, l'istanza di esempio ha tag sui metadati delle istanze abilitati e i tag delle istanze Name=MyInstance
e Environment=Dev
.
In questo esempio vengono recuperate tutte le chiavi del tag di istanza per un'istanza.
L'esempio seguente ottiene il valore della chiave Name
ottenuta nell'esempio precedente. Le richieste IMDSv2 utilizzano il token memorizzato che è stato creato nel comando dell'esempio precedente, ipotizzando che non sia scaduto.
Throttling delle query
Il throttling (limitazione delle richieste) delle query viene applicato al servizio di metadati dell'istanza in base all'istanza, ovvero vengono applicate restrizioni al numero di connessioni simultanee da un'istanza al servizio di metadati dell'istanza.
Se utilizzi il servizio di metadati dell'istanza per recuperare le credenziali di sicurezza AWS, evita di eseguire query per recuperare le credenziali durante ogni transazione o simultaneamente da un numero elevato di thread o processi in quanto questa operazione potrebbe causare il throttling. Consigliamo invece di memorizzare le credenziali nella cache fino all'approssimarsi della relativa data di scadenza. Per ulteriori informazioni sul ruolo IAM e sulle credenziali di sicurezza associate al ruolo, consulta Recupero delle credenziali di sicurezza dai metadati delle istanze.
In caso di throttling durante l'accesso al servizio di metadati dell'istanza, riprova a eseguire la query con un approccio basato sul backoff esponenziale.
Limitazione dell'accesso al servizio di metadati dell'istanza
Puoi valutare se utilizzare regole firewall locali per disabilitare l'accesso al servizio di metadati dell'istanza da alcuni processi o da tutti.
Per Istanze costruite sul sistema Nitro, IMDS potrebbe essere raggiungibile dalla tua rete quando un'appliance di rete all'interno del VPC, ad esempio un router virtuale, inoltra i pacchetti all'indirizzo IMDS e il controllo dell'origine/della destinazione predefinito sull'istanza è disabilitato. Per evitare che un'origine esterna al VPC raggiunga IMDS, si consiglia di modificare la configurazione dell'appliance di rete per eliminare i pacchetti con l'indirizzo IPv4 di destinazione IMDS 169.254.169.254 e, se hai abilitato l'endpoint IPv6, l'indirizzo IPv6 di IMDS fd00:ec2::254.
Utilizzo di iptables per limitare l'accesso
L'esempio seguente utilizza iptables Linux e il relativo modulo owner
per impedire al server Web Apache (basato sul suo ID utente di installazione predefinito di apache
) di accedere a 169.254.169.254. Utilizza una regola di rifiuto per rifiutare tutte le richieste dei metadati dell'istanza (IMDSv1 o IMDSv2) da qualsiasi processo in esecuzione come tale utente.
$
sudo iptables --append OUTPUT --proto tcp --destination 169.254.169.254 --match owner --uid-owner apache --jump REJECT
Oppure, puoi valutare di consentire l'accesso solo a utenti o gruppi particolari, utilizzando regole che autorizzano. Le regole che autorizzano potrebbero essere più facili da gestire dal punto di vista della sicurezza, perché richiedono di prendere una decisione sul software che deve poter accedere ai metadati dell'istanza. Se utilizzi regole che autorizzano, è meno probabile che venga accidentalmente concesso al software l'accesso al servizio di metadati (a cui non intendevi accedere) se in seguito modifichi il software o la configurazione su un'istanza. Puoi anche combinare l'utilizzo dei gruppi con le regole che autorizzano, in modo da poter aggiungere e rimuovere utenti da un gruppo autorizzato senza la necessità di modificare la regola firewall.
L'esempio seguente impedisce a tutti i processi di accedere al servizio di metadati dell'istanza, tranne a quelli in esecuzione nell'account utente trustworthy-user
.
$
sudo iptables --append OUTPUT --proto tcp --destination 169.254.169.254 --match owner ! --uid-owner
trustworthy-user
--jump REJECT
-
Per utilizzare regole firewall locali, è necessario adattare i comandi dell'esempio precedente in base alle proprie esigenze.
-
Per impostazione predefinita, le regole iptables non vengono mantenute tra riavvii del sistema. Possono essere rese persistenti utilizzando funzionalità del sistema operativo non descritte in questo argomento.
-
Il modulo
owner
iptables corrisponde all'appartenenza al gruppo solo se il gruppo è quello primario di un determinato utente locale. Altri gruppi non corrispondono.
Utilizzo di PF o IPFW per limitare l'accesso
Se utilizzi FreeBSD o OpenBSD, puoi anche valutare l'utilizzo di PF o IPFW. Gli esempi seguenti limitano l'accesso al servizio di metadati dell'istanza al solo utente root.
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
L'ordine dei comandi PF e IPFW è importante. PF è preimpostato sull'ultima regola corrispondente e IPFW è preimpostato sulla prima regola corrispondente.