

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.