Accedere ai metadati dell'istanza per un' EC2 istanza - Amazon Elastic Compute Cloud

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Accedere ai metadati dell'istanza per un' EC2 istanza

Puoi accedere ai metadati dell' EC2 istanza dall'interno dell'istanza stessa o dalla EC2 console, dall'API o dal. SDKs AWS CLI Per ottenere le impostazioni correnti dei metadati dell'istanza per un'istanza dalla console o dalla riga di comando, consulta Esegui una query sulle opzioni dei metadati dell'istanza per le istanze esistenti.

Puoi anche modificare i dati utente per le istanze con un volume root EBS. L'istanza deve essere nello stato stopped (arrestato). Per le indicazioni per la console, consulta Aggiornamento dei dati utente dell'istanza. Per un esempio di Linux che utilizza il AWS CLI, vedi modify-instance-attribute. Per un esempio di Windows che utilizza gli strumenti per Windows PowerShell, vedereDati utente e strumenti per Windows PowerShell.

Nota

Non verrà addebitato alcun costo per le richieste HTTP utilizzate per recuperare i metadati dell'istanza e i dati utente.

Considerazioni sull'accesso ai metadati dell'istanza

Per evitare problemi con il recupero dei metadati dell'istanza, considera quanto segue.

Formato comando

Il formato dei comandi è diverso, a seconda che si utilizzi Instance Metadata Service Version 1 (IMDSv1) o Instance Metadata Service Version 2 (IMDSv2). Per impostazione predefinita, puoi utilizzare entrambi i servizi di metadati dell'istanza. Per richiedere l'utilizzo di IMDSv2, consulta Utilizzo del servizio di metadati di istanza per accedere ai metadati dell'istanza.

Se IMDSv2 richiesto, IMDSv1 non funziona

Se utilizzi IMDSv1 e non ricevi alcuna risposta, è probabile che IMDSv2 sia necessario. Per verificare se IMDSv2 è obbligatorio, seleziona l'istanza per visualizzarne i dettagli. Il IMDSv2valore indica Obbligatorio (è necessario utilizzare IMDSv2) o Facoltativo (è possibile utilizzare uno dei due IMDSv2 oIMDSv1).

(IMDSv2) Usa /latest/api/token per recuperare il token

L'emissione di richieste PUT a qualsiasi percorso specifico della versione, ad esempio /2021-03-23/api/token, farà sì che il servizio dei metadati restituisca errori 403 Accesso negato. Questo è il comportamento previsto.

Versione dei metadati

Per evitare di dover aggiornare il codice ogni volta che Amazon EC2 rilascia una nuova build di metadati di istanza, ti consigliamo di utilizzare latest nel percorso e non il numero di versione.

IPv6 supporto

Per recuperare i metadati dell'istanza utilizzando un IPv6 indirizzo, assicurati di abilitare e utilizzare l'IPv6 indirizzo dell'IMDS [fd00:ec2::254] anziché l'indirizzo. IPv4 169.254.169.254 L'istanza deve essere un'istanza basata su Nitro lanciata in una sottorete che supporti. IPv6

(Windows) Crea contenuti personalizzati AMIs utilizzando Windows Sysprep

Per assicurarti che l'IMDS funzioni quando avvii un'istanza da un'AMI Windows personalizzata, l'AMI deve essere un'immagine standardizzata creata mediante Windows Sysprep. In caso contrario, l'IMDS non funzionerà. Per ulteriori informazioni, consulta Creare un' EC2 AMI Amazon utilizzando Windows Sysprep.

In un ambiente contenitore, prendete in considerazione la riconfigurazione o l'aumento del limite di hop a 2

L' AWS SDKs uso IMDSv2 chiama per impostazione predefinita. Se la IMDSv2 chiamata non riceve alcuna risposta, alcuni AWS SDKs riprovano a chiamarla e, se il risultato persiste, la utilizzano. IMDSv1 Ciò può comportare un ritardo, soprattutto in un ambiente del container. Per coloro AWS SDKs che lo richiedono IMDSv2, se il limite di hop è 1 in un ambiente contenitore, la chiamata potrebbe non ricevere alcuna risposta perché l'accesso al contenitore è considerato un hop di rete aggiuntivo.

Per mitigare questi problemi in un ambiente container, prendete in considerazione la possibilità di modificare la configurazione per passare le impostazioni (come la Regione AWS) direttamente al contenitore, oppure considerate di aumentare il limite di hop a 2. Per informazioni sull'impatto dell'hop limit, consulta Aggiungere una difesa approfondita contro firewall aperti, reverse proxy e vulnerabilità SSRF con miglioramenti all'Instance Metadata Service. EC2 Per informazioni sulla modifica del limite di hop, consulta. Modifica del limite di hop di risposta PUT

Limite di pacchetti al secondo (PPS)

Esiste un limite di 1024 pacchetti al secondo (PPS) per i servizi che utilizzano indirizzi locali del collegamento. Questo limite include l'aggregato di query DNS del risolutore Route 53, richieste del servizio di metadati di istanza (IMDS), richieste Network Time Protocol (NTP) del servizio orario di Amazon e richieste Windows Licensing Service (per istanze basate su Microsoft Windows).

Considerazioni aggiuntive sull'accesso ai dati utente
  • I dati utente vengono considerati dati opachi: ciò che indichi è ciò che risulta durante il recupero. È l'istanza a interpretare i dati utente e a intervenire su di essi.

  • I dati utente devono essere codificati con base64. A seconda dello strumento o dell'SDK che stai utilizzando, la codifica base64 potrebbe essere eseguita automaticamente. Per esempio:

    • La EC2 console Amazon può eseguire la codifica base64 per te o accettare input con codifica base64.

    • AWS CLI la versione 2 esegue automaticamente la codifica in base64 dei parametri binari. AWS CLI la versione 1 esegue la codifica base64 del parametro per voi. --user-data

    • AWS SDK for Python (Boto3) Esegue la codifica base64 del parametro per voi. UserData

  • I dati dell'utente sono limitati a 16 KB, in formato raw, prima della codifica base 64. La dimensione di una stringa di lunghezza n dopo la codifica base64 è ceil(n/3)*4.

  • I dati utente devono essere decodificati con base64 quando li recuperi. Se recuperi i dati utilizzando i metadati dell'istanza o la console, vengono decodificati automaticamente.

  • Se arresti un'istanza, ne modifichi i dati utente e quindi avvii l'istanza, i dati utente aggiornati non vengono eseguiti automaticamente quando si avvia l'istanza. Con le istanze Windows puoi configurare le impostazioni in modo che gli script dei dati utente aggiornati vengano eseguiti una volta all'avvio dell'istanza oppure ogni volta che avvii o riavvii l'istanza.

  • I dati utente sono un attributo dell'istanza. Se si crea un'AMI da un'istanza, i dati utente dell'istanza non vengono inclusi nell'AMI.

Accedi ai metadati dell'istanza dall'interno di un'istanza EC2

Poiché i metadati dell'istanza sono disponibili dall'istanza in esecuzione, non è necessario utilizzare la EC2 console Amazon o il 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.

Quelli riportati di seguito sono considerati tutti metadati dell'istanza, ma vi si accede in modi diversi. Seleziona la scheda che rappresenta il tipo di metadati dell'istanza a cui desideri accedere per visualizzare ulteriori informazioni.

Metadata

Le proprietà dei metadati dell'istanza sono suddivise in categorie. Per una descrizione di ciascuna categoria di metadati dell'istanza, consulta Categorie di metadati dell'istanza.

Per accedere alle proprietà dei metadati dell'istanza dall'interno di un'istanza in esecuzione, recupera i dati da quanto segue IPv4 o. IPv6 URIs Gli indirizzi IP sono indirizzi locali di collegamento e sono validi solo dall'istanza. Per ulteriori informazioni, consulta Indirizzi link local.

IPv4

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

IPv6

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

Per recuperare dati dinamici dall'interno di un'istanza in esecuzione, utilizzate uno dei seguenti metodi. URIs

IPv4

http://169.254.169.254/latest/dynamic/

IPv6

http://[fd00:ec2::254]/latest/dynamic/
Esempi: accesso con cURL

Gli esempi seguenti utilizzano cURL per recuperare le categorie di identità di alto livello dell'istanza.

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
Esempi: Accesso con PowerShell

Gli esempi seguenti vengono utilizzati PowerShell per recuperare le categorie di identità delle istanze di alto livello.

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

Per ulteriori informazioni sui dati dinamici e per esempi di come recuperarli, consulta Documenti di identità delle istanze per le EC2 istanze Amazon.

User data

Per recuperare i dati utente da un'istanza, utilizzate uno dei seguenti metodi. URIs Per recuperare i dati utente utilizzando l' IPv6 indirizzo, è necessario abilitarlo e l'istanza deve essere un'istanza basata su Nitro in una sottorete che supporti. IPv6

IPv4

http://169.254.169.254/latest/user-data

IPv6

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

Una richiesta di dati utente restituisce i dati nel formato originale (tipo di contenuto application/octet-stream). Se l'istanza non dispone di dati utente, la richiesta restituisce 404 - Not Found.

Esempi: accesso con cURL per recuperare testo separato da virgola

Gli esempi seguenti utilizzano cURL per recuperare i dati utente specificati come testo separato da virgola.

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,,,
Esempi: Access with per recuperare testo separato PowerShell da virgole

Gli esempi seguenti vengono utilizzati PowerShell per recuperare i dati utente specificati come testo separato da virgole.

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,,,
Esempi: accesso con cURL per recuperare uno script

Gli esempi seguenti utilizzano cURL per recuperare i dati utente specificati come 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
Esempi: Access with PowerShell per recuperare uno script

Gli esempi seguenti vengono utilizzati PowerShell per recuperare i dati utente specificati come 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>

Esegui una query sulle opzioni dei metadati dell'istanza per le istanze esistenti

Puoi eseguire una query sulle opzioni dei metadati dell'istanza per le istanze esistenti utilizzando uno dei seguenti metodi.

Console
Esecuzione di query sulle opzioni dei metadati dell'istanza per un'istanza esistente tramite la console
  1. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel pannello di navigazione, seleziona Instances (Istanze).

  3. Selezionare l'istanza.

  4. Seleziona Operazioni, Impostazioni istanza, Modifica opzioni dei metadati dell'istanza.

  5. Verifica le opzioni correnti dei metadati dell'istanza nella finestra di dialogo Modifica delle opzioni dei metadati dell'istanza.

AWS CLI
Per interrogare le opzioni dei metadati dell'istanza per un'istanza esistente utilizzando il AWS CLI

Utilizzare il comando describe-instances.

aws ec2 describe-instances \ --instance-id i-1234567898abcdef0 \ --query 'Reservations[].Instances[].MetadataOptions'
PowerShell
Per interrogare le opzioni dei metadati dell'istanza per un'istanza esistente utilizzando gli strumenti per PowerShell

Utilizzare il Get-EC2Instancecmdlet.

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

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

Se una IMDSv1 richiesta non riceve alcuna risposta, è probabile che IMDSv2 sia obbligatoria.

Per le richieste effettuate utilizzando IMDSv2, è possibile restituire i seguenti codici di errore HTTP:

  • 400 - Missing or Invalid Parameters – La richiesta PUT non è valida.

  • 401 - Unauthorized – La richiesta GET utilizza un token non valido. L'operazione consigliata è quella di generare un nuovo token.

  • 403 - Forbidden: la richiesta non è consentita o l'IMDS è disattivato.

  • 404 - Not Found— La risorsa non è disponibile o non esiste tale risorsa.

  • 503: Non è stato possibile completare la richiesta. Riprova la richiesta .

Se l'IMDS restituisce un errore, curl stampa il messaggio di errore nell'output e restituisce un codice di stato di operazione riuscita. Il messaggio di errore viene memorizzato nella variabile TOKEN, il che causa l'esito negativo dei comandi curl che utilizzano il token. Se chiami curl con l'opzione -f, restituisce un codice di stato di errore in caso di errore del server HTTP. Se abiliti la gestione degli errori, la shell può rilevare l'errore e fermare lo script.

Throttling delle query

La limitazione (della larghezza di banda della rete) delle query viene applicata in base all'istanza, ovvero vengono applicate restrizioni al numero di connessioni simultanee da un'istanza all'IMDS.

Se utilizzi l'IMDS per recuperare le credenziali di AWS sicurezza, evita di richiedere le credenziali durante ogni transazione o contemporaneamente a un numero elevato di thread o processi, poiché ciò potrebbe comportare una limitazione. 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.

Se si verifica tale limitazione (della larghezza di banda della rete) durante l'accesso all'IMDS, riprova a eseguire la query con un approccio basato sul backoff esponenziale.