Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan Layanan Metadata Instance untuk mengakses metadata instance
Anda dapat mengakses metadata instans dari instans yang sedang berjalan menggunakan salah satu metode berikut:
-
Layanan Metadata Instans Versi 2 (IMDSv2) - metode berorientasi sesi
Sebagai contoh, lihat Contoh untuk IMDSv2.
-
Layanan Metadata Instance Versi 1 (IMDSv1) — sebuah metode request/response
Sebagai contoh, lihat Contoh untuk IMDSv1.
Secara default, Anda dapat menggunakan IMDSv1 atau IMDSv2, atau keduanya.
Anda dapat mengonfigurasi Instance Metadata Service (IMDS) pada setiap instans untuk hanya menerima panggilan IMDSv2, yang akan menyebabkan panggilan IMDSv1 gagal. Untuk informasi tentang cara mengonfigurasi instans Anda agar menggunakan IMDSv2, lihat Mengkonfigurasi opsi Layanan Metadata Instance.
Header PUT atau GET bersifat unik untuk IMDSv2. Jika header ini ada dalam permintaan, maka permintaan tersebut ditujukan untuk IMDSv2. Jika header tidak ada, diasumsikan bahwa permintaan tersebut ditujukan untuk IMDSv1.
Untuk tinjauan ekstensif IMDSv2, lihat Tambahkan pertahanan secara mendalam terhadap firewall terbuka, proksi terbalik, dan kerentanan SSRF dengan peningkatan pada Layanan Metadata Instans EC2
Topik
Bagaimana cara kerja Layanan Metadata Instans Versi 2
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 alamat IPv4 Layanan Metadata Instans (IMDS): 169.254.169.254. Jika Anda mengambil metadata instans untuk instans EC2 melalui alamat IPv6, pastikan Anda mengaktifkan dan menggunakan alamat IPv6 sebagai gantinya: [fd00:ec2::254] Alamat IPv6 IMDS kompatibel dengan perintah IMDSv2. Alamat IPv6 hanya dapat diakses pada Nitro-based instance di IPv6-supported subnet (dual stack atau IPv6 saja).
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) atautoken(instans Windows) -
Meminta item metadata tingkat atas menggunakan token
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
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
Jika Anda menggunakan IMDSv2 untuk meminta metadata instans, maka permintaan tersebut harus menyertakan yang berikut ini:
-
Gunakan permintaan
PUTuntuk memulai sesi ke layanan metadata instans. PermintaanPUTmengembalikan sebuah token yang harus disertakan dalam permintaanGETselanjutnya ke layanan metadata instans. Token diperlukan untuk mengakses metadata menggunakan IMDSv2. -
Sertakan token di semua permintaan
GETke IMDS. Saat penggunaan token diatur kerequired, permintaan tanpa token yang valid atau dengan token yang kedaluwarsa akan menerima kode kesalahan HTTP401 - 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
PUTharus 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
PUTyang 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
PUTsetiap kali Anda perlu meminta metadata instans. Tidak ada batasan praktis untuk jumlah token yang bersamaan, masing-masing mewakili sesinya sendiri. Namun, IMDSv2 masih dibatasi oleh koneksi IMDS normal dan batas throttling. Untuk informasi selengkapnya, lihat Throttling kueri.
-
HTTP GET dan HEAD metode diperbolehkan dalam permintaan metadata instans IMDSv2. PUTpermintaan 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 perintah modify- AWS CLI instance-metadata-options. 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.
Gunakan yang didukung AWS SDK
Untuk menggunakan IMDSv2, instans EC2 Anda harus menggunakan versi AWS SDK yang mendukung penggunaan IMDSv2. Versi terbaru dari semua AWS SDK mendukung 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 SDK dan Alat AWS di Panduan Referensi SDK dan Alat AWS .
Berikut ini adalah versi minimum yang mendukung penggunaan IMDSv2:
-
AWS CLI
– 1.16.289 -
AWS Tools for Windows PowerShell
– 4.0.1.0 -
AWS SDK untuk .NET
– 3.3.634.1 -
AWS SDK untuk C++
– 1.7.229 -
AWS SDK untuk Go
– 1.25.38 -
AWS SDK untuk Go v2
- 0.19.0 -
AWS SDK untuk Java
– 1.11.678 -
AWS SDK for Java 2.x
– 2.10.21 -
AWS SDK untuk JavaScript di Node.js
- 2.722.0 -
AWS SDK untuk Kotlin
-- 1.1.4 -
AWS SDK untuk PHP
– 3.147.7 -
AWS SDK untuk Python (Botocore)
- 1.13.25 -
AWS SDK untuk Python (Boto3)
– 1.12.6 -
AWS SDK untuk Ruby
– 3.79.0
Contoh untuk IMDSv2
Jalankan contoh berikut pada instans Amazon EC2 Anda untuk mengambil metadata instans untuk IMDSv2.
Pada instance 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 output mungkin berbeda dari apa yang dijelaskan di sini.
Contoh
Dapatkan versi metadata instans yang tersedia
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.
Dapatkan item metadata tingkat atas
Contoh ini mendapatkan item metadata tingkat atas. Untuk informasi selengkapnya tentang item dalam respons, lihatKategori metadata instans.
Perhatikan bahwa tag disertakan dalam output ini hanya jika Anda telah mengizinkan akses. Untuk informasi selengkapnya, lihat Aktifkan akses ke tag dalam metadata instance.
Dapatkan nilai untuk item metadata
Contoh-contoh ini mendapatkan nilai dari beberapa item metadata tingkat atas yang diperoleh dalam contoh sebelumnya. Permintaan ini menggunakan token tersimpan yang dibuat menggunakan perintah pada contoh sebelumnya. Token tidak boleh kedaluwarsa.
Dapatkan daftar kunci publik yang tersedia
Contoh ini mendapatkan daftar kunci publik yang tersedia.
Tunjukkan format di mana kunci publik 0 tersedia
Contoh ini menunjukkan format di mana kunci publik 0 tersedia.
Dapatkan kunci publik 0 (dalam format kunci OpenSSH)
Contoh ini mendapatkan kunci publik 0 (di format kunci OpenSSH).
Dapatkan ID subnet untuk instans
Contoh ini mendapatkan ID subnet untuk sebuah instans.
Dapatkan tanda instans untuk sebuah instans
Jika akses ke tag instance dalam metadata instans diaktifkan, Anda bisa mendapatkan tag untuk instance dari metadata instance. Untuk informasi selengkapnya, lihat Mengambil tanda dari metadata instans.
Contoh untuk IMDSv1
Jalankan contoh berikut pada instans Amazon EC2 Anda untuk mengambil metadata instans untuk IMDSv1.
Pada instance 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 output mungkin berbeda dari apa yang dijelaskan di sini.
Contoh
Dapatkan versi metadata instans yang tersedia
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.
Dapatkan item metadata tingkat atas
Contoh ini mendapatkan item metadata tingkat atas. Untuk informasi selengkapnya tentang item dalam respons, lihatKategori metadata instans.
Perhatikan bahwa tag disertakan dalam output ini hanya jika Anda telah mengizinkan akses. Untuk informasi selengkapnya, lihat Aktifkan akses ke tag dalam metadata instance.
Dapatkan nilai untuk item metadata
Contoh-contoh ini mendapatkan nilai dari beberapa item metadata tingkat atas yang diperoleh dalam contoh sebelumnya.
Dapatkan daftar kunci publik yang tersedia
Contoh ini mendapatkan daftar kunci publik yang tersedia.
Tunjukkan format di mana kunci publik 0 tersedia
Contoh ini menunjukkan format di mana kunci publik 0 tersedia.
Dapatkan kunci publik 0 (dalam format kunci OpenSSH)
Contoh ini mendapatkan kunci publik 0 (di format kunci OpenSSH).
Dapatkan ID subnet untuk instans
Contoh ini mendapatkan ID subnet untuk sebuah instans.
Dapatkan tanda instans untuk sebuah instans
Jika akses ke tag instance dalam metadata instans diaktifkan, Anda bisa mendapatkan tag untuk instance dari metadata instance. Untuk informasi selengkapnya, lihat Mengambil tanda dari metadata instans.