

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Akses metadata instans untuk instans EC2
<a name="instancedata-data-retrieval"></a>

Anda dapat mengakses metadata instans EC2 dari dalam instans itu sendiri atau dari konsol EC2, API, SDKs atau. AWS CLI Untuk mendapatkan pengaturan metadata instance saat ini untuk instance dari konsol atau baris perintah, lihat. [Mengueri opsi metadata instans untuk instans yang ada](#query-IMDS-existing-instances)

Anda juga dapat memodifikasi data pengguna untuk instance dengan volume root EBS. Instans harus berada dalam status berhenti. Untuk petunjuk konsol, lihat [Perbarui data pengguna instance](user-data.md#user-data-modify). Untuk contoh Linux yang menggunakan AWS CLI, lihat [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html). Untuk contoh Windows yang menggunakan Alat untuk Windows PowerShell, lihat[Data pengguna dan Alat untuk Windows PowerShell](user-data.md#user-data-powershell).

**catatan**  
Anda tidak dikenai biaya untuk permintaan HTTP yang digunakan untuk mengambil metadata instans dan data pengguna.

## Pertimbangan akses metadata instance
<a name="imds-considerations"></a>

Untuk menghindari masalah dengan metadata instance, pertimbangkan hal berikut.

**Kegagalan peluncuran instans karena IMDSv2 penegakan (`HttpTokensEnforced=enabled`)**  
Sebelum mengaktifkan IMDSv2 penegakan hukum, Anda memerlukan semua perangkat lunak Anda pada instans untuk mendukung IMDSv2, setelah itu Anda dapat mengubah default untuk menonaktifkan IMDSv1 (`httpTokens=required`), setelah itu Anda dapat mengaktifkan penegakan hukum. Untuk informasi selengkapnya, lihat [Transisi ke penggunaan Layanan Metadata Instans Versi 2](instance-metadata-transition-to-version-2.md).

**Format perintah**  
Format perintah berbeda, tergantung pada apakah Anda menggunakan Instance Metadata Service Version 1 (IMDSv1) atau Instance Metadata Service Version 2 (). IMDSv2 Secara default, Anda dapat menggunakan kedua versi Layanan Metadata Instans. Untuk membutuhkan penggunaanIMDSv2 , Lihat[Gunakan Layanan Metadata Instance untuk mengakses metadata instans](configuring-instance-metadata-service.md) .

**Jika IMDSv2 diperlukan, IMDSv1 tidak berfungsi**  
Jika Anda menggunakan IMDSv1 dan tidak menerima tanggapan, kemungkinan itu IMDSv2 diperlukan. Untuk memeriksa apakah IMDSv2 diperlukan, pilih instance untuk melihat detailnya. **IMDSv2**Nilai menunjukkan baik **Diperlukan** (Anda harus menggunakan IMDSv2) atau **Opsional** (Anda dapat menggunakan salah satu IMDSv2 atauIMDSv1). 

**(IMDSv2) Gunakan /latest/api/token untuk mengambil token**  
Menerbitkan `PUT` permintaan ke jalur khusus versi apa pun, misalnya`/2021-03-23/api/token`, menghasilkan layanan metadata yang mengembalikan 403 kesalahan Terlarang. Perilaku ini memang disengaja.

**Versi metadata**  
Untuk menghindari keharusan memperbarui kode Anda setiap kali Amazon EC2 merilis build metadata instans baru, sebaiknya gunakan `latest` di jalur, dan bukan nomor versi.

**IPv6 dukungan**  
Untuk mengambil metadata instance menggunakan IPv6 alamat, pastikan Anda mengaktifkan dan menggunakan IPv6 alamat IMDS `[fd00:ec2::254]` alih-alih alamatnya. IPv4 `169.254.169.254` Instance harus berupa [instance berbasis Nitro](instance-types.md#instance-hypervisor-type) yang diluncurkan di [subnet yang mendukung](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range). IPv6

**(Windows) Buat kustom AMIs menggunakan Windows Sysprep**  
Untuk memastikan bahwa IMDS berfungsi saat Anda meluncurkan instance dari AMI Windows kustom, AMI harus berupa gambar standar yang dibuat dengan Windows Sysprep. Jika tidak, IMDS tidak akan bekerja. Untuk informasi selengkapnya, lihat [Buat Amazon EC2 AMI menggunakan Windows Sysprep](ami-create-win-sysprep.md).

**Di lingkungan kontainer, pertimbangkan konfigurasi ulang atau tingkatkan batas hop menjadi 2**  
 IMDSv2 Panggilan AWS SDKs penggunaan secara default. Jika IMDSv2 panggilan tidak menerima respons, beberapa AWS SDKs mencoba lagi panggilan dan, jika masih tidak berhasil, gunakan. IMDSv1 Hal ini dapat mengakibatkan penundaan, terutama di lingkungan kontainer. Bagi mereka AWS SDKs yang *membutuhkan* IMDSv2, jika batas hop adalah 1 di lingkungan kontainer, panggilan mungkin tidak menerima respons sama sekali karena pergi ke wadah dianggap sebagai hop jaringan tambahan.  
Untuk mengurangi masalah ini di lingkungan kontainer, pertimbangkan untuk mengubah konfigurasi untuk meneruskan pengaturan (seperti Wilayah AWS) langsung ke wadah, atau pertimbangkan untuk meningkatkan batas hop menjadi 2. Untuk informasi tentang dampak batas hop, lihat [Menambahkan pertahanan secara mendalam terhadap firewall terbuka, proxy terbalik, dan kerentanan SSRF dengan penyempurnaan](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/) pada Layanan Metadata Instans EC2. Untuk informasi tentang mengubah batas hop, lihat[Mengubah batas hop respons PUT](configuring-IMDS-existing-instances.md#modify-PUT-response-hop-limit).

**Batas paket per detik (PPS)**  
[Ada batas 1024 paket per detik (PPS) untuk layanan yang menggunakan alamat link-lokal.](using-instance-addressing.md#link-local-addresses) Batas ini mencakup agregat [Kueri DNS Route 53 Resolver](https://docs.aws.amazon.com/vpc/latest/userguide/AmazonDNS-concepts.html#vpc-dns-limits), permintaan Layanan Metadata Instans (IMDS), permintaan [Amazon Time Service Network Time Protocol (NTP), dan permintaan Layanan [Lisensi](https://aws.amazon.com/windows/resources/licensing/) Windows (](set-time.md)untuk instance berbasis Microsoft Windows). 

**Pertimbangan tambahan untuk akses data pengguna**
+ Data pengguna diperlakukan sebagai data buram: apa yang Anda tentukan adalah apa yang Anda dapatkan kembali setelah pengambilan. Terserah instance untuk menafsirkan dan bertindak berdasarkan data pengguna.
+ Data pengguna harus dienkode base64. Bergantung pada alat atau SDK yang Anda gunakan, pengkodean base64 mungkin dilakukan untuk Anda. Contoh:
  + Konsol Amazon EC2 dapat mengenkode base64 untuk Anda atau menerima input yang dienkode base64.
  + [AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration-changes.html#cliv2-migration-binaryparam) melakukan pengkodean parameter biner base64 untuk Anda secara default. AWS CLI versi 1 melakukan pengkodean `--user-data` base64-parameter untuk Anda.
  +  AWS SDK untuk Python (Boto3) Melakukan pengkodean `UserData` base64-parameter untuk Anda.
+ Data pengguna dibatasi hingga 16 KB, dalam bentuk mentah, sebelum dienkode base64. Ukuran string dengan panjang *n* setelah enkode base64 adalah ceil(*n*/3)\$14.
+ Data pengguna harus didekode base64 saat Anda mengambilnya. Jika Anda mengambil data menggunakan metadata instans atau konsol, data akan didekode untuk Anda secara otomatis.
+ Jika Anda menghentikan sebuah instans, mengubah data penggunanya, dan memulai instans, data pengguna yang diperbarui tidak akan dijalankan secara otomatis saat Anda memulai instans. Dengan instance Windows, Anda dapat mengonfigurasi pengaturan sehingga skrip data pengguna yang diperbarui dijalankan satu kali ketika Anda memulai instance atau setiap kali Anda reboot atau memulai instance.
+ Data pengguna adalah atribut instans. Jika Anda membuat AMI dari instans, data pengguna instans tidak disertakan dalam AMI.

## Akses metadata instans dari dalam instans EC2
<a name="instancedata-inside-access"></a>

Karena metadata instans Anda tersedia dari instans berjalan, Anda tidak perlu menggunakan konsol Amazon EC2 atau AWS CLI. Hal ini berguna saat Anda menulis skrip yang akan dijalankan dari instans Anda. Misalnya, Anda dapat mengakses alamat IP lokal instans Anda dari metadata instans untuk mengelola koneksi ke aplikasi eksternal.

Semua hal berikut dianggap metadata contoh, tetapi mereka diakses dengan cara yang berbeda. Pilih tab yang mewakili jenis metadata instance yang ingin Anda akses untuk melihat informasi selengkapnya.

------
#### [ Metadata ]

Properti metadata instance dibagi menjadi beberapa kategori. Untuk deskripsi setiap kategori metadata instans, lihat [Kategori metadata instans](ec2-instance-metadata.md#instancedata-data-categories).

Untuk mengakses properti metadata instance dari dalam instance yang sedang berjalan, dapatkan data dari berikut IPv4 atau. IPv6 URIs Alamat IP ini adalah alamat link-lokal dan hanya valid dari instance. Untuk informasi selengkapnya, lihat [Alamat link-lokal](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 ]

Untuk mengambil data dinamis dari dalam instance yang sedang berjalan, gunakan salah satu dari berikut URIs ini.

**IPv4**

```
http://169.254.169.254/latest/dynamic/
```

**IPv6**

```
http://[fd00:ec2::254]/latest/dynamic/
```

**Contoh: Akses dengan cURL**  
Contoh berikut digunakan `cURL` untuk mengambil kategori identitas instance tingkat tinggi.

*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
```

**Contoh: Akses dengan PowerShell**  
Contoh berikut digunakan PowerShell untuk mengambil kategori identitas instance tingkat tinggi.

*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
```

Untuk informasi lebih lanjut tentang data dinamis dan contoh cara mengambilnya, lihat [Dokumen identitas instans untuk EC2 instans Amazon](instance-identity-documents.md).

------
#### [ User data ]

Untuk mengambil data pengguna dari sebuah instance, gunakan salah satu dari berikut URIs ini. Untuk mengambil data pengguna menggunakan IPv6 alamat, Anda harus mengaktifkannya, dan instance harus berupa [instance berbasis Nitro](instance-types.md#instance-hypervisor-type) di subnet yang mendukung. IPv6

**IPv4**

```
http://169.254.169.254/latest/user-data
```

**IPv6**

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

Permintaan untuk data pengguna mengembalikan data apa adanya (tipe konten `application/octet-stream`). Jika instans tidak memiliki data pengguna, permintaan akan mengembalikan `404 - Not Found`.

**Contoh: Akses dengan cURL untuk mengambil teks yang dipisahkan koma**  
Contoh berikut digunakan `cURL` untuk mengambil data pengguna yang ditetapkan sebagai teks yang dipisahkan koma.

*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,,,
```

**Contoh: Akses dengan PowerShell untuk mengambil teks yang dipisahkan koma**  
Contoh berikut digunakan PowerShell untuk mengambil data pengguna yang ditetapkan sebagai teks yang dipisahkan koma.

*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,,,
```

**Contoh: Akses dengan cURL untuk mengambil skrip**  
Contoh berikut digunakan `cURL` untuk mengambil data pengguna yang ditentukan sebagai skrip.

*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
```

**Contoh: Akses dengan PowerShell untuk mengambil skrip**  
Contoh berikut digunakan PowerShell untuk mengambil data pengguna yang ditentukan sebagai skrip.

*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>
```

------

## Mengueri opsi metadata instans untuk instans yang ada
<a name="query-IMDS-existing-instances"></a>

Anda dapat menanyakan opsi metadata instans untuk instans yang ada.

------
#### [ Console ]

**Untuk menanyakan opsi metadata instance untuk instance yang ada**

1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Di panel navigasi, pilih **Instans**.

1. Pilih contoh Anda dan periksa bidang berikut:
   + **IMDSv2**— Nilai adalah **Wajib** atau **Opsional**.
   + **Izinkan tag dalam metadata contoh** **- Nilainya **Diaktifkan atau Dinonaktifkan**.**

1. Dengan instans yang dipilih, pilih **Actions**, **Instance settings**, **Modify instance metadata options**.

   Kotak dialog menampilkan apakah layanan metadata instance diaktifkan atau dinonaktifkan untuk instance yang dipilih.

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

**Untuk menanyakan opsi metadata instance untuk instance yang ada**  
Gunakan perintah [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 ]

**Untuk menanyakan opsi metadata instance untuk instance yang ada menggunakan Tools for PowerShell**  
Gunakan [Get-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Instance.html)cmdlet.

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

------

## Respons dan pesan kesalahan
<a name="instance-metadata-returns"></a>

Semua metadata instans ditampilkan sebagai teks (tipe konten HTTP `text/plain`).

Permintaan untuk sumber daya metadata tertentu mengembalikan nilai yang sesuai, atau kode kesalahan HTTP `404 - Not Found` jika sumber daya tidak tersedia.

Permintaan untuk sumber daya metadata umum (URI diakhiri dengan a /) mengembalikan daftar sumber daya yang tersedia, atau kode kesalahan HTTP `404 - Not Found` jika tidak ada sumber daya seperti itu. Item daftar berada di baris terpisah, diakhiri oleh feed baris (ASCII 10).

Jika IMDSv1 permintaan tidak menerima tanggapan, kemungkinan itu IMDSv2 diperlukan.

Untuk permintaan yang dibuat menggunakan IMDSv2, kode kesalahan HTTP berikut dapat dikembalikan:
+ `400 - Missing or Invalid Parameters` – Permintaan `PUT` tidak valid.
+ `401 - Unauthorized` – Permintaan `GET` menggunakan token yang tidak valid. Tindakan yang disarankan adalah membuat token baru.
+ `403 - Forbidden` – Permintaan tidak diperbolehkan atau IMDS dimatikan.
+ `404 - Not Found`— Sumber daya tidak tersedia atau tidak ada sumber daya seperti itu.
+ `503`— Permintaan tidak dapat diselesaikan. Coba lagi permintaannya.

Jika IMDS mengembalikan kesalahan, **curl** mencetak pesan kesalahan dalam output dan mengembalikan kode status sukses. Pesan kesalahan disimpan dalam `TOKEN` variabel, yang menyebabkan **curl** perintah yang menggunakan token gagal. Jika Anda memanggil **curl** dengan **-f** opsi, ia mengembalikan kode status kesalahan jika terjadi kesalahan server HTTP. Jika Anda mengaktifkan penanganan kesalahan, shell dapat menangkap kesalahan dan menghentikan skrip.

## Throttling kueri
<a name="instancedata-throttling"></a>

Kami membatasi kueri ke IMDS per instans, dan kami membatasi jumlah koneksi simultan dari sebuah instans ke IMDS. 

Jika Anda menggunakan IMDS untuk mengambil kredensil AWS keamanan, hindari kueri kredensil selama setiap transaksi atau secara bersamaan dari sejumlah besar thread atau proses, karena hal ini dapat menyebabkan pembatasan. Sebagai gantinya, kami menyarankan Anda menyimpan kredensial dalam cache hingga kredensial itu mendekati waktu kedaluwarsanya. Untuk informasi selengkapnya tentang peran IAM dan kredensial keamanan yang terkait dengan peran tersebut, lihat [Mengambil kredensial keamanan dari metadata instans](instance-metadata-security-credentials.md).

Jika Anda mengalami throttling saat mengakses IMDS, coba lagi kueri Anda dengan strategi mundur eksponensial.

# Gunakan Layanan Metadata Instance untuk mengakses metadata instans
<a name="configuring-instance-metadata-service"></a>

Anda dapat mengakses metadata instans dari instans yang sedang berjalan menggunakan salah satu metode berikut:
+ Instance Metadata Service Version 2 (IMDSv2) — metode yang berorientasi pada sesi

  Sebagai contoh, lihat [Contoh untuk IMDSv2](#instance-metadata-retrieval-examples).
+ Layanan Metadata Instance Versi 1 (IMDSv1) — sebuah metode request/response 

  Sebagai contoh, lihat [Contoh untuk IMDSv1](#instance-metadata-retrieval-examples-imdsv1).

Secara default, Anda dapat menggunakan salah satu IMDSv1 atau IMDSv2, atau keduanya.

Anda dapat mengonfigurasi Layanan Metadata Instance (IMDS) pada setiap instance untuk hanya menerima IMDSv2 panggilan, yang akan menyebabkan IMDSv1 panggilan gagal. Untuk informasi tentang cara mengonfigurasi instans yang akan digunakan IMDSv2, lihat[Konfigurasikan opsi Layanan Metadata Instance](configuring-instance-metadata-options.md).

`GET`Header `PUT` atau unik untuk IMDSv2. Jika header ini ada dalam permintaan, maka permintaan tersebut dimaksudkan untukIMDSv2. Jika tidak ada header yang hadir, diasumsikan permintaan dimaksudkan untukIMDSv1.

Untuk tinjauan ekstensif IMDSv2, lihat [Menambahkan pertahanan secara mendalam terhadap firewall terbuka, proxy terbalik, dan kerentanan SSRF dengan penyempurnaan](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/) pada Layanan Metadata Instans EC2.

**Topics**
+ [Bagaimana cara kerja Layanan Metadata Instans Versi 2](#instance-metadata-v2-how-it-works)
+ [Menggunakan AWS SDK yang didukung](#use-a-supported-sdk-version-for-imdsv2)
+ [Contoh untuk IMDSv2](#instance-metadata-retrieval-examples)
+ [Contoh untuk IMDSv1](#instance-metadata-retrieval-examples-imdsv1)

## Bagaimana cara kerja Layanan Metadata Instans Versi 2
<a name="instance-metadata-v2-how-it-works"></a>

IMDSv2 menggunakan permintaan berorientasi sesi. Dengan permintaan berorientasi sesi, Anda membuat token sesi yang menentukan durasi sesi, yang bisa minimal satu detik dan maksimal enam jam. Selama durasi yang ditentukan, Anda dapat menggunakan token sesi yang sama untuk permintaan selanjutnya. Setelah durasi yang ditentukan berakhir, Anda harus membuat token sesi baru yang akan digunakan untuk permintaan di masa mendatang.

**catatan**  
Contoh di bagian ini menggunakan IPv4 alamat Layanan Metadata Instans (IMDS):. `169.254.169.254` Jika Anda mengambil metadata instans untuk instans EC2 melalui IPv6 alamat, pastikan Anda mengaktifkan dan menggunakan alamat sebagai gantinya:. IPv6 `[fd00:ec2::254]` IPv6 Alamat IMDS kompatibel dengan IMDSv2 perintah. IPv6 Alamat hanya dapat diakses pada [instance berbasis Nitro](instance-types.md#instance-hypervisor-type) di [subnet yang IPv6 didukung -(](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range) tumpukan ganda atau hanya). IPv6 

Contoh berikut menggunakan skrip shell dan IMDSv2 untuk mengambil item metadata instance tingkat atas. Setiap contoh:
+ Membuat token sesi yang berlangsung selama enam jam (21.600 detik) menggunakan permintaan `PUT`
+ Menyimpan header token sesi dalam variabel bernama `TOKEN` (instance Linux) atau `token` (instance Windows)
+ Meminta item metadata tingkat atas menggunakan token

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

Anda bisa menjalankan dua perintah terpisah, atau menggabungkannya.

**Perintah terpisah**

Pertama, hasilkan token menggunakan perintah berikut.

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

Kemudian, gunakan token untuk menghasilkan item metadata tingkat atas dengan menggunakan perintah berikut.

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

**Perintah gabungan**

Anda dapat menyimpan token dan menggabungkan perintah. Contoh berikut menggabungkan dua perintah di atas dan menyimpan header token sesi dalam variabel bernama TOKEN.

**catatan**  
Jika ada kesalahan dalam membuat token, alih-alih token yang valid, pesan kesalahan akan disimpan dalam variabel, dan perintah tidak akan bekerja.

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

Setelah Anda membuat token, Anda dapat menggunakannya kembali hingga kedaluwarsa. Dalam contoh perintah berikut, yang mendapatkan ID AMI yang digunakan untuk meluncurkan instans, token yang disimpan di `$TOKEN` dalam contoh sebelumnya digunakan kembali.

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

### Contoh 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/
```

Setelah Anda membuat token, Anda dapat menggunakannya kembali hingga kedaluwarsa. Dalam contoh perintah berikut, yang mendapatkan ID AMI yang digunakan untuk meluncurkan instans, token yang disimpan di `$token` dalam contoh sebelumnya digunakan kembali.

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

Ketika Anda menggunakan IMDSv2 untuk meminta metadata instance, permintaan harus menyertakan yang berikut:

1. Gunakan permintaan `PUT` untuk memulai sesi ke layanan metadata instans. Permintaan `PUT` mengembalikan sebuah token yang harus disertakan dalam permintaan `GET` selanjutnya ke layanan metadata instans. Token diperlukan untuk mengakses metadata menggunakan. IMDSv2

1. Sertakan token di semua permintaan `GET` ke IMDS. Saat penggunaan token diatur ke `required`, permintaan tanpa token yang valid atau dengan token yang kedaluwarsa akan menerima kode kesalahan HTTP `401 - Unauthorized`.
   + Token adalah kunci untuk instans tertentu. Token tidak valid di instans EC2 lainnya dan akan ditolak jika Anda mencoba menggunakannya di luar instans tempatnya dibuat.
   + Permintaan `PUT` harus menyertakan header yang menentukan waktu hidup (TTL) untuk token, dalam detik, hingga maksimum enam jam (21.600 detik). Token tersebut mewakili sesi logis. TTL menentukan lamanya waktu token itu valid dan, oleh karena itu, merupakan durasi sesi.
   + Setelah token kedaluwarsa, untuk terus mengakses metadata instans, Anda harus membuat sesi baru menggunakan `PUT` yang lain.
   + Anda dapat memilih untuk menggunakan kembali token atau membuat token baru dengan setiap permintaan. Untuk sejumlah kecil permintaan, mungkin lebih mudah untuk membuat dan langsung menggunakan token setiap kali Anda perlu mengakses IMDS. Namun, untuk efisiensi, Anda dapat menentukan durasi yang lebih lama untuk token dan menggunakannya kembali daripada harus menulis perimtaan `PUT` setiap kali Anda perlu meminta metadata instans. Tidak ada batasan praktis pada jumlah token bersamaan, masing-masing mewakili sesinya sendiri. IMDSv2 Namun, masih dibatasi oleh koneksi IMDS normal dan batas pelambatan. Untuk informasi selengkapnya, lihat [Throttling kueri](instancedata-data-retrieval.md#instancedata-throttling).

HTTP `GET` dan `HEAD` metode diperbolehkan dalam permintaan metadata IMDSv2 contoh. `PUT`permintaan ditolak jika berisi X-Forwarded-For header.

Secara default, respons untuk permintaan `PUT` memiliki batas hop respons (waktu hidup) sebesar `1` di tingkat protokol IP. Jika Anda membutuhkan batas hop yang lebih besar, Anda dapat menyesuaikannya dengan menggunakan [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) AWS CLI perintah. Misalnya, Anda mungkin memerlukan batas hop yang lebih besar untuk kompatibilitas mundur dengan layanan container yang berjalan pada instans. Untuk informasi selengkapnya, lihat [Mengonfigurasi opsi metadata instans untuk instans yang ada](configuring-IMDS-existing-instances.md).

## Menggunakan AWS SDK yang didukung
<a name="use-a-supported-sdk-version-for-imdsv2"></a>

Untuk menggunakan IMDSv2, instans EC2 Anda harus menggunakan versi AWS SDK yang mendukung penggunaan. IMDSv2 Versi terbaru dari semua AWS SDKs dukungan menggunakan IMDSv2.

**penting**  
Kami menyarankan Anda untuk tetap mengikuti kabar terbaru terkait perilisan SDK untuk mendapatkan fitur, pembaruan keamanan, dan dependensi dasar terbaru. Penggunaan berkelanjutan dari versi SDK yang tidak didukung tidak disarankan dan dilakukan sesuai kebijaksanaan Anda. Untuk informasi selengkapnya, lihat [kebijakan pemeliharaan AWS SDKs dan Alat](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) di *Panduan Referensi Alat AWS SDKs dan*.

Berikut ini adalah versi minimum yang mendukung penggunaan 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 untuk .NET](https://github.com/aws/aws-sdk-net) – 3.3.634.1
+ [AWS SDK untuk C\$1\$1](https://github.com/aws/aws-sdk-cpp) – 1.7.229
+ [AWS SDK untuk Go](https://github.com/aws/aws-sdk-go) – 1.25.38
+ [AWS SDK for Go](https://github.com/aws/aws-sdk-go-v2) v2 - 0.19.0
+ [AWS SDK untuk 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 untuk JavaScript di Node.js](https://github.com/aws/aws-sdk-js) - 2.722.0
+ [AWS SDK untuk Kotlin](https://github.com/awslabs/aws-sdk-kotlin)— 1.1.4
+ [AWS SDK untuk PHP](https://github.com/aws/aws-sdk-php) – 3.147.7
+ [AWS SDK untuk Python (Botocore](https://github.com/boto/botocore)) - 1.13.25
+ [AWS SDK untuk Python (Boto3)](https://github.com/boto/boto3) – 1.12.6
+ [AWS SDK untuk Ruby](https://github.com/aws/aws-sdk-ruby) – 3.79.0

## Contoh untuk IMDSv2
<a name="instance-metadata-retrieval-examples"></a>

Jalankan contoh berikut di instans Amazon EC2 Anda untuk mengambil metadata instans. IMDSv2

Pada contoh Windows, Anda dapat menggunakan Windows PowerShell atau Anda dapat menginstal cURL atau wget. Jika Anda menginstal alat pihak ketiga pada instance Windows, pastikan Anda membaca dokumentasi yang menyertainya dengan cermat, karena panggilan dan outputnya mungkin berbeda dari yang dijelaskan di sini.

**Topics**
+ [Dapatkan versi metadata instans yang tersedia](#instance-metadata-ex-1)
+ [Dapatkan item metadata tingkat atas](#instance-metadata-ex-2)
+ [Dapatkan nilai untuk item metadata](#instance-metadata-ex-2a)
+ [Dapatkan daftar kunci publik yang tersedia](#instance-metadata-ex-3)
+ [Tunjukkan format di mana kunci publik 0 tersedia](#instance-metadata-ex-4)
+ [Dapatkan kunci publik 0 (dalam format kunci OpenSSH)](#instance-metadata-ex-5)
+ [Dapatkan ID subnet untuk instans](#instance-metadata-ex-6)
+ [Dapatkan tanda instans untuk sebuah instans](#instance-metadata-ex-7)

### Dapatkan versi metadata instans yang tersedia
<a name="instance-metadata-ex-1"></a>

Contoh ini mendapatkan versi metadata instans yang tersedia. Setiap versi mengacu pada build metadata instans jika kategori metadata instans baru dirilis. Versi build metadata instans tidak berkorelasi dengan versi API Amazon EC2. Versi sebelumnya tersedia untuk Anda jika Anda memiliki skrip yang mengandalkan struktur dan informasi yang ada di versi sebelumnya.

------
#### [ 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
```

------

### Dapatkan item metadata tingkat atas
<a name="instance-metadata-ex-2"></a>

Contoh ini mendapatkan item metadata tingkat atas. Untuk informasi selengkapnya tentang item dalam respons, lihat[Kategori metadata instans](ec2-instance-metadata.md#instancedata-data-categories).

Perhatikan bahwa tag disertakan dalam output ini hanya jika Anda mengizinkan akses. Untuk informasi selengkapnya, lihat [Aktifkan akses ke tag dalam metadata contoh](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/
```

------

### Dapatkan nilai untuk item metadata
<a name="instance-metadata-ex-2a"></a>

Contoh-contoh ini mendapatkan nilai dari beberapa item metadata tingkat atas yang diperoleh pada contoh sebelumnya. Permintaan ini menggunakan token tersimpan yang dibuat menggunakan perintah dalam contoh sebelumnya. Token tidak boleh kedaluwarsa.

------
#### [ 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
```

------

### Dapatkan daftar kunci publik yang tersedia
<a name="instance-metadata-ex-3"></a>

Contoh ini mendapatkan daftar kunci publik yang tersedia.

------
#### [ 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
```

------

### Tunjukkan format di mana kunci publik 0 tersedia
<a name="instance-metadata-ex-4"></a>

Contoh ini menunjukkan format di mana kunci publik 0 tersedia.

------
#### [ 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
```

------

### Dapatkan kunci publik 0 (dalam format kunci OpenSSH)
<a name="instance-metadata-ex-5"></a>

Contoh ini mendapatkan kunci publik 0 (di format kunci 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
```

------

### Dapatkan ID subnet untuk instans
<a name="instance-metadata-ex-6"></a>

Contoh ini mendapatkan ID subnet untuk sebuah instans.

------
#### [ 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
```

------

### Dapatkan tanda instans untuk sebuah instans
<a name="instance-metadata-ex-7"></a>

Jika akses ke tag instance dalam metadata instance diaktifkan, Anda bisa mendapatkan tag untuk instance dari metadata instance. Untuk informasi selengkapnya, lihat [Mengambil tanda dari metadata instans](work-with-tags-in-IMDS.md#retrieve-tags-from-IMDS).

## Contoh untuk IMDSv1
<a name="instance-metadata-retrieval-examples-imdsv1"></a>

Jalankan contoh berikut di instans Amazon EC2 Anda untuk mengambil metadata instans. IMDSv1

Pada contoh Windows, Anda dapat menggunakan Windows PowerShell atau Anda dapat menginstal cURL atau wget. Jika Anda menginstal alat pihak ketiga pada instance Windows, pastikan Anda membaca dokumentasi yang menyertainya dengan cermat, karena panggilan dan outputnya mungkin berbeda dari yang dijelaskan di sini.

**Topics**
+ [Dapatkan versi metadata instans yang tersedia](#instance-metadata-ex-1-imdsv1)
+ [Dapatkan item metadata tingkat atas](#instance-metadata-ex-2-imdsv1)
+ [Dapatkan nilai untuk item metadata](#instance-metadata-ex-2a-imdsv1)
+ [Dapatkan daftar kunci publik yang tersedia](#instance-metadata-ex-3-imdsv1)
+ [Tunjukkan format di mana kunci publik 0 tersedia](#instance-metadata-ex-4-imdsv1)
+ [Dapatkan kunci publik 0 (dalam format kunci OpenSSH)](#instance-metadata-ex-5-imdsv1)
+ [Dapatkan ID subnet untuk instans](#instance-metadata-ex-6-imdsv1)
+ [Dapatkan tanda instans untuk sebuah instans](#instance-metadata-ex-7-imdsv1)

### Dapatkan versi metadata instans yang tersedia
<a name="instance-metadata-ex-1-imdsv1"></a>

Contoh ini mendapatkan versi metadata instans yang tersedia. Setiap versi mengacu pada build metadata instans jika kategori metadata instans baru dirilis. Versi build metadata instans tidak berkorelasi dengan versi API Amazon EC2. Versi sebelumnya tersedia untuk Anda jika Anda memiliki skrip yang mengandalkan struktur dan informasi yang ada di versi sebelumnya.

------
#### [ 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
```

------

### Dapatkan item metadata tingkat atas
<a name="instance-metadata-ex-2-imdsv1"></a>

Contoh ini mendapatkan item metadata tingkat atas. Untuk informasi selengkapnya tentang item dalam respons, lihat[Kategori metadata instans](ec2-instance-metadata.md#instancedata-data-categories).

Perhatikan bahwa tag disertakan dalam output ini hanya jika Anda mengizinkan akses. Untuk informasi selengkapnya, lihat [Aktifkan akses ke tag dalam metadata contoh](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/
```

------

### Dapatkan nilai untuk item metadata
<a name="instance-metadata-ex-2a-imdsv1"></a>

Contoh-contoh ini mendapatkan nilai dari beberapa item metadata tingkat atas yang diperoleh pada contoh sebelumnya.

------
#### [ 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
```

------

### Dapatkan daftar kunci publik yang tersedia
<a name="instance-metadata-ex-3-imdsv1"></a>

Contoh ini mendapatkan daftar kunci publik yang tersedia.

------
#### [ 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
```

------

### Tunjukkan format di mana kunci publik 0 tersedia
<a name="instance-metadata-ex-4-imdsv1"></a>

Contoh ini menunjukkan format di mana kunci publik 0 tersedia.

------
#### [ 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
```

------

### Dapatkan kunci publik 0 (dalam format kunci OpenSSH)
<a name="instance-metadata-ex-5-imdsv1"></a>

Contoh ini mendapatkan kunci publik 0 (di format kunci 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
```

------

### Dapatkan ID subnet untuk instans
<a name="instance-metadata-ex-6-imdsv1"></a>

Contoh ini mendapatkan ID subnet untuk sebuah instans.

------
#### [ 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
```

------

### Dapatkan tanda instans untuk sebuah instans
<a name="instance-metadata-ex-7-imdsv1"></a>

Jika akses ke tag instance dalam metadata instance diaktifkan, Anda bisa mendapatkan tag untuk instance dari metadata instance. Untuk informasi selengkapnya, lihat [Mengambil tanda dari metadata instans](work-with-tags-in-IMDS.md#retrieve-tags-from-IMDS).

# Transisi ke penggunaan Layanan Metadata Instans Versi 2
<a name="instance-metadata-transition-to-version-2"></a>

Jika Anda ingin mengonfigurasi instans agar hanya menerima panggilan Layanan Metadata Instans Versi 2 (IMDSv2), sebaiknya gunakan alat dan jalur transisi berikut.

**Topics**
+ [Alat untuk transisi ke IMDSv2](#tools-for-transitioning-to-imdsv2)
+ [Jalur yang direkomendasikan untuk membutuhkan IMDSv2](#recommended-path-for-requiring-imdsv2)

## Alat untuk transisi ke IMDSv2
<a name="tools-for-transitioning-to-imdsv2"></a>

Alat-alat berikut dapat membantu Anda mengidentifikasi, memantau, dan mengelola transisi perangkat lunak Anda dari IMDSv1 ke IMDSv2. Untuk petunjuk tentang cara menggunakan alat ini, lihat[Jalur yang direkomendasikan untuk membutuhkan IMDSv2](#recommended-path-for-requiring-imdsv2).

**AWS perangkat lunak**  
Versi terbaru dari AWS CLI dan AWS SDK mendukung IMDSv2. Untuk menggunakan IMDSv2, perbarui instans EC2 Anda untuk menggunakan versi terbaru. Untuk versi AWS SDK minimum yang mendukung IMDSv2, lihat[Menggunakan AWS SDK yang didukung](configuring-instance-metadata-service.md#use-a-supported-sdk-version-for-imdsv2).  
Semua paket perangkat lunak Amazon Linux 2 dan Amazon Linux 2023 mendukung IMDSv2. Amazon Linux 2023 dinonaktifkan secara IMDSv1 default.

**IMDS Package Analyzer**  
IMDS Packet Analyzer adalah alat sumber terbuka yang mengidentifikasi dan mencatat IMDSv1 panggilan selama fase boot dan operasi runtime instans Anda. Dengan menganalisis log ini, Anda dapat dengan tepat mengidentifikasi perangkat lunak yang membuat IMDSv1 panggilan pada instans Anda dan menentukan apa yang perlu diperbarui untuk mendukung IMDSv2 hanya pada instans Anda. Anda dapat menjalankan IMDS Packet Analyzer dari baris perintah atau menginstalnya sebagai layanan. Untuk informasi lebih lanjut, lihat [AWS ImdsPacketAnalyzer](https://github.com/aws/aws-imds-packet-analyzer)di *GitHub*.

**CloudWatch**  
CloudWatch menyediakan dua metrik berikut untuk memantau instans Anda:  
`MetadataNoToken`— IMDSv2 menggunakan sesi yang didukung token, sementara IMDSv1 tidak. `MetadataNoToken`Metrik melacak jumlah panggilan ke Layanan Metadata Instans (IMDS) yang digunakan. IMDSv1 Dengan melacak metrik ini ke nol, Anda dapat menentukan apakah dan kapan semua perangkat lunak Anda telah ditingkatkan untuk digunakanIMDSv2.  
`MetadataNoTokenRejected`— Setelah Anda menonaktifkan IMDSv1, Anda dapat menggunakan `MetadataNoTokenRejected` metrik untuk melacak berapa kali IMDSv1 panggilan dicoba dan ditolak. Dengan melacak metrik ini, Anda dapat memastikan apakah perangkat lunak Anda perlu diperbarui untuk digunakan IMDSv2.  
Untuk setiap instans EC2, metrik ini saling eksklusif. Ketika IMDSv1 diaktifkan (`httpTokens = optional`), hanya `MetadataNoToken` memancarkan. Ketika IMDSv1 dinonaktifkan (`httpTokens = required`), hanya `MetadataNoTokenRejected` memancarkan. Untuk kapan menggunakan metrik ini, lihat[Jalur yang direkomendasikan untuk membutuhkan IMDSv2](#recommended-path-for-requiring-imdsv2).  
Untuk informasi selengkapnya, lihat [Metrik instans](viewing_metrics_with_cloudwatch.md#ec2-cloudwatch-metrics).

**Peluncuran APIs**  
**Instance baru:** Gunakan [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)API untuk meluncurkan instance baru yang memerlukan penggunaan. IMDSv2 Untuk informasi selengkapnya, lihat [Mengonfigurasi opsi metadata instans untuk instans baru](configuring-IMDS-new-instances.md).  
**Instance yang ada:** Gunakan [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html)API untuk meminta penggunaan IMDSv2 pada instance yang ada. Untuk informasi selengkapnya, lihat [Mengonfigurasi opsi metadata instans untuk instans yang ada](configuring-IMDS-existing-instances.md).  
**Instans baru yang diluncurkan oleh grup Auto Scaling**: Untuk mewajibkan IMDSv2 penggunaan pada semua instans baru yang diluncurkan oleh grup Auto Scaling, grup Auto Scaling Anda dapat menggunakan templat peluncuran atau konfigurasi peluncuran. Saat Anda [membuat template peluncuran](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) atau [membuat konfigurasi peluncuran](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/create-launch-configuration.html), Anda harus mengonfigurasi `MetadataOptions` parameter agar memerlukan penggunaanIMDSv2. Grup Auto Scaling meluncurkan instans baru menggunakan templat peluncuran atau konfigurasi peluncuran baru, tetapi instans yang ada tidak terpengaruh.   
**Instance yang ada dalam grup Auto Scaling**: Gunakan [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html)API untuk meminta penggunaan IMDSv2 pada instance yang ada, atau menghentikan instance dan grup Auto Scaling akan meluncurkan instance pengganti baru dengan setelan opsi metadata instans yang ditentukan dalam templat peluncuran baru atau konfigurasi peluncuran.

**AMIs**  
AMIs dikonfigurasi dengan `ImdsSupport` parameter yang disetel ke `v2.0` akan meluncurkan instance yang membutuhkan secara IMDSv2 default. Amazon Linux 2023 dikonfigurasi dengan`ImdsSupport = v2.0`.  
**Baru AMIs:** Gunakan perintah CLI [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) untuk mengatur parameter `ImdsSupport` `v2.0` saat membuat AMI baru.  
** AMIsExisting:** Gunakan perintah [modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html)CLI untuk mengatur `ImdsSupport` parameter `v2.0` saat memodifikasi AMI yang ada.  
Untuk informasi selengkapnya, lihat [Konfigurasikan AMI](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-ami-configuration).

**Kontrol tingkat akun**  
Anda dapat mengonfigurasi nilai default untuk semua opsi metadata instans di tingkat akun. Nilai default diterapkan secara otomatis saat Anda meluncurkan sebuah instance. Untuk informasi lebih lanjut. lihat. [Tetapkan IMDSv2 sebagai default untuk akun](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults)  
Anda juga dapat menerapkan persyaratan untuk digunakan IMDSv2 di tingkat akun. Saat IMDSv2 penegakan diaktifkan:  
+ **Instance baru:** Instans yang dikonfigurasi untuk diluncurkan dengan IMDSv1 diaktifkan akan gagal diluncurkan
+ **Instance yang ada dengan IMDSv1 dinonaktifkan:** Upaya untuk IMDSv1 mengaktifkan instance yang ada akan dicegah.
+ **Instance yang ada dengan IMDSv1 diaktifkan:** Instance yang ada dengan IMDSv1 sudah diaktifkan tidak akan terpengaruh.
Untuk informasi selengkapnya, lihat [Menegakkan IMDSv2 di tingkat akun](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level).

**Kebijakan IAM dan SCPs**  
Anda dapat menggunakan kebijakan IAM atau kebijakan kontrol AWS Organizations layanan (SCP) untuk mengontrol pengguna sebagai berikut:  
+ Tidak dapat meluncurkan instance menggunakan [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)API kecuali instance dikonfigurasi untuk digunakan IMDSv2.
+ Tidak dapat memodifikasi instance yang ada menggunakan [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html)API untuk mengaktifkan kembaliIMDSv1.
Kebijakan IAM atau SCP harus berisi kunci syarat IAM berikut:  
+ `ec2:MetadataHttpEndpoint`
+ `ec2:MetadataHttpPutResponseHopLimit`
+ `ec2:MetadataHttpTokens`
Jika parameter dalam panggilan API atau CLI tidak cocok dengan status yang ditentukan dalam kebijakan yang berisi kunci kondisi, panggilan API atau CLI gagal dengan respons. `UnauthorizedOperation`  
Selain itu, Anda dapat memilih lapisan perlindungan tambahan untuk menegakkan perubahan dari IMDSv1 ke IMDSv2. Pada lapisan manajemen akses sehubungan dengan API yang dipanggil melalui kredensil Peran EC2, Anda dapat menggunakan kunci kondisi baik dalam kebijakan IAM atau kebijakan kontrol AWS Organizations layanan (). SCPs Secara khusus, dengan menggunakan kunci kondisi `ec2:RoleDelivery` dengan nilai `2.0` dalam kebijakan IAM Anda, panggilan API yang dilakukan dengan kredenal Peran EC2 yang diperoleh dari IMDSv1 akan menerima respons. `UnauthorizedOperation` Hal yang sama dapat dicapai secara lebih luas dengan kondisi yang disyaratkan oleh SCP. Ini memastikan bahwa kredensil yang dikirimkan melalui IMDSv1 tidak dapat benar-benar digunakan untuk memanggil APIs karena panggilan API apa pun yang tidak cocok dengan kondisi yang ditentukan akan menerima kesalahan`UnauthorizedOperation`.  
Untuk contoh kebijakan IAM, lihat [Cara menggunakan metadata instans](ExamplePolicies_EC2.md#iam-example-instance-metadata). Untuk informasi selengkapnya SCPs, lihat [Kebijakan kontrol layanan](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) di *Panduan AWS Organizations Pengguna*.

**Kebijakan Deklaratif**  
Gunakan Kebijakan Deklaratif (fitur AWS Organizations) untuk menetapkan default akun IMDS secara terpusat, termasuk IMDSv2 penegakan hukum, di seluruh organisasi Anda. *Untuk kebijakan contoh, lihat tab **Metadata Instans** di bagian [Kebijakan deklaratif yang didukung](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) di Panduan Pengguna.AWS Organizations *

## Jalur yang direkomendasikan untuk membutuhkan IMDSv2
<a name="recommended-path-for-requiring-imdsv2"></a>

**Topics**
+ [Langkah 1: Identifikasi instance dengan IMDSv2 =opsional dan penggunaan audit IMDSv1](#path-step-1)
+ [Langkah 2: Perbarui perangkat lunak ke IMDSv2](#path-step-2)
+ [Langkah 3: Memerlukan IMDSv2 contoh](#path-step-3)
+ [Langkah 4: Set IMDSv2 = diperlukan sebagai default](#path-step-4)
+ [Langkah 5: Menerapkan instance untuk membutuhkan IMDSv2](#path-step-5)

### Langkah 1: Identifikasi instance dengan IMDSv2 =opsional dan penggunaan audit IMDSv1
<a name="path-step-1"></a>

Untuk menilai cakupan IMDSv2 migrasi Anda, identifikasi instance yang dikonfigurasi untuk mengizinkan salah satu IMDSv1 atau IMDSv2, dan IMDSv1 panggilan audit.

1. **Identifikasi instance yang dikonfigurasi untuk mengizinkan salah satu IMDSv1 atau IMDSv2:**

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

   1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

   1. Di panel navigasi, pilih **Instans**.

   1. Untuk melihat hanya instance yang dikonfigurasi untuk mengizinkan IMDSv1 atau IMDSv2, tambahkan filter **IMDSv2 = opsional**.

   1. **Atau, untuk melihat IMDSv2 apakah **opsional** atau **wajib** untuk semua instance, buka jendela **Preferensi** (ikon roda gigi), aktifkan **IMDSv2**, dan pilih Konfirmasi.** Ini menambahkan **IMDSv2**kolom ke tabel **Instances**.

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

   Gunakan perintah [describe-instance](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-options.html) dan filter dengan`metadata-options.http-tokens = optional`, sebagai berikut:

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

------

1. ** IMDSv1 Panggilan audit pada setiap instance:**

   Gunakan CloudWatch metrik`MetadataNoToken`. Metrik ini menunjukkan jumlah IMDSv1 panggilan ke IMDS pada instans Anda. Untuk informasi selengkapnya, lihat [Metrik instans](https://docs.aws.amazon.com/en_us/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics).

1. **Identifikasi perangkat lunak pada instans Anda yang melakukan IMDSv1 panggilan:**

   Gunakan [IMDS Packet Analyzer](https://github.com/aws/aws-imds-packet-analyzer) open source untuk mengidentifikasi dan mencatat IMDSv1 panggilan selama fase boot dan operasi runtime instans Anda. Gunakan informasi ini untuk mengidentifikasi perangkat lunak yang akan diperbarui agar instance Anda siap digunakan IMDSv2 saja. Anda dapat menjalankan IMDS Packet Analyzer dari baris perintah atau menginstalnya sebagai layanan.

### Langkah 2: Perbarui perangkat lunak ke IMDSv2
<a name="path-step-2"></a>

Perbarui semua SDKs, CLIs, dan perangkat lunak yang menggunakan kredensil Peran pada instans Anda ke IMDSv2 versi yang kompatibel. Untuk informasi selengkapnya tentang memperbarui CLI, lihat [Menginstal atau memperbarui ke versi terbaru dari AWS CLIAWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) *Panduan Pengguna*.

### Langkah 3: Memerlukan IMDSv2 contoh
<a name="path-step-3"></a>

Setelah mengonfirmasi nol IMDSv1 panggilan melalui `MetadataNoToken` metrik, konfigurasikan instans yang ada agar diperlukan IMDSv2. Juga, konfigurasikan semua instance baru untuk membutuhkan IMDSv2. Dengan kata lain, IMDSv1 nonaktifkan semua instance yang ada dan yang baru.

1. **Konfigurasikan instance yang ada untuk membutuhkanIMDSv2:**

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

   1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

   1. Di panel navigasi, pilih **Instans**.

   1. Pilih instans Anda.

   1. Pilih **Tindakan**, **Pengaturan instans**, **Ubah opsi metadata instans**.

   1. Untuk **IMDSv2**, pilih **Diperlukan**.

   1. Pilih **Simpan**.

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

   Gunakan perintah [modify-instance-metadata-options](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-options.html)CLI untuk menentukan bahwa hanya IMDSv2 yang akan digunakan. 

------
**catatan**  
Anda dapat memodifikasi pengaturan ini pada instance yang sedang berjalan. Perubahan segera berlaku tanpa memerlukan instance restart.

   Untuk informasi selengkapnya, lihat [Membutuhkan penggunaan IMDSv2](configuring-IMDS-existing-instances.md#modify-require-IMDSv2).

1. **Pantau masalah setelah menonaktifkanIMDSv1:**

   1. Lacak berapa kali IMDSv1 panggilan dicoba dan ditolak dengan `MetadataNoTokenRejected` CloudWatch metrik.

   1. Jika catatan `MetadataNoTokenRejected` metrik IMDSv1 memanggil instance yang mengalami masalah perangkat lunak, ini menunjukkan bahwa perangkat lunak memerlukan pembaruan untuk digunakan IMDSv2.

1. **Konfigurasikan instance baru untuk membutuhkanIMDSv2:**

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

   1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

   1. Ikuti langkah-langkah untuk [meluncurkan instance](ec2-launch-instance-wizard.md).

   1. Perluas **Detail lanjutan**, dan untuk **versi Metadata**, pilih **V2 saja (diperlukan token)**.

   1. Di panel **Summary**, tinjau konfigurasi instans Anda, lalu pilih **Launch instans**.

      Untuk informasi selengkapnya, lihat [Konfigurasikan instans saat peluncuran](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-instance-settings).

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

   AWS CLI: Gunakan perintah [run-instance](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/run-instances.html) dan tentukan yang IMDSv2 diperlukan.

------

### Langkah 4: Set IMDSv2 = diperlukan sebagai default
<a name="path-step-4"></a>

Anda dapat mengatur IMDSv2 =required sebagai konfigurasi default di tingkat akun atau organisasi. Ini memastikan bahwa semua instance yang baru diluncurkan dikonfigurasi secara otomatis untuk memerlukan IMDSv2.

1. **Tetapkan default tingkat akun:**

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

   1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

   1. Di panel navigasi, pilih **Dasbor**.

   1. Pada kartu **Atribut akun**, di bawah **Pengaturan**, pilih **Perlindungan dan keamanan data**.

   1. **Di bawah **default IMDS, pilih Kelola.****

   1. **Untuk **layanan metadata Instance**, pilih Diaktifkan.**

   1. Untuk **versi Metadata**, pilih **V2 saja (diperlukan token)**.

   1. Pilih **Perbarui**.

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

   Gunakan perintah [modify-instance-metadata-defaults](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/modify-instance-metadata-defaults.html)CLI dan tentukan `--http-tokens required` dan. `--http-put-response-hop-limit 2`

------

   Untuk informasi selengkapnya, lihat [Tetapkan IMDSv2 sebagai default untuk akun](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults).

1. **Atau, tetapkan default tingkat organisasi menggunakan Kebijakan Deklaratif:**

   Gunakan Kebijakan Deklaratif untuk menyetel default organisasi IMDSv2 menjadi required. *Untuk kebijakan contoh, lihat tab **Metadata Instans** di bagian [Kebijakan deklaratif yang didukung](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) di Panduan Pengguna.AWS Organizations *

### Langkah 5: Menerapkan instance untuk membutuhkan IMDSv2
<a name="path-step-5"></a>

Setelah Anda mengonfirmasi bahwa tidak ada ketergantungan IMDSv1 pada instans mana pun, kami sarankan Anda menerapkan IMDSv2 semua instans baru.

Gunakan salah satu opsi berikut untuk menegakkan IMDSv2:

1. **Menegakkan IMDSv2 dengan properti akun**

   Anda dapat menerapkan penggunaan IMDSv2 di tingkat akun untuk masing-masing Wilayah AWS. Saat diberlakukan, instance hanya dapat diluncurkan jika dikonfigurasi untuk membutuhkan. IMDSv2 Penegakan ini berlaku terlepas dari bagaimana instans atau AMI dikonfigurasi. Untuk informasi selengkapnya, lihat [Menegakkan IMDSv2 di tingkat akun](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level). Untuk menerapkan setelan ini di tingkat organisasi, tetapkan Kebijakan Deklaratif. *Untuk kebijakan contoh, lihat tab **Metadata Instans** di bagian [Kebijakan deklaratif yang didukung](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_syntax.html#declarative-policy-examples) di Panduan Pengguna.AWS Organizations *

   Untuk mencegah pembalikan penegakan hukum, Anda harus menggunakan kebijakan IAM untuk mencegah akses ke API. [ModifyInstanceMetadataDefaults](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataDefaults.html) Untuk informasi selengkapnya, lihat [Gunakan kebijakan IAM](configuring-IMDS-new-instances.md#configure-IMDS-new-instances-iam-policy).
**catatan**  
Pengaturan ini tidak mengubah versi IMDS dari instans yang ada, tetapi memblokir pengaktifan IMDSv1 pada instance yang ada yang saat ini telah dinonaktifkan. IMDSv1 
**Awas**  
Jika IMDSv2 penegakan `httpTokens` diaktifkan dan tidak disetel ke `required` konfigurasi instans saat peluncuran, pengaturan akun, atau konfigurasi AMI, peluncuran instance akan gagal. Untuk informasi pemecahan masalah, lihat [Meluncurkan instance IMDSv1 -enabled gagal](troubleshooting-launch.md#launching-an-imdsv1-enabled-instance-fails).

1. **Atau, terapkan IMDSv2 dengan menggunakan kunci kondisi IAM atau SCP berikut:**
   + `ec2:MetadataHttpTokens`
   + `ec2:MetadataHttpPutResponseHopLimit`
   + `ec2:MetadataHttpEndpoint`

   Tombol kondisi ini mengontrol penggunaan [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)dan [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) APIs dan yang sesuai CLIs. Jika kebijakan dibuat, dan parameter dalam panggilan API tidak cocok dengan status yang ditentukan dalam kebijakan menggunakan kunci syarat, panggilan API atau CLI akan gagal dengan tanggapan`UnauthorizedOperation`.

   Misalnya kebijakan IAM, lihat .[Cara menggunakan metadata instans](ExamplePolicies_EC2.md#iam-example-instance-metadata)

# Batasi akses ke Layanan Metadata Instance
<a name="instance-metadata-limiting-access"></a>

Anda dapat mempertimbangkan untuk menggunakan aturan firewall lokal untuk menonaktifkan akses dari beberapa atau semua proses ke Layanan Metadata Instans (IMDS).

[Untuk [instance berbasis NITRO](instance-types.md#instance-hypervisor-type), IMDS dapat dijangkau dari jaringan Anda sendiri ketika alat jaringan dalam VPC Anda, seperti router virtual, meneruskan paket ke alamat IMDS, dan pemeriksaan sumber/tujuan default pada instance dinonaktifkan.](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck) Untuk mencegah sumber dari luar VPC Anda mencapai IMDS, kami sarankan Anda memodifikasi konfigurasi alat jaringan untuk menjatuhkan paket dengan IPv4 alamat tujuan IMDS `169.254.169.254` dan, jika Anda mengaktifkan IPv6 titik akhir, alamat IMDS. IPv6 `[fd00:ec2::254]`

## Batasi akses IMDS untuk instance Linux
<a name="instance-metadata-limiting-access-linux"></a>

**Menggunakan iptables untuk membatasi akses**

Contoh berikut menggunakan iptables Linux dan modul `owner` untuk mencegah server web Apache (berdasarkan ID pengguna instalasi default `apache`) mengakses 169.254.169.254. Ini menggunakan *aturan* penolakan untuk menolak semua permintaan metadata instance (apakah IMDSv1 atau IMDSv2) dari proses apa pun yang berjalan sebagai pengguna tersebut.

```
$ sudo iptables --append OUTPUT --proto tcp --destination 169.254.169.254 --match owner --uid-owner apache --jump REJECT
```

Atau, Anda dapat mempertimbangkan untuk hanya mengizinkan akses ke pengguna atau grup tertentu, dengan menggunakan *aturan izin*. Aturan izinkan mungkin lebih mudah dikelola dari perspektif keamanan, karena aturan tersebut mengharuskan Anda membuat keputusan tentang perangkat lunak apa yang memerlukan akses ke metadata instans. Jika Anda menggunakan *aturan izin*, kecil kemungkinannya Anda secara tidak sengaja mengizinkan perangkat lunak mengakses layanan metadata (yang tidak Anda inginkan untuk mempunyai akses) jika nanti Anda mengubah perangkat lunak atau konfigurasi pada sebuah instans. Anda juga dapat menggabungkan penggunaan grup dengan aturan izin, sehingga Anda dapat menambahkan dan menghapus pengguna dari grup yang diizinkan tanpa perlu mengubah aturan firewall.

Contoh berikut mencegah akses ke IMDS oleh semua proses, kecuali untuk proses yang berjalan di akun pengguna `trustworthy-user`.

```
$ sudo iptables --append OUTPUT --proto tcp --destination 169.254.169.254 --match owner ! --uid-owner trustworthy-user --jump REJECT
```

**catatan**  
Untuk menggunakan aturan firewall lokal, Anda perlu menyesuaikan perintah contoh sebelumnya agar sesuai dengan kebutuhan Anda. 
Secara default, aturan iptables tidak persisten di seluruh boot ulang sistem. Aturan itu dapat dibuat persisten dengan menggunakan fitur OS, yang tidak dijelaskan di sini.
Modul `owner` iptables hanya cocok dengan keanggotaan grup jika grup tersebut adalah grup utama dari pengguna lokal tertentu. Grup lain tidak cocok.

**Menggunakan PF atau IPFW untuk membatasi akses**

Jika Anda menggunakanFreeBSD atauOpenBSD , Anda juga dapat mempertimbangkan untuk menggunakan PF atau IPFW. Contoh berikut membatasi akses ke IMDS hanya untuk pengguna 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
```

**catatan**  
Urutan perintah PF dan IPFW penting. PF default ke aturan pencocokan terakhir dan IPFW default ke aturan pencocokan pertama.

## Batasi akses IMDS untuk instance Windows
<a name="instance-metadata-limiting-access-windows"></a>

**Menggunakan firewall Windows untuk membatasi akses**

 PowerShell Contoh berikut menggunakan firewall Windows bawaan untuk mencegah server web Server Informasi Internet (berdasarkan ID pengguna instalasi default`NT AUTHORITY\IUSR`) mengakses 169.254.169.254. Ini menggunakan *aturan* penolakan untuk menolak semua permintaan metadata instance (apakah IMDSv1 atauIMDSv2) dari proses apa pun yang berjalan sebagai pengguna tersebut.

```
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
```

Atau, Anda dapat mempertimbangkan untuk hanya mengizinkan akses ke pengguna atau grup tertentu, dengan menggunakan *aturan izin*. Aturan izinkan mungkin lebih mudah dikelola dari perspektif keamanan, karena aturan tersebut mengharuskan Anda membuat keputusan tentang perangkat lunak apa yang memerlukan akses ke metadata instans. Jika Anda menggunakan *aturan izin*, kecil kemungkinannya Anda secara tidak sengaja mengizinkan perangkat lunak mengakses layanan metadata (yang tidak Anda inginkan untuk mempunyai akses) jika nanti Anda mengubah perangkat lunak atau konfigurasi pada sebuah instans. Anda juga dapat menggabungkan penggunaan grup dengan aturan izin, sehingga Anda dapat menambahkan dan menghapus pengguna dari grup yang diizinkan tanpa perlu mengubah aturan firewall.

Contoh berikut mencegah akses ke metadata instans oleh semua proses yang berjalan sebagai grup OS yang ditentukan dalam variabel `blockPrincipal` (dalam contoh ini, grup Windows `Everyone`), kecuali untuk proses yang ditentukan dalam `exceptionPrincipal` (dalam contoh ini, grup yang bernama `trustworthy-users`). Anda harus menentukan baik menolak maupun mengizinkan pengguna utama karena Windows Firewall, tidak seperti aturan `! --uid-owner trustworthy-user` di iptables Linux, tidak menyediakan mekanisme pintasan untuk mengizinkan hanya pengguna utama (pengguna atau grup) tertentu dengan menolak semua yang lain.

```
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
```

**catatan**  
Untuk menggunakan aturan firewall lokal, Anda perlu menyesuaikan perintah contoh sebelumnya agar sesuai dengan kebutuhan Anda. 

**Menggunakan aturan netsh untuk membatasi akses**

Anda dapat mempertimbangkan untuk memblokir semua perangkat lunak menggunakan aturan `netsh`, tetapi itu sangat kurang fleksibel.

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

**catatan**  
Untuk menggunakan aturan firewall lokal, Anda perlu menyesuaikan perintah contoh sebelumnya agar sesuai dengan kebutuhan Anda. 
Aturan `netsh` harus disetel dari command prompt yang tinggi, dan tidak dapat diatur untuk menolak atau mengizinkan pengguna utama tertentu.