Akses metadata instance untuk sebuah instance 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.

Akses metadata instance untuk sebuah instance EC2

Anda dapat mengakses metadata EC2 instance dari dalam instance itu sendiri atau dari EC2 konsol,, APISDKs, 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

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

catatan

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

Pertimbangan akses metadata instance

Untuk menghindari masalah dengan pengambilan metadata instance, pertimbangkan hal berikut.

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 , LihatGunakan Layanan Metadata Instance untuk mengakses metadata instans .

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. IMDSv2Nilai menunjukkan baik Diperlukan (Anda harus menggunakanIMDSv2) 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.

Dukungan IPv6

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

(Windows) Buat kustom AMIs menggunakan Windows Sysprep

Untuk memastikan bahwa IMDS berfungsi ketika Anda meluncurkan instance dari Windows kustomAMI, AMI harus berupa gambar standar yang dibuat dengan Windows Sysprep. Jika tidak, itu IMDS tidak akan berhasil. Untuk informasi selengkapnya, lihat Buat Amazon EC2 AMI menggunakan Windows Sysprep.

Di lingkungan kontainer, atur batas hop ke 2

IMDSv2Panggilan AWS SDKs penggunaan secara default. Jika IMDSv2 panggilan tidak menerima respons, akan SDK mencoba ulang panggilan dan, jika masih tidak berhasil, gunakan. IMDSv1 Hal ini dapat mengakibatkan penundaan, terutama di lingkungan kontainer. Dalam lingkungan kontainer, jika batas hop adalah 1, IMDSv2 respons tidak kembali karena pergi ke wadah dianggap sebagai hop jaringan tambahan. Untuk menghindari proses jatuh kembali IMDSv1 dan penundaan yang dihasilkan, dalam lingkungan kontainer kami sarankan Anda menetapkan batas hop ke 2. Untuk informasi selengkapnya, lihat Konfigurasikan opsi Layanan Metadata Instance.

Batas paket per detik (PPS)

Ada batas 1024 paket per detik (PPS) untuk layanan yang menggunakan alamat link-lokal. Batas ini mencakup agregat DNSKueri Resolver Route 53, permintaan Layanan Metadata Instans (), IMDS permintaan Amazon Time Service Network Time Protocol (NTP), dan permintaan Layanan Lisensi Windows (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. Sebagai contoh:

    • EC2Konsol Amazon dapat melakukan pengkodean base64 untuk Anda atau menerima input yang disandikan base64.

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

    • AWS SDK for 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)*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 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 sebuah instance, data pengguna instance tidak termasuk dalamAMI.

Akses metadata instance dari dalam sebuah instance EC2

Karena metadata instans Anda tersedia dari instans yang sedang berjalan, Anda tidak perlu menggunakan EC2 konsol Amazon 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.

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.

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 c URL

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.

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 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 c URL 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 c URL 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 mengueri opsi metadata instans untuk instans Anda yang ada dengan menggunakan salah satu metode berikut.

Console
Untuk mengueri opsi metadata instans untuk instans yang sudah ada menggunakan konsol
  1. Buka EC2 konsol Amazon di https://console.aws.amazon.com/ec2/.

  2. Di panel navigasi, pilih Instans.

  3. Pilih instans Anda.

  4. Pilih Tindakan, Pengaturan instans, Ubah opsi metadata instans.

  5. Tinjau opsi metadata instans saat ini di kotak dialog Ubah opsi metadata instans.

AWS CLI
Untuk menanyakan opsi metadata instance untuk instance yang ada menggunakan AWS CLI

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

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

Respons dan pesan kesalahan

Semua metadata instance dikembalikan sebagai teks (tipe HTTP text/plain konten).

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

Permintaan untuk sumber daya metadata umum (URIdiakhiri dengan/) mengembalikan daftar sumber daya yang tersedia, atau kode 404 - Not Found HTTP kesalahan jika tidak ada sumber daya tersebut. Item daftar berada pada baris terpisah, diakhiri dengan umpan baris (ASCII10).

Untuk permintaan yang dibuat menggunakan Layanan Metadata Instance Versi 2, kode HTTP kesalahan 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 diizinkan atau IMDS dimatikan.

  • 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 HTTP server. Jika Anda mengaktifkan penanganan kesalahan, shell dapat menangkap kesalahan dan menghentikan skrip.

Throttling kueri

Kami membatasi kueri ke basis per instance, dan kami membatasi jumlah koneksi simultan dari sebuah instance ke. IMDS 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 kredenal IAM peran dan keamanan yang terkait dengan peran, lihat. Mengambil kredensial keamanan dari metadata instans

Jika Anda terhambat saat mengaksesIMDS, coba lagi kueri Anda dengan strategi backoff eksponensial.