View a markdown version of this page

Mengakses metadata instans untuk instans EC2 - Amazon Elastic Compute Cloud

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

Mengakses metadata instans untuk instans EC2

Anda dapat mengakses metadata instans EC2 dari dalam instans itu sendiri atau dari konsol EC2, API, SDK, atau. AWS CLI Untuk mendapatkan pengaturan metadata instans saat ini untuk instance dari konsol atau baris perintah, lihatMengueri opsi metadata instans untuk instans yang ada.

Anda juga dapat memodifikasi data pengguna untuk instans dengan volume root EBS. Instans harus berada dalam status berhenti. Untuk petunjuk konsol, lihat Memperbarui data pengguna instance. Untuk contoh Linux yang menggunakan AWS CLI, lihat modif y-instance-atribut. Untuk contoh Windows yang menggunakan Tools untuk Windows PowerShell, lihatData pengguna dan Alat untuk Windows PowerShell.

catatan

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

Pertimbangan akses metadata instans

Untuk menghindari masalah dengan metadata instance, pertimbangkan hal berikut.

Kegagalan peluncuran instans karena penegakan IMDSv2 () HttpTokensEnforced=enabled

Sebelum mengaktifkan penegakan IMDSv2, Anda memerlukan semua perangkat lunak Anda pada instance untuk mendukung IMDSv2, setelah itu Anda dapat mengubah default untuk menonaktifkan IMDSv1 ()httpTokens=required, setelah itu Anda dapat mengaktifkan penegakan. Untuk informasi selengkapnya, lihat Transisi ke penggunaan Layanan Metadata Instans Versi 2.

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 Instance. Untuk mengharuskan penggunaan IMDSv2, lihat Menggunakan Layanan Metadata Instance untuk mengakses metadata instance.

Jika IMDSv2 diperlukan, IMDsv1 tidak berfungsi

Jika Anda menggunakan IMDSv1 dan tidak menerima tanggapan, kemungkinan IMDSv2 diperlukan. Untuk memeriksa apakah IMDSv2 diperlukan, pilih instance untuk melihat detailnya. Nilai IMDSv2 menunjukkan baik Diper lukan (Anda harus menggunakan IMDSv2) atau Opsional (Anda dapat menggunakan IMDSv2 atau IMDSv1).

(IMDSv2) Gunakan /latest/api/token untuk mengambil token

M PUT enerbitkan permintaan ke jalur khusus versi apa pun, misalnya/2021-03-23/api/token, menghasilkan layanan metadata 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.

Dukungan IPv6

Untuk mengambil metadata instans menggunakan alamat IPv6, pastikan Anda mengaktifkan dan menggunakan alamat IPv6 IMDS alih- [fd00:ec2::254] alih alamat IPv4. 169.254.169.254 Instance harus berupa Nitro-based instance yang diluncurkan di subnet yang mendukung IP v6.

(Windows) Buat AMI khusus 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 AMI Amazon EC2 menggunakan Windows Sysprep.

Dalam lingkungan kontainer, pertimbangkan konfigurasi ulang atau meningkatkan batas hop menjadi 2

AWS SDK menggunakan panggilan IMDSv2 secara default. Jika panggilan IMDSv2 tidak menerima respons, beberapa AWS SDK mencoba lagi panggilan dan, jika masih gagal, gunakan IMDSv1. Hal ini dapat mengakibatkan penundaan, terutama di lingkungan kontainer. Untuk AWS SDK yang memerlukan 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 Men ambahkan pertahanan secara mendalam terhadap firewall terbuka, proxy terbalik, dan kerentanan SSRF dengan penyempurnaan pada Layanan Metadata Instans EC2. Untuk informasi tentang mengubah batas hop, lihatMengubah batas hop respons PUT.

Batas paket per detik (PPS)

Ada batas 1024 paket per detik (PPS) untuk layanan yang menggunakan alamat link-local. Batas ini mencakup agregat permintaan Kueri DNS Resolver Route 53, permintaan Layanan Metadata Instance (IMDS), permintaan Amazon Time Service Network Time Protocol (NTP), dan permintaan Layanan Lisensi Windows (untuk instans 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 instans untuk menafsirkan dan bertindak berdasarkan data pengguna.

  • Data pengguna harus dienkode base64. Tergantung pada alat atau SDK yang Anda gunakan, base64-encoding mungkin dilakukan untuk Anda. Contoh:

    • Konsol Amazon EC2 dapat mengenkode base64 untuk Anda atau menerima input yang dienkode base64.

    • AWS CLI versi 2 melakukan base64-encoding parameter biner untuk Anda secara default. AWS CLI versi 1 melakukan base64-encoding --user-data parameter untuk Anda.

    • Ini AWS SDK for Python (Boto3) melakukan base64-encoding UserData 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)*4.

  • 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 instans Windows, Anda dapat mengonfigurasi pengaturan sehingga skrip data pengguna yang diperbarui dijalankan satu kali saat Anda memulai instance atau setiap kali Anda me-reboot atau memulai instance.

  • Data pengguna adalah atribut instans. Jika Anda membuat AMI dari instans, data pengguna instans tidak disertakan dalam AMI.

Mengakses metadata instans dari dalam instans EC2

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 ini dianggap sebagai metadata instance, tetapi 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.

Untuk mengakses properti metadata instance dari dalam instance yang sedang berjalan, dapatkan data dari URI IPv4 atau IPv6 berikut. Alamat IP ini adalah alamat link-local dan hanya valid dari instance. Untuk informasi selengkapnya, lihat Link-local alamat.

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 URI berikut.

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 instans Amazon EC2.

User data

Untuk mengambil data pengguna dari instance, gunakan salah satu URI berikut. Untuk mengambil data pengguna menggunakan alamat IPv6, Anda harus mengaktifkannya, dan instance harus berupa Nitro-based instance 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 ditentukan 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 ditentukan 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

Anda dapat menanyakan opsi metadata instance 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/.

  2. Di panel navigasi, pilih Instans.

  3. Pilih instance Anda dan periksa bidang berikut:

    • IMDSv2 — Nilai Wajib atau Opsional.

    • Izinkan tag dalam metadata instance — Nilainya di aktifkan atau Din onaktifkan.

  4. Dengan instans Anda dipilih, pilih Tind akan, Peng aturan instans, Ubah opsi metadata instans.

    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.

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

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

Respons dan pesan kesalahan

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 permintaan IMDSv1 tidak menerima tanggapan, kemungkinan 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 FoundSumber 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

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

Jika Anda menggunakan IMDS untuk mengambil kredentif AWS keamanan, hindari meminta kredentif selama setiap transaksi atau secara bersamaan dari sejumlah besar utas atau proses, karena ini dapat menyebabkan pelambatan. 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.

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