

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
<a name="instancedata-data-retrieval"></a>

Puoi accedere ai metadati dell'istanza EC2 dall'interno dell'istanza stessa o dalla console EC2, 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](#query-IMDS-existing-instances).

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](user-data.md#user-data-modify). Per un esempio di Linux che utilizza il AWS CLI, consulta. [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html) Per un esempio di Windows che utilizza gli strumenti per Windows PowerShell, vedere[Dati utente e strumenti per Windows PowerShell](user-data.md#user-data-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
<a name="imds-considerations"></a>

Per evitare problemi con i metadati delle istanze, considerate quanto segue.

**Errori di avvio dell'istanza dovuti all' IMDSv2 applicazione () `HttpTokensEnforced=enabled`**  
Prima di abilitare IMDSv2 l'imposizione, è necessario che tutto il software dell'istanza sia supportato IMDSv2, dopodiché è possibile modificare l'impostazione predefinita su disable IMDSv1 (`httpTokens=required`), dopodiché è possibile abilitare l'imposizione. Per ulteriori informazioni, consulta [Passaggio all'utilizzo di Servizio di metadati dell'istanza Versione 2](instance-metadata-transition-to-version-2.md).

**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](configuring-instance-metadata-service.md).

**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 **IMDSv2**valore indica **Obbligatorio** (è necessario utilizzare IMDSv2) o **Facoltativo** (è possibile utilizzare uno dei due IMDSv2 oIMDSv1). 

**(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.

**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](instance-types.md#instance-hypervisor-type) lanciata in una sottorete che supporti. IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range)

**(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'AMI Amazon EC2 utilizzando Windows Sysprep](ami-create-win-sysprep.md).

**In un ambiente container, prendi in considerazione la riconfigurazione o l’aumento del limite di hop a 2**  
Per impostazione predefinita, AWS SDKs utilizza IMDSv2 le chiamate. 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 ulteriori informazioni, consulta [Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Service](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/). Per informazioni sulla modifica del limite di hop, consulta [Modifica del limite di hop di risposta PUT](configuring-IMDS-existing-instances.md#modify-PUT-response-hop-limit).

**Limite di pacchetti al secondo (PPS)**  
Esiste un limite di 1024 pacchetti al secondo (PPS) per i servizi che utilizzano indirizzi [locali del collegamento](using-instance-addressing.md#link-local-addresses). Questo limite include l'aggregato di [query DNS del risolutore Route 53](https://docs.aws.amazon.com/vpc/latest/userguide/AmazonDNS-concepts.html#vpc-dns-limits), richieste del servizio di metadati di istanza (IMDS), richieste [Network Time Protocol (NTP) del servizio orario di Amazon](set-time.md) e richieste [Windows Licensing Service (per istanze basate su Microsoft Windows)](https://aws.amazon.com/windows/resources/licensing/). 

**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. 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](https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-binaryparam) 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 per 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)\$14.
+ 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
<a name="instancedata-inside-access"></a>

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](ec2-instance-metadata.md#instancedata-data-categories).

Per accedere alle proprietà dei metadati dell'istanza dall'interno di un'istanza in esecuzione, recupera i dati dal seguente o. IPv4 IPv6 URIs Gli indirizzi IP sono indirizzi locali di collegamento e sono validi solo dall'istanza. Per ulteriori informazioni, consulta [Indirizzi link local](using-instance-addressing.md#link-local-addresses).

**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](instance-identity-documents.md).

------
#### [ 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](instance-types.md#instance-hypervisor-type) 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
<a name="query-IMDS-existing-instances"></a>

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/](https://console.aws.amazon.com/ec2/).

1. Nel riquadro di navigazione, scegliere **Instances (Istanze)**.

1. 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**.

1. 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](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html).

```
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, utilizzare gli strumenti per PowerShell**  
Utilizza il cmdlet [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html).

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

------

## Risposte e messaggi di errore
<a name="instance-metadata-returns"></a>

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

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 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
<a name="instancedata-throttling"></a>

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](instance-metadata-security-credentials.md).

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.

# Utilizzo del servizio di metadati di istanza per accedere ai metadati dell'istanza
<a name="configuring-instance-metadata-service"></a>

Puoi accedere ai metadati dell'istanza da un'istanza in esecuzione utilizzando uno dei metodi seguenti:
+ Instance Metadata Service Version 2 (IMDSv2): un metodo orientato alla sessione

  Per alcuni esempi, consulta [Esempi per IMDSv2](#instance-metadata-retrieval-examples).
+ Instance Metadata Service Version 1 ()IMDSv1: un metodo request/response 

  Per alcuni esempi, consulta [Esempi per IMDSv1](#instance-metadata-retrieval-examples-imdsv1).

Per impostazione predefinita, è possibile utilizzare uno IMDSv1 o IMDSv2 entrambi.

È possibile configurare l'Instance Metadata Service (IMDS) su ogni istanza in modo che accetti solo IMDSv2 chiamate, con conseguente esito negativo IMDSv1 delle chiamate. Per informazioni su come configurare l'istanza da utilizzare IMDSv2, consulta. [Configurazione delle opzioni del servizio di metadati di istanza](configuring-instance-metadata-options.md)

Le `GET` intestazioni `PUT` or sono esclusive di. IMDSv2 Se queste intestazioni sono presenti nella richiesta, la richiesta è destinata a. IMDSv2 Se non sono presenti intestazioni, si presume che la richiesta sia destinata. IMDSv1

Per un'analisi dettagliata di IMDSv2, consulta [Aggiungi una difesa approfondita contro firewall aperti, reverse proxy e vulnerabilità SSRF con miglioramenti](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/) al servizio EC2 Instance Metadata.

**Topics**
+ [Funzionamento di Servizio di metadati dell'istanza Versione 2](#instance-metadata-v2-how-it-works)
+ [Usa un AWS SDK supportato](#use-a-supported-sdk-version-for-imdsv2)
+ [Esempi per IMDSv2](#instance-metadata-retrieval-examples)
+ [Esempi per IMDSv1](#instance-metadata-retrieval-examples-imdsv1)

## Funzionamento di Servizio di metadati dell'istanza Versione 2
<a name="instance-metadata-v2-how-it-works"></a>

IMDSv2 utilizza richieste orientate alla sessione. Con richieste orientate alla sessione, puoi creare un token di sessione che definisce la durata della sessione, che può essere compresa tra un minimo di un secondo e un massimo di sei ore. Durante la specifica della durata, puoi utilizzare lo stesso token di sessione per le richieste successive. Al termine della durata specificata, è necessario creare un nuovo token di sessione da utilizzare per richieste future.

**Nota**  
Gli esempi in questa sezione utilizzano l' IPv4 indirizzo dell'Instance Metadata Service (IMDS):. `169.254.169.254` Se stai recuperando i metadati dell'istanza per le istanze EC2 tramite l' IPv6 indirizzo, assicurati di abilitare e utilizzare invece l'indirizzo:. IPv6 `[fd00:ec2::254]` L' IPv6 indirizzo dell'IMDS è compatibile con i comandi. IMDSv2 L' IPv6 indirizzo è accessibile solo sulle [istanze basate su Nitro](instance-types.md#instance-hypervisor-type) in una [sottorete IPv6 supportata](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range) (dual stack o solo). IPv6 

Gli esempi seguenti utilizzano uno script di shell e recuperano gli elementi di metadati dell' IMDSv2 istanza di primo livello. Ogni esempio:
+ Crea un token di sessione della durata di sei ore (21.600 secondi) utilizzando la richiesta `PUT`
+ Memorizza l'intestazione del token di sessione in una variabile denominata `TOKEN` (istanze Linux) oppure `token` (istanze Windows)
+ Richiede gli elementi di metadati di livello superiore utilizzando il token

### Esempio per Linux
<a name="how-imdsv2-works-example-linux"></a>

È possibile eseguire due comandi separati o combinarli.

**Comandi separati**

Innanzitutto, generare un token utilizzando il comando riportato di seguito.

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
```

Quindi, utilizzare il token per generare elementi di metadati di primo livello utilizzando il seguente comando.

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/
```

**Comandi combinati**

È possibile memorizzare il token e combinare i comandi. L'esempio seguente combina i due comandi precedenti e memorizza l'intestazione del token di sessione in una variabile denominata TOKEN.

**Nota**  
Se si verifica un errore nella creazione del token, invece di un token valido nella variabile viene memorizzato un messaggio di errore e il comando avrà esito negativo.

```
[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/meta-data/
```

Dopo aver creato un token, puoi riutilizzarlo finché non scade. Nel comando di esempio seguente, che ottiene l’ID dell’AMI utilizzata per avviare l’istanza, viene riutilizzato il token archiviato memorizzato in `$TOKEN` nell’esempio precedente.

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
```

### Esempio per Windows
<a name="how-imdsv2-works-example-windows"></a>

```
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/meta-data/
```

Dopo aver creato un token, puoi riutilizzarlo finché non scade. Nel comando di esempio seguente, che ottiene l’ID dell’AMI utilizzata per avviare l’istanza, viene riutilizzato il token archiviato memorizzato in `$token` nell’esempio precedente.

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} `
	-Method GET -uri http://169.254.169.254/latest/meta-data/ami-id
```

Quando si utilizza IMDSv2 per richiedere i metadati dell'istanza, la richiesta deve includere quanto segue:

1. Utilizza una richiesta `PUT` per inizializzare una sessione al servizio di metadati dell'istanza. La richiesta `PUT` restituisce un token che deve essere incluso nelle richieste `GET` successive al servizio di metadati dell'istanza. Il token è obbligatorio per accedere ai metadati utilizzando IMDSv2.

1. Includi il token in tutte le richieste `GET` inviate all'IMDS. Quando l'uso del token è impostato su `required`, le richieste senza una token valido o con un token scaduto ricevono un codice di errore HTTP `401 - Unauthorized`.
   + Il token è una chiave specifica dell'istanza. Il token non è valido su altre istanze EC2 e verrà rifiutato se si tenta di utilizzarlo all'esterno dell'istanza su cui è stato generato.
   + La richiesta `PUT` deve includere un'intestazione che specifica il Time To Live (TTL) per il token, in secondi, fino a un massimo di sei ore (21.600 secondi). Il token rappresenta una sessione logica. Il TTL specifica la durata di validità del token e, pertanto, la durata della sessione.
   + Dopo che un token scade, per continuare ad accedere ai metadati dell'istanza, è necessario creare una nuova sessione utilizzando un altro `PUT`.
   + Puoi scegliere di riutilizzare un token o creare un nuovo token con ogni richiesta. Per un piccolo numero di richieste, potrebbe essere più semplice generare e utilizzare immediatamente un token ogni volta che devi accedere al servizio di metadati dell'istanza (IMDS). Per maggior efficienza, tuttavia, puoi specificare una durata maggiore per il token e riutilizzarlo, piuttosto che dover riscrivere una richiesta `PUT` ogni volta che devi richiedere metadati dell'istanza. Non esiste un limite pratico al numero di token simultanei, ognuno dei quali rappresenta la propria sessione. IMDSv2 è, tuttavia, ancora vincolato dai normali limiti di connessione e limitazione IMDS. Per ulteriori informazioni, consulta [Throttling delle query](instancedata-data-retrieval.md#instancedata-throttling).

Nei metodi HTTP `GET` e `HEAD` sono consentite richieste dei metadati dell'istanza IMDSv2. Le richieste `PUT` vengono rifiutate se contengono un'intestazione X-Forwarded-For.

Per impostazione predefinita, la risposta alle richieste `PUT` dispone di un limite di hop della risposta (time-to-live) di `1` a livello del protocollo IP. Se hai bisogno di un limite di hop maggiore, puoi regolarlo usando il comando. [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) AWS CLI Ad esempio, potrebbe essere necessario un limite di hop maggiore per la compatibilità con le versioni precedenti dei servizi container in esecuzione sull'istanza. Per ulteriori informazioni, consulta [Modifica delle opzioni dei metadati dell'istanza per le istanze esistenti](configuring-IMDS-existing-instances.md).

## Usa un AWS SDK supportato
<a name="use-a-supported-sdk-version-for-imdsv2"></a>

Per utilizzare IMDSv2, le istanze EC2 devono utilizzare una AWS versione SDK che supporti l'utilizzo. IMDSv2 Le versioni più recenti di tutto il supporto che utilizza. AWS SDKs IMDSv2

**Importante**  
Ti consigliamo di rimanere al passo con i nuovi rilasci degli SDK per poter usufruire delle funzionalità, degli aggiornamenti di sicurezza e delle dipendenze sottostanti più recenti. L'uso continuato di una versione SDK non supportata è sconsigliato ed è a tua discrezione. Per ulteriori informazioni, consulta la [politica di manutenzione di AWS SDKs and Tools](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) nella *AWS SDKs and Tools Reference Guide*.

Di seguito sono riportate le versioni minime che supportano l'utilizzo di IMDSv2:
+ [AWS CLI](https://github.com/aws/aws-cli) - 1.16.289
+ [AWS Tools for Windows PowerShell](https://github.com/aws/aws-tools-for-powershell) – 4,0.1.0
+ [AWS SDK per .NET](https://github.com/aws/aws-sdk-net) - 3.3.634.1
+ [AWS SDK per C\$1\$1](https://github.com/aws/aws-sdk-cpp) - 1.7.229
+ [AWS SDK per Go](https://github.com/aws/aws-sdk-go) - 1.25.38
+ [AWS SDK per Go v2](https://github.com/aws/aws-sdk-go-v2) — 0.19.0
+ [AWS SDK per Java](https://github.com/aws/aws-sdk-java) - 1.11.678
+ [AWS SDK for Java 2.x](https://github.com/aws/aws-sdk-java-v2) - 2.10.21
+ [AWS SDK](https://github.com/aws/aws-sdk-js) per in Node.js — 2.722.0 JavaScript 
+ [AWS SDK per Kotlin](https://github.com/awslabs/aws-sdk-kotlin) - 1.1.4
+ [AWS SDK per PHP](https://github.com/aws/aws-sdk-php) - 3.147.7
+ [AWS SDK per Python (Botocore](https://github.com/boto/botocore)) — 1.13.25
+ [AWS SDK per Python (Boto3)](https://github.com/boto/boto3) - 1.12.6
+ [AWS SDK per Ruby](https://github.com/aws/aws-sdk-ruby) - 3.79.0

## Esempi per IMDSv2
<a name="instance-metadata-retrieval-examples"></a>

Esegui i seguenti esempi sulla tua istanza Amazon EC2 per recuperare i metadati dell'istanza. IMDSv2

Nelle istanze Windows, puoi usare Windows PowerShell oppure puoi installare cURL o wget. Se installi uno strumento di terze parti su un'istanza Windows, assicurati di leggere attentamente la relativa documentazione, dal momento che le chiamate e l'output potrebbero essere diversi da quanto documentato in questa sede.

**Topics**
+ [Recupero delle versioni disponibili dei metadati dell'istanza](#instance-metadata-ex-1)
+ [Recupero degli elementi di metadati di primo livello](#instance-metadata-ex-2)
+ [Ottenimento dei valori per gli elementi di metadati](#instance-metadata-ex-2a)
+ [Recupero dell'elenco di chiavi pubbliche disponibili](#instance-metadata-ex-3)
+ [Visualizzazione dei formati in cui è disponibile la chiave pubblica 0](#instance-metadata-ex-4)
+ [Recupero della chiave pubblica 0 (nel formato di chiave OpenSSH)](#instance-metadata-ex-5)
+ [Recupero dell'ID della sottorete per un'istanza](#instance-metadata-ex-6)
+ [Ottenere i tag dell'istanza per un'istanza](#instance-metadata-ex-7)

### Recupero delle versioni disponibili dei metadati dell'istanza
<a name="instance-metadata-ex-1"></a>

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.

------
#### [ cURL ]

```
[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/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------
#### [ PowerShell ]

```
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/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------

### Recupero degli elementi di metadati di primo livello
<a name="instance-metadata-ex-2"></a>

Questo esempio recupera gli elementi di metadati di primo livello. Per ulteriori informazioni sugli elementi nella risposta, consulta [Categorie di metadati dell'istanza](ec2-instance-metadata.md#instancedata-data-categories).

Tieni presente che i tag sono inclusi in questo output solo se hai consentito l'accesso. Per ulteriori informazioni, consulta [Abilita l’accesso ai tag nei metadati dell’istanza](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS).

------
#### [ cURL ]

```
[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/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------
#### [ PowerShell ]

```
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/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------

### Ottenimento dei valori per gli elementi di metadati
<a name="instance-metadata-ex-2a"></a>

Gli esempi seguenti consentono di recuperare i valori di alcuni degli elementi di metadati di primo livello che sono stati ottenuti nell'esempio precedente. Queste richieste utilizzano il token memorizzato che è stato creato utilizzando il comando nell'esempio precedente. Il token non deve essere scaduto.

------
#### [ cURL ]

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------

### Recupero dell'elenco di chiavi pubbliche disponibili
<a name="instance-metadata-ex-3"></a>

Questo esempio recupera l'elenco delle chiavi pubbliche disponibili.

------
#### [ cURL ]

```
[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/meta-data/public-keys/
0=my-public-key
```

------
#### [ PowerShell ]

```
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/meta-data/public-keys/
0=my-public-key
```

------

### Visualizzazione dei formati in cui è disponibile la chiave pubblica 0
<a name="instance-metadata-ex-4"></a>

Questo esempio mostra i formati in cui è disponibile la chiave pubblica 0.

------
#### [ cURL ]

```
[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/meta-data/public-keys/0/
openssh-key
```

------
#### [ PowerShell ]

```
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/meta-data/public-keys/0/openssh-key
openssh-key
```

------

### Recupero della chiave pubblica 0 (nel formato di chiave OpenSSH)
<a name="instance-metadata-ex-5"></a>

Questo esempio recupera la chiave pubblica 0 (nel formato di chiave OpenSSH).

------
#### [ cURL ]

```
[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/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------
#### [ PowerShell ]

```
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/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------

### Recupero dell'ID della sottorete per un'istanza
<a name="instance-metadata-ex-6"></a>

In questo esempio viene recuperato l'ID della sottorete per un'istanza.

------
#### [ cURL ]

```
[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/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------
#### [ PowerShell ]

```
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/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------

### Ottenere i tag dell'istanza per un'istanza
<a name="instance-metadata-ex-7"></a>

Se l'accesso ai tag dell'istanza nei metadati dell'istanza è abilitato, puoi ottenere i tag per un'istanza dai metadati dell'istanza. Per ulteriori informazioni, consulta [Recupero dei tag dai metadati dell'istanza](work-with-tags-in-IMDS.md#retrieve-tags-from-IMDS).

## Esempi per IMDSv1
<a name="instance-metadata-retrieval-examples-imdsv1"></a>

Esegui i seguenti esempi sulla tua istanza Amazon EC2 per recuperare i metadati dell'istanza. IMDSv1

Nelle istanze Windows, puoi usare Windows PowerShell oppure puoi installare cURL o wget. Se installi uno strumento di terze parti su un'istanza Windows, assicurati di leggere attentamente la relativa documentazione, dal momento che le chiamate e l'output potrebbero essere diversi da quanto documentato in questa sede.

**Topics**
+ [Recupero delle versioni disponibili dei metadati dell'istanza](#instance-metadata-ex-1-imdsv1)
+ [Recupero degli elementi di metadati di primo livello](#instance-metadata-ex-2-imdsv1)
+ [Ottenimento dei valori per gli elementi di metadati](#instance-metadata-ex-2a-imdsv1)
+ [Recupero dell'elenco di chiavi pubbliche disponibili](#instance-metadata-ex-3-imdsv1)
+ [Visualizzazione dei formati in cui è disponibile la chiave pubblica 0](#instance-metadata-ex-4-imdsv1)
+ [Recupero della chiave pubblica 0 (nel formato di chiave OpenSSH)](#instance-metadata-ex-5-imdsv1)
+ [Recupero dell'ID della sottorete per un'istanza](#instance-metadata-ex-6-imdsv1)
+ [Ottenere i tag dell'istanza per un'istanza](#instance-metadata-ex-7-imdsv1)

### Recupero delle versioni disponibili dei metadati dell'istanza
<a name="instance-metadata-ex-1-imdsv1"></a>

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.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/
1.0
2007-01-19
2007-03-01
2007-08-29
2007-10-10
2007-12-15
2008-02-01
2008-09-01
2009-04-04
2011-01-01
2011-05-01
2012-01-12
2014-02-25
2014-11-05
2015-10-20
2016-04-19
...
latest
```

------

### Recupero degli elementi di metadati di primo livello
<a name="instance-metadata-ex-2-imdsv1"></a>

Questo esempio recupera gli elementi di metadati di primo livello. Per ulteriori informazioni sugli elementi nella risposta, consulta [Categorie di metadati dell'istanza](ec2-instance-metadata.md#instancedata-data-categories).

Tieni presente che i tag sono inclusi in questo output solo se hai consentito l'accesso. Per ulteriori informazioni, consulta [Abilita l’accesso ai tag nei metadati dell’istanza](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS).

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/    
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
iam/
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
tags/
```

------

### Ottenimento dei valori per gli elementi di metadati
<a name="instance-metadata-ex-2a-imdsv1"></a>

Questi esempi consentono di recuperare i valori di alcuni degli elementi di metadati di primo livello che sono stati ottenuti nell'esempio precedente.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ami-id
ami-0abcdef1234567890
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/reservation-id
r-0efghijk987654321
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/local-hostname
ip-10-251-50-12.ec2.internal
```

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-hostname
ec2-203-0-113-25.compute-1.amazonaws.com
```

------

### Recupero dell'elenco di chiavi pubbliche disponibili
<a name="instance-metadata-ex-3-imdsv1"></a>

Questo esempio recupera l'elenco delle chiavi pubbliche disponibili.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/
0=my-public-key
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key
```

------

### Visualizzazione dei formati in cui è disponibile la chiave pubblica 0
<a name="instance-metadata-ex-4-imdsv1"></a>

Questo esempio mostra i formati in cui è disponibile la chiave pubblica 0.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/
openssh-key
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
openssh-key
```

------

### Recupero della chiave pubblica 0 (nel formato di chiave OpenSSH)
<a name="instance-metadata-ex-5-imdsv1"></a>

Questo esempio recupera la chiave pubblica 0 (nel formato di chiave OpenSSH).

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC
VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6
b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd
BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN
MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD
VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z
b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt
YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ
21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T
rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE
Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4
nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb
FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb
NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
```

------

### Recupero dell'ID della sottorete per un'istanza
<a name="instance-metadata-ex-6-imdsv1"></a>

In questo esempio viene recuperato l'ID della sottorete per un'istanza.

------
#### [ cURL ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------
#### [ PowerShell ]

```
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id
subnet-be9b61d7
```

------

### Ottenere i tag dell'istanza per un'istanza
<a name="instance-metadata-ex-7-imdsv1"></a>

Se l'accesso ai tag dell'istanza nei metadati dell'istanza è abilitato, puoi ottenere i tag per un'istanza dai metadati dell'istanza. Per ulteriori informazioni, consulta [Recupero dei tag dai metadati dell'istanza](work-with-tags-in-IMDS.md#retrieve-tags-from-IMDS).

# Passaggio all'utilizzo di Servizio di metadati dell'istanza Versione 2
<a name="instance-metadata-transition-to-version-2"></a>

Se desideri configurare le tue istanze in modo che accettino solo chiamate Instance Metadata Service Version 2 (IMDSv2), ti consigliamo di utilizzare i seguenti strumenti e il percorso di transizione.

**Topics**
+ [Strumenti per la transizione a IMDSv2](#tools-for-transitioning-to-imdsv2)
+ [Percorso consigliato per la richiesta IMDSv2](#recommended-path-for-requiring-imdsv2)

## Strumenti per la transizione a IMDSv2
<a name="tools-for-transitioning-to-imdsv2"></a>

I seguenti strumenti possono aiutarti a identificare, monitorare e gestire la transizione del tuo software da IMDSv1 a IMDSv2. Per le istruzioni su come utilizzare questi strumenti, vedere[Percorso consigliato per la richiesta IMDSv2](#recommended-path-for-requiring-imdsv2).

**AWS software**  
Le versioni più recenti degli AWS CLI AWS SDK supportano IMDSv2. Per utilizzare IMDSv2, aggiorna le tue istanze EC2 per utilizzare le versioni più recenti. Per le versioni AWS SDK minime supportate, consulta. IMDSv2 [Usa un AWS SDK supportato](configuring-instance-metadata-service.md#use-a-supported-sdk-version-for-imdsv2)  
Supportano tutti i pacchetti software Amazon Linux 2 e Amazon Linux 2023 IMDSv2. Amazon Linux 2023 viene disabilitato IMDSv1 per impostazione predefinita.

**IMDS Packet Analyzer**  
IMDS Packet Analyzer è uno strumento open source che identifica e registra le IMDSv1 chiamate durante la fase di avvio e le operazioni di runtime dell'istanza. Analizzando questi log, puoi identificare con precisione il software che effettua IMDSv1 chiamate sulle tue istanze e determinare cosa deve essere aggiornato per supportare solo le tue istanze. IMDSv2 Puoi eseguire IMDS Packet Analyzer da una riga di comando o installarlo come servizio. Per ulteriori informazioni, vedere on. [AWS ImdsPacketAnalyzer*GitHub*](https://github.com/aws/aws-imds-packet-analyzer)

**CloudWatch**  
CloudWatch fornisce le due metriche seguenti per il monitoraggio delle istanze:  
`MetadataNoToken`— IMDSv2 utilizza sessioni supportate da token, mentre non lo fa. IMDSv1 La `MetadataNoToken` metrica tiene traccia del numero di chiamate all'Instance Metadata Service (IMDS) utilizzate. IMDSv1 Monitorando questo parametro a zero, puoi determinare se e quando tutto il software è stato aggiornato per utilizzare IMDSv2.  
`MetadataNoTokenRejected`— Dopo aver disabilitato IMDSv1, puoi utilizzare la `MetadataNoTokenRejected` metrica per tenere traccia del numero di volte in cui una IMDSv1 chiamata è stata tentata e rifiutata. Monitorando questa metrica, puoi verificare se il tuo software deve essere aggiornato per essere utilizzato. IMDSv2  
Per ogni istanza EC2, queste metriche si escludono a vicenda. Quando IMDSv1 è abilitato (`httpTokens = optional`), emette solo. `MetadataNoToken` Quando IMDSv1 è disabilitato (`httpTokens = required`), `MetadataNoTokenRejected` emette solo. Per quando utilizzare queste metriche, consulta. [Percorso consigliato per la richiesta IMDSv2](#recommended-path-for-requiring-imdsv2)  
Per ulteriori informazioni, consulta [Parametri dell'istanza](viewing_metrics_with_cloudwatch.md#ec2-cloudwatch-metrics).

**Avvio APIs**  
**Nuove istanze:** utilizza l'[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)API per avviare nuove istanze che richiedono l'uso di. IMDSv2 Per ulteriori informazioni, consulta [Configurazione delle opzioni dei metadati dell'istanza per le nuove istanze](configuring-IMDS-new-instances.md).  
**Istanze esistenti:** utilizza l'[ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html)API per richiedere l'utilizzo IMDSv2 su istanze esistenti. Per ulteriori informazioni, consulta [Modifica delle opzioni dei metadati dell'istanza per le istanze esistenti](configuring-IMDS-existing-instances.md).  
**Nuove istanze lanciate dai gruppi Auto Scaling**: per richiedere l'uso IMDSv2 di su tutte le nuove istanze lanciate dai gruppi Auto Scaling, i gruppi Auto Scaling possono utilizzare un modello di avvio o una configurazione di avvio. Quando [crei un modello di avvio](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) o [una configurazione di avvio](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/create-launch-configuration.html), devi configurare i parametri `MetadataOptions` per richiedere l'utilizzo di IMDSv2. Il gruppo con scalabilità automatica avvia le nuove istanza tramite il nuovo modello di avvio o configurazione di avvio, senza coinvolgere le istanze esistenti.   
**Istanze esistenti in un gruppo Auto Scaling**: utilizzate l'API per richiedere [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html)l'utilizzo IMDSv2 su istanze esistenti oppure terminate le istanze e il gruppo Auto Scaling lancerà nuove istanze sostitutive con le impostazioni delle opzioni dei metadati dell'istanza definite nel nuovo modello di avvio o nella nuova configurazione di avvio.

**AMIs**  
AMIs configurato con il `ImdsSupport` parametro impostato per avviare le istanze che lo richiedono per impostazione predefinita. `v2.0` IMDSv2 Amazon Linux 2023 è configurato con`ImdsSupport = v2.0`.  
**Nuovo AMIs:** utilizza il comando CLI [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) per impostare `ImdsSupport` il parametro su quando si crea una nuova `v2.0` AMI.  
**Esistente AMIs:** utilizza il comando [modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html)CLI per impostare il `ImdsSupport` parametro su `v2.0` quando si modifica un'AMI esistente.  
Per ulteriori informazioni, consulta [Configurazione dell'AMI](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-ami-configuration).

**Controlli a livello di account**  
Puoi configurare i valori predefiniti per tutte le opzioni dei metadati dell'istanza a livello di account. I valori predefiniti vengono applicati automaticamente all'avvio di un'istanza. Per ulteriori informazioni, vedere. [Imposta IMDSv2 come impostazione predefinita per l'account](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults)  
Puoi anche imporre il requisito di utilizzo a IMDSv2 livello di account. Quando l'IMDSv2 applicazione è abilitata:  
+ **Nuove istanze: le** istanze configurate per l'avvio con IMDSv1 abilitato non verranno avviate
+ **Istanze esistenti IMDSv1 disattivate:** i tentativi di attivazione IMDSv1 sulle istanze esistenti verranno impediti.
+ **Istanze esistenti con IMDSv1 opzione abilitata:** le istanze esistenti con istanze IMDSv1 già abilitate non verranno modificate.
Per ulteriori informazioni, consulta [Applica a livello di account IMDSv2](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level).

**Politiche IAM e SCPs**  
Puoi utilizzare una policy IAM o una policy AWS Organizations di controllo dei servizi (SCP) per controllare gli utenti come segue:  
+ Non è possibile avviare un'istanza utilizzando l'[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)API a meno che l'istanza non sia configurata per l'uso IMDSv2.
+ Impossibile modificare un'istanza esistente utilizzando l'[ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html)API per IMDSv1 riattivarla.
La policy IAM o SCP deve contenere le chiavi di condizione IAM indicate di seguito:  
+ `ec2:MetadataHttpEndpoint`
+ `ec2:MetadataHttpPutResponseHopLimit`
+ `ec2:MetadataHttpTokens`
Se un parametro nella chiamata API o CLI non corrisponde allo stato specificato nella policy che contiene la chiave di condizione, la chiamata API o CLI ha esito negativo e viene generata una risposta. `UnauthorizedOperation`  
Inoltre, puoi scegliere un livello aggiuntivo di protezione per imporre la modifica da IMDSv1 a IMDSv2. A livello di gestione degli accessi rispetto alle API richiamate tramite le credenziali EC2 Role, puoi utilizzare una chiave di condizione nelle policy IAM o nelle policy di controllo dei AWS Organizations servizi (). SCPs In particolare, utilizzando la chiave di condizione `ec2:RoleDelivery` con un valore pari `2.0` a nelle politiche IAM, le chiamate API effettuate con le credenziali EC2 Role ottenute da IMDSv1 riceveranno una risposta. `UnauthorizedOperation` Lo stesso può essere ottenuto su scala più ampia con tale condizione richiesta da un SCP. Ciò garantisce che le credenziali fornite tramite IMDSv1 non possano essere effettivamente utilizzate per la chiamata, APIs poiché qualsiasi chiamata API che non corrisponde alla condizione specificata riceverà un errore. `UnauthorizedOperation`  
Per esempi di policy IAM, consulta [Utilizzo dei metadati delle istanze](ExamplePolicies_EC2.md#iam-example-instance-metadata). Per ulteriori informazioni SCPs, consulta le [politiche di controllo del servizio](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) nella *Guida per l'AWS Organizations utente*.

**Politiche dichiarative**  
Utilizza le politiche dichiarative (una funzionalità di AWS Organizations) per impostare centralmente le impostazioni predefinite degli account IMDS, inclusa l' IMDSv2 applicazione, in tutta l'organizzazione. *Per un esempio di politica, consulta la scheda **Metadati delle istanze** nella sezione [Politiche dichiarative supportate](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) della Guida per l'utente.AWS Organizations *

## Percorso consigliato per la richiesta IMDSv2
<a name="recommended-path-for-requiring-imdsv2"></a>

**Topics**
+ [Fase 1: Identifica le istanze con IMDSv2 =optional e verifica l'utilizzo IMDSv1](#path-step-1)
+ [Passaggio 2: Aggiornare il software a IMDSv2](#path-step-2)
+ [Fase 3: Richiedere nessuna istanza IMDSv2](#path-step-3)
+ [Passaggio 4: Imposta IMDSv2 =required come predefinito](#path-step-4)
+ [Fase 5: Imporre le istanze a richiedere IMDSv2](#path-step-5)

### Fase 1: Identifica le istanze con IMDSv2 =optional e verifica l'utilizzo IMDSv1
<a name="path-step-1"></a>

Per valutare l'ambito IMDSv2 della migrazione, identifica le istanze configurate per consentire IMDSv1 o meno e verifica le IMDSv2 chiamate. IMDSv1

1. **Identifica le istanze configurate per consentire una delle due o: IMDSv1 IMDSv2**

------
#### [ Amazon EC2 console ]

   1. Apri la console Amazon EC2 all'indirizzo [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Nel riquadro di navigazione, scegliere **Instances (Istanze)**.

   1. Per visualizzare solo le istanze configurate per consentire IMDSv1 o IMDSv2, aggiungi il filtro **IMDSv2 =** opzionale.

   1. **In alternativa, per vedere se IMDSv2 è **facoltativo** o **obbligatorio** per tutte le istanze, apri la finestra **Preferenze** (icona a forma di ingranaggio), attiva e scegli **IMDSv2**Conferma.** **In questo modo la **IMDSv2**colonna viene aggiunta alla tabella Istanze.**

------
#### [ AWS CLI ]

   Utilizzate il comando [describe-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-options.html) e filtrate per, come segue: `metadata-options.http-tokens = optional`

   ```
   aws ec2 describe-instances --filters "Name=metadata-options.http-tokens,Values=optional" --query "Reservations[*].Instances[*].[InstanceId]" --output text
   ```

------

1. ** IMDSv1 Chiamate di controllo su ogni istanza:**

   Usa la CloudWatch metrica`MetadataNoToken`. Questa metrica mostra il numero di IMDSv1 chiamate all'IMDS sulle tue istanze. [Per ulteriori informazioni, consulta Metriche delle istanze.](https://docs.aws.amazon.com/en_us/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics)

1. **Identifica il software sulle tue istanze che IMDSv1 effettuano chiamate:**

   Utilizza l'[IMDS Packet Analyzer](https://github.com/aws/aws-imds-packet-analyzer) open source per identificare e registrare le IMDSv1 chiamate durante la fase di avvio e le operazioni di runtime dell'istanza. Utilizza queste informazioni per identificare il software da aggiornare e preparare solo le istanze all'uso. IMDSv2 Puoi eseguire IMDS Packet Analyzer da una riga di comando o installarlo come servizio.

### Passaggio 2: Aggiornare il software a IMDSv2
<a name="path-step-2"></a>

Aggiorna tutto SDKs il CLIs software e il software che utilizzano le credenziali Role sulle tue istanze a versioni IMDSv2 compatibili. Per ulteriori informazioni sull’aggiornamento dell’interfaccia a riga di comando (CLI), consulta [Installing or updating to the latest version of the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) nella *Guida per l’utente di AWS Command Line Interface *.

### Fase 3: Richiedere nessuna istanza IMDSv2
<a name="path-step-3"></a>

Dopo aver confermato l'assenza di IMDSv1 chiamate tramite la `MetadataNoToken` metrica, configura le istanze esistenti su require. IMDSv2 Inoltre, configura tutte le nuove istanze da richiedere. IMDSv2 In altre parole, disabilita IMDSv1 su tutte le istanze esistenti e nuove.

1. **Configura le istanze esistenti per richiedere: IMDSv2**

------
#### [ Amazon EC2 console ]

   1. Apri la console Amazon EC2 all'indirizzo [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Nel riquadro di navigazione, scegliere **Instances (Istanze)**.

   1. Selezionare l'istanza.

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

   1. Per **IMDSv2**, scegli **Obbligatorio.**

   1. Scegli **Save** (Salva).

------
#### [ AWS CLI ]

   Usa il comando [modify-instance-metadata-options](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-options.html)CLI per specificare che deve essere IMDSv2 usato solo. 

------
**Nota**  
È possibile modificare questa impostazione sulle istanze in esecuzione. La modifica ha effetto immediato senza che sia necessario riavviare l'istanza.

   Per ulteriori informazioni, consulta [Richiedi l'uso di IMDSv2](configuring-IMDS-existing-instances.md#modify-require-IMDSv2).

1. **Monitora i problemi dopo la IMDSv1 disabilitazione:**

   1. Tieni traccia del numero di volte in cui una IMDSv1 chiamata è stata tentata e rifiutata con la `MetadataNoTokenRejected` CloudWatch metrica.

   1. Se la `MetadataNoTokenRejected` metrica registra IMDSv1 le chiamate su un'istanza che presenta problemi software, ciò indica che il software richiede un aggiornamento per essere utilizzato. IMDSv2

1. **Configura nuove istanze per richiedere: IMDSv2**

------
#### [ Amazon EC2 console ]

   1. Apri la console Amazon EC2 all'indirizzo [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Segui i passaggi per [avviare un'istanza](ec2-launch-instance-wizard.md).

   1. Espandi **i dettagli avanzati** e, per la **versione Metadata**, scegli **solo V2 (è richiesto il token)**.

   1. Nel pannello **Summary** (Riepilogo), verifica la configurazione dell'istanza, quindi scegli **Launch instance** (Avvia istanza).

      Per ulteriori informazioni, consulta [Configurazione dell'istanza all'avvio](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-instance-settings).

------
#### [ AWS CLI ]

   AWS CLI: utilizzate il comando [run-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/run-instances.html) e specificate che è richiesto. IMDSv2

------

### Passaggio 4: Imposta IMDSv2 =required come predefinito
<a name="path-step-4"></a>

Puoi impostare IMDSv2 =required come configurazione predefinita a livello di account o di organizzazione. Ciò garantisce che tutte le istanze appena avviate siano automaticamente configurate in modo da richiedere. IMDSv2

1. **Imposta il valore predefinito a livello di account:**

------
#### [ Amazon EC2 console ]

   1. Apri la console Amazon EC2 all'indirizzo [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Nel pannello di navigazione seleziona **Pannello di controllo**.

   1. Nella scheda **Attributi dell'account**, in **Impostazioni**, scegli **Protezione e sicurezza dei dati**.

   1. **In **Impostazioni predefinite IMDS**, scegli Gestisci.**

   1. **Ad **esempio, servizio di metadati**, scegli Abilitato.**

   1. Per la **versione dei metadati**, scegli **solo la V2 (è richiesto il token)**.

   1. Scegliere **Aggiorna**.

------
#### [ AWS CLI ]

   Utilizzate il comando [modify-instance-metadata-defaults](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-defaults.html)CLI e specificate `--http-tokens required` e. `--http-put-response-hop-limit 2`

------

   Per ulteriori informazioni, consulta [Imposta IMDSv2 come impostazione predefinita per l'account](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults).

1. **In alternativa, imposta il valore predefinito a livello di organizzazione utilizzando una politica dichiarativa:**

   Utilizza una politica dichiarativa per impostare come obbligatorio l'impostazione predefinita dell'organizzazione. IMDSv2 *Per una politica di esempio, consulta la scheda **Metadati dell'istanza** nella sezione [Politiche dichiarative supportate](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) della Guida per l'AWS Organizations utente.*

### Fase 5: Imporre le istanze a richiedere IMDSv2
<a name="path-step-5"></a>

Dopo aver verificato che non vi è alcuna dipendenza IMDSv1 da nessuna delle tue istanze, ti consigliamo di IMDSv2 applicarla a tutte le nuove istanze.

Utilizza una delle seguenti opzioni per applicare: IMDSv2

1. **Applica IMDSv2 con una proprietà dell'account**

   Puoi imporre l'uso di IMDSv2 a livello di account per ciascuno di essi. Regione AWS Se applicate, le istanze possono essere avviate solo se sono configurate in modo da richiedere. IMDSv2 Questa applicazione si applica indipendentemente dalla configurazione dell'istanza o dell'AMI. Per ulteriori informazioni, consulta [Applica a livello di account IMDSv2](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level). Per applicare questa impostazione a livello di organizzazione, imposta una politica dichiarativa. *Per un esempio di politica, consulta la scheda **Metadati dell'istanza** nella sezione [Politiche dichiarative supportate](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) della Guida per l'AWS Organizations utente.*

   Per evitare un'inversione dell'applicazione, è necessario utilizzare una policy IAM per impedire l'accesso all'API. [ModifyInstanceMetadataDefaults](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataDefaults.html) Per ulteriori informazioni, consulta [Utilizzo di una policy IAM](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-iam-policy).
**Nota**  
Questa impostazione non modifica la versione IMDS delle istanze esistenti, ma blocca l'attivazione IMDSv1 sulle istanze esistenti attualmente disattivate. IMDSv1 
**avvertimento**  
Se IMDSv2 l'applicazione è abilitata e non `httpTokens` è impostata né `required` nella configurazione dell'istanza all'avvio, né nelle impostazioni dell'account o nella configurazione AMI, l'avvio dell'istanza avrà esito negativo. Per informazioni sulla risoluzione dei problemi, consulta [L'avvio di un' IMDSv1istanza abilitata non riesce](troubleshooting-launch.md#launching-an-imdsv1-enabled-instance-fails).

1. **In alternativa, esegui l'applicazione IMDSv2 utilizzando le seguenti chiavi di condizione IAM o SCP:**
   + `ec2:MetadataHttpTokens`
   + `ec2:MetadataHttpPutResponseHopLimit`
   + `ec2:MetadataHttpEndpoint`

   Questi tasti condizionali controllano l'uso di [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)e [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) APIs e corrispondenti. CLIs Se viene creata una policy e un parametro nella chiamata API non corrisponde allo stato specificato nella policy utilizzando la chiave di condizione, la chiamata all'API o alla CLI non va a buon e viene restituita la risposta `UnauthorizedOperation`.

   Per esempi di policy IAM, consulta [Utilizzo dei metadati delle istanze](ExamplePolicies_EC2.md#iam-example-instance-metadata).

# Limitazione dell'accesso al servizio di metadati di istanza
<a name="instance-metadata-limiting-access"></a>

Puoi valutare se utilizzare regole firewall locali per disabilitare l'accesso al servizio di metadati di istanza (IMDS) da alcuni processi o da tutti.

Per le [istanze basate su Nitro](instance-types.md#instance-hypervisor-type), l'IMDS potrebbe essere raggiungibile dalla 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](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck) predefinito sull'istanza è disabilitato. Per evitare che una fonte esterna al tuo VPC raggiunga l'IMDS, ti consigliamo di modificare la configurazione dell'appliance di rete in modo che rilasci pacchetti con l' IPv4indirizzo di destinazione dell'IMDS `169.254.169.254` e, se hai abilitato l' IPv6endpoint, l'indirizzo dell'IMDS. IPv6 `[fd00:ec2::254]`

## Limitazione dell'accesso all'IMDS per le istanze Linux
<a name="instance-metadata-limiting-access-linux"></a>

**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 negazione* per rifiutare tutte le richieste di metadati delle istanze (indipendentemente dal fatto che siano IMDSv1 o meno) provenienti da qualsiasi processo in esecuzione come tale utente. IMDSv2

```
$ 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 all'IMDS, 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
```

**Nota**  
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 considerare l'utilizzo di PF o IPFW. Gli esempi seguenti limitano l'accesso all'IMDS 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
```

**Nota**  
L'ordine dei comandi PF e IPFW è importante. PF è preimpostato sull'ultima regola corrispondente e IPFW è preimpostato sulla prima regola corrispondente.

## Limitazione dell'accesso all'IMDS per le istanze Windows
<a name="instance-metadata-limiting-access-windows"></a>

**Utilizzo del firewall Windows per limitare l'accesso**

L' PowerShell esempio seguente utilizza il firewall integrato di Windows per impedire al server Web di Internet Information Server (in base all'ID utente di installazione predefinito di`NT AUTHORITY\IUSR`) di accedere a 169.254.169.254. Utilizza una *regola di negazione* per rifiutare tutte le richieste di metadati dell'istanza (indipendentemente dal fatto che siano IMDSv1 o) da qualsiasi processo in esecuzione come tale utente. IMDSv2

```
PS C:\> $blockPrincipal = New-Object -TypeName System.Security.Principal.NTAccount ("NT AUTHORITY\IUSR")
PS C:\> $BlockPrincipalSID = $blockPrincipal.Translate([System.Security.Principal.SecurityIdentifier]).Value
PS C:\> $BlockPrincipalSDDL = "D:(A;;CC;;;$BlockPrincipalSID)"
PS C:\> New-NetFirewallRule -DisplayName "Block metadata service from IIS" -Action block -Direction out `
-Protocol TCP -RemoteAddress 169.254.169.254 -LocalUser $BlockPrincipalSDDL
```

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 l'accesso ai metadati dell'istanza da tutti i processi in esecuzione su un gruppo OS specificato nella variabile `blockPrincipal` (in questo esempio, il gruppo Windows `Everyone`), ad eccezione dei processi specificati in `exceptionPrincipal` (in questo esempio, un gruppo denominato `trustworthy-users`). È necessario specificare entrambi i principali di rifiuto e di autorizzazione perché Windows Firewall, a differenza della regola `! --uid-owner trustworthy-user` in iptables Linux, non fornisce un meccanismo di scelta rapida per consentire solo un principale particolare (utente o gruppo) rifiutando tutti gli altri.

```
PS C:\> $blockPrincipal = New-Object -TypeName System.Security.Principal.NTAccount ("Everyone")
PS C:\> $BlockPrincipalSID = $blockPrincipal.Translate([System.Security.Principal.SecurityIdentifier]).Value
PS C:\> $exceptionPrincipal = New-Object -TypeName System.Security.Principal.NTAccount ("trustworthy-users")
PS C:\> $ExceptionPrincipalSID = $exceptionPrincipal.Translate([System.Security.Principal.SecurityIdentifier]).Value
PS C:\> $PrincipalSDDL = "O:LSD:(D;;CC;;;$ExceptionPrincipalSID)(A;;CC;;;$BlockPrincipalSID)"
PS C:\> New-NetFirewallRule -DisplayName "Block metadata service for $($blockPrincipal.Value), exception: $($exceptionPrincipal.Value)" -Action block -Direction out `
-Protocol TCP -RemoteAddress 169.254.169.254 -LocalUser $PrincipalSDDL
```

**Nota**  
Per utilizzare regole firewall locali, è necessario adattare i comandi dell'esempio precedente in base alle proprie esigenze. 

**Utilizzo di regole netsh per limitare l'accesso**

Puoi considerare di bloccare tutto il software utilizzando regole `netsh`, ma queste sono molto meno flessibili.

```
C:\> netsh advfirewall firewall add rule name="Block metadata service altogether" dir=out protocol=TCP remoteip=169.254.169.254 action=block
```

**Nota**  
Per utilizzare regole firewall locali, è necessario adattare i comandi dell'esempio precedente in base alle proprie esigenze. 
Le regole `netsh` devono essere impostate da un prompt dei comandi con privilegi elevati e non possono essere impostate per rifiutare o autorizzare principali particolari.