View a markdown version of this page

Accesso ai metadati dell'istanza per un'istanza EC2 - 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à.

Accesso ai metadati dell'istanza per un'istanza EC2

Puoi accedere ai metadati delle istanze EC2 dall'interno dell'istanza stessa o dalla console EC2, dall'API, dagli SDK o dalla 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 Linux che utilizza l'attributo AWS CLIhttps://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html modify-instance-attribute. Per un esempio di Windows che utilizza gli Strumenti per Windows, vedi. PowerShell Dati 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 i metadati delle istanze, considerate quanto segue.

Errori di avvio dell'istanza dovuti all'applicazione di IMDSv2 () HttpTokensEnforced=enabled

Prima di abilitare l'applicazione di IMDSv2, è necessario che tutto il software sull'istanza supporti IMDSv2, dopodiché è possibile modificare l'impostazione predefinita per disabilitare IMDSv1 (), dopodiché è possibile abilitare l'applicazione. httpTokens=required Per ulteriori informazioni, consulta Passaggio all'utilizzo di Servizio di metadati dell'istanza Versione 2.

Formato comando

Il formato del comando varia a seconda che utilizzi il servizio metadati di istanza versione 1 (IMDSv1) o versione 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 è obbligatorio, IMDSv1 non funziona

Se utilizzi IMDSv1 e non ricevi alcuna risposta, è probabile che IMDSv2 sia obbligatorio. Per verificare se IMDSv2 è obbligatorio, seleziona l'istanza per visualizzarne i dettagli. Il valore IMDSv2 indica Obbligatorio (devi utilizzare IMDSv2) o Facoltativo (puoi utilizzare IMDSv2 o IMDSv1).

(IMDSv2) Utilizza /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 dell'istanza, ti consigliamo di utilizzare latest nel percorso e non nel numero di versione.

Supporto IPv6

Per recuperare i metadati dell'istanza utilizzando un indirizzo IPv6, assicurati di abilitare e utilizzare l'indirizzo IPv6 dell'IMDS [fd00:ec2::254] anziché l'indirizzo IPv4 169.254.169.254. L'istanza deve essere un'istanza avviata in una Nitro-based sottorete che supporta IPv6. https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range

(Windows) Creazione di AMI personalizzate 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'AMI Amazon EC2 utilizzando Windows Sysprep.

In un ambiente container, prendi in considerazione la riconfigurazione o l’aumento del limite di hop a 2

Gli AWS SDK utilizzano le chiamate IMDSv2 per impostazione predefinita. Se la chiamata IMDSv2 non riceve risposta, alcuni AWS SDK riprovano la chiamata e, se ancora non riesce, utilizzano IMDSv1. Ciò può comportare un ritardo, soprattutto in un ambiente del container. Per AWS gli SDK che richiedono IMDSv2, se il limite di hop è 1 in un ambiente container, la chiamata potrebbe non ricevere alcuna risposta perché l'accesso al container è considerato un hop di rete aggiuntivo.

Per mitigare questi problemi in un ambiente container, valuta la possibilità di modificare la configurazione in modo da trasferire le impostazioni (ad esempio Regione AWS) direttamente al contenitore o di aumentare il limite di hop a 2. Per ulteriori informazioni, consulta Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Service. 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. Ad esempio:

    • La console Amazon EC2 può eseguire automaticamente la codifica con base64 oppure accettare input codificati con base64.

    • AWS CLI per impostazione predefinita, la versione 2 esegue automaticamente la codifica base64 dei parametri binari. AWS CLI la versione 1 esegue la codifica base64 del parametro per te. --user-data

    • AWS SDK per Python (Boto3) Esegue la codifica in base 64 del parametro per te. 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.

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

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.

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 dai seguenti URI IPv4 o IPv6. Gli indirizzi IP sono indirizzi locali di collegamento e sono validi solo dall'istanza. Per ulteriori informazioni, consulta Link-local indirizzi.

IPv4

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

IPv6

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

Per recuperare i dati dinamici dall'interno di un'istanza in esecuzione, utilizza i seguenti URI.

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à dell'istanza per le istanze Amazon EC2.

User data

Per recuperare i dati utente da un'istanza, utilizza i seguenti URI. Per recuperare i dati utente utilizzando l'indirizzo IPv6, è necessario abilitarlo e l'istanza deve essere un'Nitro-based istanza in una sottorete che supporta 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: Accedere con per recuperare il testo separato da virgole PowerShell

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: Accedere con 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 query sulle opzioni dei metadati dell’istanza per le istanze esistenti.

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

  2. Nel riquadro di navigazione, scegliere Instances (Istanze).

  3. Seleziona la tua istanza e verifica i seguenti campi:

    • IMDSv2: il valore è Obbligatorio o Facoltativo.

    • Consenti tag nei metadati dell’istanza: il valore è Abilitato o Disabilitato.

  4. Dopo aver selezionato l’istanza, scegli Operazioni, Impostazioni istanza, Modifica opzioni dei metadati dell’istanza.

    La finestra di dialogo mostra se il servizio di metadati di istanza è abilitato o disabilitato per l’istanza selezionata.

AWS CLI
Per eseguire una query sulle opzioni dei metadati dell’istanza per un’istanza esistente

Utilizzare il comando describe-instances.

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

Utilizza il cmdlet Get-EC2Instance.

(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 richiesta IMDSv1 non riceve alcuna risposta, è probabile che IMDSv2 sia obbligatorio.

Per richieste effettuate mediante IMDSv2, possono essere restituiti 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 alcuna risorsa di questo tipo.

  • 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 stai utilizzando l'IMDS per recuperare le credenziali AWS di sicurezza, evita di richiederle durante ogni transazione o contemporaneamente da un numero elevato di thread o processi, poiché ciò potrebbe comportare limitazioni. 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.