

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

# Gunakan metadata instans untuk mengelola instans EC2
<a name="ec2-instance-metadata"></a>

*Metadata instans* adalah data tentang instans Anda yang dapat Anda gunakan untuk mengonfigurasi atau mengelola instans berjalan. Metadata instance meliputi yang berikut:

**Properti metadata contoh**  
Properti metadata instance dibagi ke dalam [kategori](#instancedata-data-categories), misalnya, nama host, acara, dan grup keamanan.

**Data dinamis**  
Data dinamis adalah metadata yang dihasilkan saat instance diluncurkan, seperti dokumen identitas instance. Untuk informasi selengkapnya, lihat [Kategori data dinamis](#dynamic-data-categories).

**Data pengguna**  
Anda juga dapat menggunakan metadata instance untuk mengakses *data pengguna* yang Anda tentukan saat meluncurkan instans. Misalnya, Anda dapat menentukan parameter untuk mengonfigurasi instans Anda, atau menyertakan skrip sederhana. Anda juga dapat membangun generik AMIs dan menggunakan data pengguna untuk memodifikasi file konfigurasi yang disediakan pada waktu peluncuran. Misalnya, jika Anda menjalankan server web untuk berbagai bisnis kecil, mereka semua dapat menggunakan AMI generik yang sama dan mengambil kontennya dari bucket Amazon S3 yang Anda tentukan dalam data pengguna saat peluncuran. Untuk menambahkan pelanggan baru kapan saja, buat bucket untuk pelanggan, tambahkan konten mereka, dan luncurkan AMI Anda dengan nama keranjang bucket unik yang diberikan untuk kode Anda di data pengguna. Jika Anda meluncurkan beberapa instance menggunakan `RunInstances` panggilan yang sama, data pengguna tersedia untuk semua instance dalam reservasi tersebut. Setiap instance yang merupakan bagian dari reservasi yang sama memiliki `ami-launch-index` nomor unik, sehingga Anda dapat menulis kode yang mengontrol apa yang dilakukan instance. Misalnya, host pertama mungkin memilih dirinya sendiri sebagai simpul asli dalam sebuah klaster. Untuk contoh peluncuran AMI mendetail, lihat .[Identifikasi setiap instance yang diluncurkan dalam satu permintaan](AMI-launch-index-examples.md)

**penting**  
Meskipun Anda hanya dapat mengakses metadata instans dan data pengguna dari dalam instans itu sendiri, data tersebut tidak dilindungi oleh metode autentikasi atau kriptografi. Siapa pun yang memiliki akses langsung ke instans, dan perangkat lunak apa pun yang kemungkinan berjalan di instans, akan dapat melihat metadatanya. Oleh karena itu, Anda tidak boleh menyimpan data sensitif, seperti sandi atau kunci enkripsi yang tahan lama, sebagai data pengguna.

**Topics**
+ [Kategori metadata instans](#instancedata-data-categories)
+ [Kategori data dinamis](#dynamic-data-categories)
+ [Akses metadata instans untuk instans EC2](instancedata-data-retrieval.md)
+ [Konfigurasikan opsi Layanan Metadata Instance](configuring-instance-metadata-options.md)
+ [Jalankan perintah saat Anda meluncurkan instans EC2 dengan input data pengguna](user-data.md)
+ [Identifikasi setiap instance yang diluncurkan dalam satu permintaan](AMI-launch-index-examples.md)

## Kategori metadata instans
<a name="instancedata-data-categories"></a>

Properti metadata instance dibagi menjadi beberapa kategori. Untuk mengambil properti metadata instance, Anda menentukan kategori dalam permintaan, dan metadata dikembalikan dalam respons.

Saat kategori baru dirilis, build metadata instans baru dibuat dengan nomor versi baru. Dalam tabel berikut, kolom **Versi saat kategori dirilis** menentukan versi build saat kategori metadata instans dirilis. Untuk menghindari keharusan memperbarui kode Anda setiap kali Amazon EC2 merilis build metadata instans baru, gunakan `latest`, bukan nomor versi, di permintaan metadata Anda. Untuk informasi selengkapnya, lihat [Dapatkan versi metadata instans yang tersedia](configuring-instance-metadata-service.md#instance-metadata-ex-1).

Saat Amazon EC2 merilis kategori metadata instans baru, metadata instans untuk kategori baru mungkin tidak tersedia untuk instans yang sudah ada. Dengan [instans berbasis Nitro](instance-types.md#instance-hypervisor-type), Anda dapat mengambil metadata instance hanya untuk kategori yang tersedia saat peluncuran. Untuk instans dengan hypervisor Xen, Anda dapat [menghentikan dan kemudian memulai](Stop_Start.md) instans untuk memperbarui kategori yang tersedia untuk instans tersebut.

Tabel berikut mencantumkan kategori metadata instans. Beberapa nama kategori menyertakan placeholder untuk data yang unik untuk instans Anda. Misalnya, *mac* mewakili alamat MAC untuk antarmuka jaringan. Anda harus mengganti placeholder dengan nilai sebenarnya saat Anda mengambil metadata instans.


| Kategori | Deskripsi | Versi ketika kategori dirilis | 
| --- | --- | --- | 
| ami-id  | ID AMI yang digunakan untuk meluncurkan instans. | 1.0 | 
| ami-launch-index  | Jika Anda meluncurkan beberapa instance menggunakan RunInstances panggilan yang sama, nilai ini menunjukkan urutan peluncuran untuk setiap instance. Nilai instans pertama yang diluncurkan adalah 0. Jika Anda meluncurkan instans menggunakan Auto Scaling atau armada EC2, nilai ini selalu 0. | 1.0 | 
| ami-manifest-path  | Jalur ke file manifes AMI di Amazon S3. Jika Anda menggunakan AMI yang didukung Amazon EBS untuk meluncurkan instans, hasil yang dikembalikan adalah unknown. | 1.0 | 
| ancestor-ami-ids  | AMI IDs dari setiap instance yang dibundel ulang untuk membuat AMI ini. Nilai ini hanya akan ada jika file manifes AMI berisi kunci ancestor-amis. | 10/10/2007 | 
| autoscaling/target-lifecycle-state |  Nilai yang menunjukkan status siklus hidup Auto Scaling target yang dialihkan oleh instans Auto Scaling. Anda pada saat instans bertransisi ke salah satu status siklus hidup target setelah 10 Maret 2022. Nilai yang mungkin: `Detached` `InService` \$1 `Standby` \$1 `Terminated` \$1 `Warmed:Hibernated` \$1 `Warmed:Running` \$1 `Warmed:Stopped` \$1`Warmed:Terminated`. Lihat [Mengambil status siklus hidup target melalui metadata instans](https://docs.aws.amazon.com/autoscaling/ec2/userguide/retrieving-target-lifecycle-state-through-imds.html) di *Panduan Pengguna Amazon EC2 Auto Scaling*.   | 2021-07-15 | 
| block-device-mapping/ami | Perangkat virtual yang berisi sistem root/boot file. | 15/12/2007 | 
| block-device-mapping/ebsN  | Perangkat virtual yang terkait dengan volume Amazon EBS apa pun. Volume Amazon EBS hanya tersedia dalam metadata jika volume itu ada pada waktu peluncuran atau saat instans terakhir kali dimulai. N menunjukkan indeks volume Amazon EBS (seperti ebs1 atau ebs2). | 15/12/2007 | 
| block-device-mapping/ephemeralN  | Perangkat virtual untuk setiap volume penyimpanan NVMe non-instance. N menunjukkan indeks setiap volume. Jumlah volume penyimpanan instans dalam pemetaan perangkat blok mungkin tidak cocok dengan jumlah volume penyimpanan instans yang sebenarnya untuk instans tersebut. Tipe instans menentukan jumlah volume penyimpanan instans yang tersedia untuk sebuah instans. Jika jumlah volume penyimpanan instans dalam pemetaan perangkat blok melebihi jumlah yang tersedia untuk sebuah instans, volume penyimpanan instans tambahan akan diabaikan. | 15/12/2007 | 
| block-device-mapping/root  | Perangkat virtual atau partisi yang terkait dengan perangkat atau partisi root pada perangkat virtual, di mana sistem file root (/ atau C:) dikaitkan dengan instans tertentu. | 15/12/2007 | 
| block-device-mapping/swap  | Perangkat virtual yang terkait dengan swap. Tidak selalu ada. | 15/12/2007 | 
| events/maintenance/history | Jika ada peristiwa pemeliharaan yang diselesaikan atau dibatalkan untuk instans tersebut, berisi string JSON dengan informasi tentang peristiwa tersebut. | 17/08/2018 | 
| events/maintenance/scheduled | Jika ada peristiwa pemeliharaan aktif untuk instans tersebut, berisi string JSON dengan informasi tentang peristiwa tersebut. Untuk informasi selengkapnya, lihat [Melihat peristiwa terjadwal yang memengaruhi instans Amazon EC2 Anda](viewing_scheduled_events.md). | 17/08/2018 | 
| events/recommendations/rebalance | Perkiraan waktu, dalam UTC, ketika notifikasi rekomendasi penyeimbangan ulang instans EC2 dikeluarkan untuk instans tersebut. Berikut adalah contoh metadata untuk kategori ini: \$1"noticeTime": "2020-11-05T08:22:00Z"\$1. Kategori ini hanya tersedia setelah notifikasi dikeluarkan. Untuk informasi selengkapnya, lihat [Rekomendasi penyeimbangan ulang instans EC2](rebalance-recommendations.md). | 2020-10-27 | 
| hostname | Jika instans EC2 menggunakan Penamaan berbasis IP (IPBN), ini adalah nama host DNS IPv4 privat dari instans tersebut. Jika instans EC2 menggunakan Penamaan berbasis sumber Daya (RBN), ini adalah RBN. Jika ada banyak antarmuka jaringan, ini mengacu pada perangkat eth0 (perangkat yang nomor perangkatnya adalah 0). Untuk informasi selengkapnya tentang IPBN dan RBN, lihat [Nama host dan domain instans EC2](ec2-instance-naming.md). | 1.0 | 
|  iam/info  | Jika ada peran IAM yang terkait dengan instance, berisi informasi tentang terakhir kali profil instans diperbarui, termasuk LastUpdated tanggal instans, InstanceProfileArn, danInstanceProfileId. Jika tidak, tidak ada. | 12/01/2012 | 
|  iam/security-credentials/role-name  | Jika ada peran IAM yang terkait dengan instance, role-name adalah nama peran, dan role-name berisi kredensil keamanan sementara yang terkait dengan peran tersebut (untuk informasi selengkapnya, lihat). [Mengambil kredensial keamanan dari metadata instans](instance-metadata-security-credentials.md) Jika tidak, tidak ada. | 12/01/2012 | 
| identity-credentials/ec2/info | Informasi tentang kredensial di identity-credentials/ec2/security-credentials/ec2-instance. | 23/05/2018 | 
| identity-credentials/ec2/security-credentials/ec2-instance | Kredensil untuk peran identitas instans yang memungkinkan perangkat lunak on-instance mengidentifikasi dirinya AWS untuk mendukung fitur seperti EC2 Instance Connect AWS Systems Manager dan Default Host Management Configuration. Kredensi ini tidak memiliki kebijakan yang dilampirkan, sehingga mereka tidak memiliki izin AWS API tambahan selain mengidentifikasi instance ke fitur tersebut. AWS Untuk informasi selengkapnya, lihat [Peran identitas instans untuk instans Amazon EC2](iam-roles-for-amazon-ec2.md#ec2-instance-identity-roles). | 23/05/2018 | 
| instance-action | Memberi tahu instans bahwa instans harus di-boot ulang sebagai persiapan untuk pemaketan. Nilai yang valid: none \$1 shutdown \$1 bundle-pending. | 01/09/2008 | 
| instance-id | ID instans ini. | 1.0 | 
| instance-life-cycle | Opsi pembelian instans ini. Untuk informasi selengkapnya, lihat [Opsi penagihan dan pembelian Amazon EC2](instance-purchasing-options.md). | 01/10/2019 | 
| instance-type  | Tipe instans. Untuk informasi selengkapnya, lihat [Tipe instans Amazon EC2](instance-types.md). | 29/08/2007 | 
| ipv6  |  IPv6 Alamat instance. Dalam kasus di mana beberapa antarmuka jaringan hadir, ini mengacu pada perangkat eth0 (perangkat yang nomor perangkatnya 0) antarmuka jaringan dan IPv6 alamat pertama yang ditetapkan. Jika tidak ada IPv6 alamat di antarmuka jaringan [0], item ini tidak disetel dan menghasilkan respons HTTP 404. | 2021-01-03 | 
|  kernel-id  | ID kernel yang diluncurkan dengan instans ini, jika ada. | 01/02/2008 | 
|  local-hostname  | Jika ada banyak antarmuka jaringan, ini mengacu pada perangkat eth0 (perangkat yang nomor perangkatnya adalah 0). Jika instans EC2 menggunakan Penamaan berbasis IP (IPBN), ini adalah nama host DNS IPv4 privat dari instans tersebut. Jika instans EC2 menggunakan Penamaan berbasis sumber Daya (RBN), ini adalah RBN. Untuk informasi selengkapnya tentang penamaan IPBN, RBN, dan EC2, lihat [Nama host dan domain instans EC2](ec2-instance-naming.md). | 19/01/2007 | 
|  local-ipv4  |  IPv4 Alamat pribadi dari instance. Jika ada banyak antarmuka jaringan, ini mengacu pada perangkat eth0 (perangkat yang nomor perangkatnya adalah 0). Jika ini adalah instance IPv6 -only, item ini tidak disetel dan menghasilkan respons HTTP 404. | 1.0 | 
|  mac  | Alamat kontrol akses media (MAC) instans. Jika ada banyak antarmuka jaringan, ini mengacu pada perangkat eth0 (perangkat yang nomor perangkatnya adalah 0). | 01/01/2011 | 
| metrics/vhostmd | Tidak lagi tersedia. | 01/05/2011 | 
|  network/interfaces/macs/mac/device-number  | Nomor perangkat unik yang terkait dengan antarmuka itu. Nomor perangkat sesuai dengan nama perangkat; misalnya, device-number pada 2 adalah untuk perangkat eth2. Kategori ini sesuai dengan bidang DeviceIndex dan device-index yang digunakan oleh API Amazon EC2 dan perintah EC2 untuk AWS CLI. | 01-01-2011 | 
|  network/interfaces/macs/mac/interface-id  | ID antarmuka jaringan. | 01-01-2011 | 
|  network/interfaces/macs/mac/ipv4-associations/public-ip  |  IPv4 Alamat pribadi yang terkait dengan setiap alamat IP publik dan ditetapkan ke antarmuka itu. | 01-01-2011 | 
| network/interfaces/macs/mac/ipv6s |  IPv6 Alamat yang ditetapkan ke antarmuka. | 30/06/2016 | 
| network/interfaces/macs/mac/ipv6-prefix |  IPv6 Awalan yang ditetapkan ke antarmuka jaringan. |  | 
|  network/interfaces/macs/mac/local-hostname  |  Nama host IPv4 DNS pribadi dari instance. Jika ada banyak antarmuka jaringan, ini mengacu pada perangkat eth0 (perangkat yang nomor perangkatnya adalah 0). Jika ini adalah instance IPv6 -only, ini adalah nama berbasis sumber daya. Untuk informasi selengkapnya tentang IPBN dan RBN, lihat [Nama host dan domain instans EC2](ec2-instance-naming.md).  | 19/01/2007 | 
|  network/interfaces/macs/mac/local-ipv4s  |  IPv4 Alamat pribadi yang terkait dengan antarmuka. Jika ini adalah antarmuka jaringan IPv6 -only, item ini tidak disetel dan menghasilkan respons HTTP 404. | 01-01-2011 | 
|  network/interfaces/macs/mac/mac  | Alamat MAC instans. | 01/01/2011 | 
|  network/interfaces/macs/mac/network-card  | Indeks kartu jaringan. Beberapa tipe instans mendukung banyak kartu jaringan. | 01/11/2020 | 
| network/interfaces/macs/mac/owner-id  | ID pemilik antarmuka jaringan. Di lingkungan multi-antarmuka, antarmuka dapat dipasang oleh pihak ketiga, seperti Elastic Load Balancing. Lalu lintas pada antarmuka selalu ditagihkan ke pemilik antarmuka. | 01-01-2011 | 
|  network/interfaces/macs/mac/public-hostname  | DNS publik antarmuka (IPv4). Kategori ini hanya ditampilkan jika atribut enableDnsHostnames diatur ke true. Untuk informasi selengkapnya, lihat [Atribut DNS untuk VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) dalam Panduan Pengguna Amazon VPC. Jika instance hanya memiliki IPv6 alamat publik dan tidak ada IPv4 alamat publik, item ini tidak disetel dan menghasilkan respons HTTP 404. |  01-01-2011 | 
|  network/interfaces/macs/mac/public-ipv4s  | Alamat IP publik atau alamat IP Elastis yang terkait dengan antarmuka. Mungkin ada beberapa IPv4 alamat pada sebuah instance.  | 01-01-2011 | 
| network/interfaces/macs/mac/security-groups  | Grup keamanan yang memiliki antarmuka jaringan. | 01-01-2011 | 
|  network/interfaces/macs/mac/security-group-ids  | Grup keamanan tempat antarmuka jaringan berada. IDs  | 01-01-2011 | 
|  network/interfaces/macs/mac/subnet-id  | ID subnet tempat antarmuka berada. | 01-01-2011 | 
|  network/interfaces/macs/mac/subnet-ipv4-cidr-block  | Blok IPv4 CIDR dari subnet tempat antarmuka berada. | 01-01-2011 | 
| network/interfaces/macs/mac/subnet-ipv6-cidr-blocks  | Blok IPv6 CIDR dari subnet tempat antarmuka berada. | 30/06/2016  | 
|  network/interfaces/macs/mac/vpc-id  | ID VPC tempat antarmuka berada. | 01-01-2011 | 
| network/interfaces/macs/mac/vpc-ipv4-cidr-block | Blok IPv4 CIDR utama dari VPC. | 01-01-2011 | 
| network/interfaces/macs/mac/vpc-ipv4-cidr-blocks | Blok IPv4 CIDR untuk VPC. | 30/06/2016  | 
| network/interfaces/macs/mac/vpc-ipv6-cidr-blocks | Blok IPv6 CIDR dari VPC tempat antarmuka berada. | 30/06/2016  | 
|  placement/availability-zone | Zona Ketersediaan tempat instans diluncurkan. | 01/02/2008 | 
|  placement/availability-zone-id | ID Zona Ketersediaan statis tempat instans diluncurkan. ID Zona Ketersediaan konsisten di semua akun. Namun, ini mungkin berbeda dari Zona Ketersediaan, yang dapat berbeda tergantung pada akun. | 01/10/2019 | 
|  placement/group-name  | Nama grup penempatan tempat instans diluncurkan. | 24/08/2020 | 
|  placement/host-id  | ID host tempat instans diluncurkan. Hanya berlaku untuk Host Khusus. | 24/08/2020 | 
|  placement/partition-number  | Jumlah partisi tempat instans diluncurkan. | 24/08/2020 | 
|  placement/region  |  AWS Wilayah di mana instance diluncurkan. | 24/08/2020 | 
|  product-codes  | AWS Marketplace kode produk yang terkait dengan instance, jika ada.  | 01/03/2007 | 
|  public-hostname  | DNS publik instans (IPv4). Kategori ini hanya ditampilkan jika atribut enableDnsHostnames diatur ke true. Untuk informasi selengkapnya, lihat [Atribut DNS untuk VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) dalam Panduan Pengguna Amazon VPC. Jika instance hanya memiliki IPv6 alamat publik dan tidak ada IPv4 alamat publik, item ini tidak disetel dan menghasilkan respons HTTP 404. | 19/01/2007 | 
|  public-ipv4  |  IPv4 Alamat publik. Jika alamat IP Elastis dikaitkan dengan instans, nilai yang ditampilkan adalah alamat IP Elastis. | 19/01/2007 | 
|  public-keys/0/openssh-key  | Kunci publik. Hanya tersedia jika disediakan pada waktu peluncuran instans. | 1.0 | 
|  ramdisk-id  | ID dari RAM disk ditentukan pada waktu peluncuran, jika ada. | 10/10/2007 | 
|  reservation-id  | ID reservasi. | 1.0 | 
|  security-groups  |  Nama-nama grup keamanan yang diterapkan ke instans. Setelah peluncuran, Anda dapat mengubah grup keamanan instans. Perubahan tersebut tercermin di sini dan dinetwork/interfaces/macs/**mac**/security-groups.  | 1.0 | 
|  services/domain  |  Domain untuk AWS sumber daya untuk Wilayah.  | 25/02/2014 | 
|  services/partition  |  Partisi tempat sumber daya berada. Untuk AWS Wilayah standar, partisi adalah`aws`. Jika Anda memiliki sumber daya di partisi lain, maka partisi-nya adalah `aws-partitionname`. Contohnya, partisi untuk sumber daya di Wilayah Tiongkok (Beijing) adalah `aws-cn`.  | 20/10/2015 | 
|  spot/instance-action  |  Tindakan (hibernasi, berhenti, atau berakhir) dan perkiraan waktu, dalam UTC, saat tindakan akan terjadi. Item ini ada hanya jika Instans Spot telah ditandai untuk hibernasi, berhenti, atau berakhir. Untuk informasi selengkapnya, lihat [instance-action](spot-instance-termination-notices.md#instance-action-metadata).  | 15/11/2016 | 
|  spot/termination-time  |  Perkiraan waktu, dalam UTC, sistem operasi untuk Instans Spot Anda akan menerima sinyal shutdown. Item ini ada dan berisi nilai waktu (misalnya, 2015-01-05T18: 02: 00Z) hanya jika Instans Spot telah ditandai untuk penghentian oleh Amazon EC2. Item waktu pengakhiran tidak diatur ke suatu waktu jika Anda sendiri mengakhiri Instans Spot. Untuk informasi selengkapnya, lihat [termination-time](spot-instance-termination-notices.md#termination-time-metadata).  | 05/11/2014 | 
| system | Jenis virtualisasi yang mendasari (hypervisor) dari instance. | 2022-09-24 | 
| tags/instance | Tanda instans yang terkait dengan instans. Hanya tersedia jika Anda secara eksplisit mengizinkan akses ke tanda dalam metadata instans. Untuk informasi selengkapnya, lihat [Aktifkan akses ke tag dalam metadata contoh](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS). | 2021-03-23 | 

## Kategori data dinamis
<a name="dynamic-data-categories"></a>

Tabel berikut mencantumkan kategori data dinamis.


| Kategori | Deskripsi | Versi ketika kategori dirilis | 
| --- | --- | --- | 
| fws/instance-monitoring  | Nilai yang menunjukkan apakah pelanggan telah mengaktifkan pemantauan satu menit secara terperinci CloudWatch. Nilai yang valid: enabled \$1 disabled | 04/04/2009 | 
| instance-identity/document  | JSON berisi atribut instans, seperti instance-id, alamat IP privat, dll. Lihat [Dokumen identitas instans untuk EC2 instans Amazon](instance-identity-documents.md).  | 04/04/2009 | 
| instance-identity/pkcs7  | Digunakan untuk memverifikasi keaslian dokumen dan konten terhadap tanda tangan. Lihat [Dokumen identitas instans untuk EC2 instans Amazon](instance-identity-documents.md).  | 04/04/2009 | 
| instance-identity/signature  | Data yang dapat digunakan pihak lain untuk memverifikasi asal dan keasliannya. Lihat [Dokumen identitas instans untuk EC2 instans Amazon](instance-identity-documents.md).  | 04/04/2009 | 

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

# Konfigurasikan opsi Layanan Metadata Instance
<a name="configuring-instance-metadata-options"></a>

Layanan Metadata Instance (IMDS) berjalan secara lokal pada setiap instans EC2. *Opsi metadata instance* mengacu pada sekumpulan konfigurasi yang mengontrol aksesibilitas dan perilaku IMDS pada instans EC2.

Anda dapat mengonfigurasi opsi metadata instance berikut pada setiap instance:

**Layanan metadata instans (IMDS**): \$1 `enabled` `disabled`  
Anda dapat mengaktifkan atau menonaktifkan IMDS pada sebuah instance. Saat dinonaktifkan, Anda atau kode apa pun tidak akan dapat mengakses metadata instance pada instance.  
IMDS memiliki dua titik akhir pada sebuah instance: IPv4 (`169.254.169.254`) dan IPv6 (`[fd00:ec2::254]`). Saat Anda mengaktifkan IMDS, IPv4 titik akhir diaktifkan secara otomatis. Jika Anda ingin mengaktifkan IPv6 titik akhir, Anda perlu melakukannya secara eksplisit.

** IPv6 Titik akhir IMDS**: \$1 `enabled` `disabled`  
Anda dapat secara eksplisit mengaktifkan titik akhir IPv6 IMDS pada sebuah instance. Saat IPv6 titik akhir diaktifkan, IPv4 titik akhir tetap diaktifkan. IPv6Titik akhir hanya didukung 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 

**Versi metadata**: \$1 `IMDSv1 or IMDSv2 (token optional)` `IMDSv2 only (token required)`  
Saat meminta metadata instance, IMDSv2 panggilan memerlukan token. IMDSv1panggilan tidak memerlukan token. Anda dapat mengonfigurasi instance untuk mengizinkan salah satu IMDSv1 atau IMDSv2 panggilan (di mana token bersifat opsional), atau hanya mengizinkan IMDSv2 panggilan (di mana token diperlukan).

Batas **hop respons metadata**: — `1` `64`  
Batas hop adalah jumlah hop jaringan yang diizinkan untuk dilakukan oleh respons PUT. Anda dapat mengatur batas hop ke minimum `1` dan maksimum`64`. Dalam lingkungan kontainer, batas lompatan `1` dapat menyebabkan masalah. Untuk informasi tentang cara mengurangi masalah ini, lihat informasi tentang lingkungan kontainer di bawah. [Pertimbangan akses metadata instance](instancedata-data-retrieval.md#imds-considerations)

**Akses ke tag dalam metadata contoh**: \$1 `enabled` `disabled`  
Anda dapat mengaktifkan atau menonaktifkan akses ke tag instans dari metadata instans. Untuk informasi selengkapnya, lihat [Lihat tag untuk instans EC2 Anda menggunakan metadata instans](work-with-tags-in-IMDS.md).

Untuk melihat konfigurasi instans saat ini, lihat[Mengueri opsi metadata instans untuk instans yang ada](instancedata-data-retrieval.md#query-IMDS-existing-instances).

## Tempat mengkonfigurasi opsi metadata instance
<a name="where-to-configure-instance-metadata-options"></a>

Opsi metadata instans dapat dikonfigurasi pada tingkat yang berbeda, sebagai berikut:
+ **Akun** — Anda dapat menetapkan nilai default untuk opsi metadata instans di tingkat akun untuk masing-masing. Wilayah AWS Saat instance diluncurkan, opsi metadata instance secara otomatis disetel ke nilai tingkat akun. Anda dapat mengubah nilai-nilai ini saat peluncuran. Nilai default tingkat akun tidak memengaruhi instance yang ada.
+ **AMI** - Anda dapat mengatur `imds-support` parameter `v2.0` saat Anda mendaftar atau memodifikasi AMI. Ketika sebuah instance diluncurkan dengan AMI ini, versi metadata instance secara otomatis diatur ke IMDSv2 dan batas hop diatur ke 2.
+ **Instance** - Anda dapat mengubah semua opsi metadata instance pada instance saat peluncuran, mengesampingkan pengaturan default. Anda juga dapat mengubah opsi metadata instans setelah diluncurkan pada instance yang sedang berjalan atau dihentikan. Perhatikan bahwa perubahan mungkin dibatasi oleh kebijakan IAM atau SCP.

Untuk informasi selengkapnya, lihat [Mengonfigurasi opsi metadata instans untuk instans baru](configuring-IMDS-new-instances.md) dan [Mengonfigurasi opsi metadata instans untuk instans yang ada](configuring-IMDS-existing-instances.md).

## Urutan prioritas misalnya opsi metadata
<a name="instance-metadata-options-order-of-precedence"></a>

Nilai untuk setiap opsi metadata instance ditentukan pada peluncuran instance, mengikuti urutan prioritas hierarkis. Hirarki, dengan prioritas tertinggi di atas, adalah sebagai berikut:
+ **Prioritas 1: Konfigurasi instans saat peluncuran** - Nilai dapat ditentukan baik dalam template peluncuran atau dalam konfigurasi instance. Nilai apa pun yang ditentukan di sini mengesampingkan nilai yang ditentukan di tingkat akun atau di AMI.
+ **Prioritas 2: Pengaturan akun** - Jika nilai tidak ditentukan pada peluncuran instance, maka itu ditentukan oleh pengaturan tingkat akun (yang ditetapkan untuk masing-masing). Wilayah AWS Pengaturan tingkat akun menyertakan nilai untuk setiap opsi metadata, atau menunjukkan tidak ada preferensi sama sekali.
+ **Prioritas 3: Konfigurasi AMI** — Jika nilai tidak ditentukan pada peluncuran instance atau pada tingkat akun, maka nilai tersebut ditentukan oleh konfigurasi AMI. Ini hanya berlaku untuk `HttpTokens` dan`HttpPutResponseHopLimit`.

Setiap opsi metadata dievaluasi secara terpisah. Instance dapat dikonfigurasi dengan campuran konfigurasi instans langsung, default tingkat akun, dan konfigurasi dari AMI.

Anda dapat mengubah nilai opsi metadata apa pun setelah diluncurkan pada instance yang berjalan atau dihentikan, kecuali perubahan dibatasi oleh kebijakan IAM atau SCP.

**catatan**  
Pengaturan IMDSv2 penegakan tingkat akun dievaluasi setelah urutan prioritas telah menentukan pengaturan IMDS instans. Ketika IMDSv2 penegakan diaktifkan, instance yang diaktifkan dengan IMDSv1 akan gagal. Untuk informasi lebih lanjut tentang penegakan hukum, lihat[Menegakkan IMDSv2 di tingkat akun](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level).

**Awas**  
Jika IMDSv2 penegakan diaktifkan dan `httpTokens` belum disetel ke `required` konfigurasi instans saat peluncuran, pengaturan akun, atau konfigurasi AMI, peluncuran Anda akan gagal.

**Contoh 1 - Tentukan nilai untuk opsi metadata**

Dalam contoh ini, instans EC2 diluncurkan ke Wilayah di mana `HttpPutResponseHopLimit` diatur ke `1` tingkat akun. AMI yang ditentukan telah `ImdsSupport` disetel ke`v2.0`. Tidak ada opsi metadata yang ditentukan langsung pada instance saat peluncuran. Instans diluncurkan dengan opsi metadata berikut:

```
"MetadataOptions": {
    ...
    "HttpTokens": "required",
    "HttpPutResponseHopLimit": 1,
    ...
```

Nilai-nilai ini ditentukan sebagai berikut:
+ **Tidak ada opsi metadata yang ditentukan saat peluncuran:** Selama peluncuran instance, nilai spesifik untuk opsi metadata tidak disediakan baik dalam parameter peluncuran instance atau dalam templat peluncuran.
+ **Pengaturan akun diutamakan berikutnya:** Dengan tidak adanya nilai spesifik yang ditentukan saat peluncuran, pengaturan di tingkat akun dalam Wilayah diutamakan. Ini berarti bahwa nilai default yang dikonfigurasi pada tingkat akun diterapkan. Dalam hal ini, `HttpPutResponseHopLimit` diatur ke`1`.
+ **Pengaturan AMI diutamakan terakhir:** Jika tidak ada nilai tertentu yang ditentukan saat peluncuran atau pada tingkat akun untuk `HttpTokens` (versi metadata instance), pengaturan AMI diterapkan. Dalam hal ini, pengaturan AMI `ImdsSupport: v2.0` menentukan yang `HttpTokens` disetel ke`required`. Perhatikan bahwa meskipun pengaturan AMI `ImdsSupport: v2.0` dirancang untuk disetel`HttpPutResponseHopLimit: 2`, pengaturan AMI diganti oleh pengaturan tingkat akun`HttpPutResponseHopLimit: 1`, yang memiliki prioritas lebih tinggi.

**Contoh 2 - Tentukan nilai untuk opsi metadata**

Dalam contoh ini, instans EC2 diluncurkan dengan pengaturan yang sama seperti pada Contoh 1 sebelumnya, tetapi dengan `HttpTokens` disetel ke `optional` langsung pada instance saat peluncuran. Instans diluncurkan dengan opsi metadata berikut:

```
"MetadataOptions": {
    ...
    "HttpTokens": "optional",
    "HttpPutResponseHopLimit": 1,
    ...
```

Nilai untuk `HttpPutResponseHopLimit` ditentukan dengan cara yang sama seperti pada Contoh 1. Namun, nilai untuk `HttpTokens` ditentukan sebagai berikut: Opsi metadata yang dikonfigurasi pada instance saat peluncuran diutamakan terlebih dahulu. Meskipun AMI dikonfigurasi dengan `ImdsSupport: v2.0` (dengan kata lain, `HttpTokens` disetel ke`required`), nilai yang ditentukan pada instance saat peluncuran (`HttpTokens`disetel ke`optional`) diutamakan.

**Contoh 3 - Tentukan nilai untuk opsi metadata dengan diaktifkan HttpTokensEnforced **

Dalam contoh ini, akun di Wilayah memiliki `HttpTokens = required` dan`HttpTokensEnforced = enabled`.

Pertimbangkan upaya peluncuran instans EC2 berikut:
+ Upaya peluncuran dengan `HttpTokens` set to `optional` — Peluncuran gagal karena penegakan tingkat akun diaktifkan (`HttpTokensEnforced = enabled`) dan parameter peluncuran lebih diutamakan daripada default akun.
+ Upaya peluncuran dengan `HttpTokens` set to `required` — Peluncuran berhasil karena sesuai dengan penegakan tingkat akun. 
+ Upaya peluncuran tanpa `HttpTokens` nilai yang ditentukan - Peluncuran berhasil karena nilai defaultnya `required` berdasarkan pengaturan akun. 

### Mengatur versi metadata instance
<a name="metadata-version-order-of-precedence"></a>

Saat instance diluncurkan, nilai untuk *versi metadata* instance adalah **IMDSv1 atau IMDSv2 (token optional) (`httpTokens=optional`)** atau **IMDSv2only (token required) (`httpTokens=required`)**.

Saat peluncuran instance, Anda dapat menentukan nilai untuk versi metadata secara manual, atau menggunakan nilai default. Jika Anda menentukan nilainya secara manual, itu akan mengganti default apa pun. Jika Anda memilih untuk tidak menentukan nilai secara manual, itu akan ditentukan oleh kombinasi pengaturan default.

Diagram alur berikut menunjukkan bagaimana versi metadata untuk instans saat peluncuran ditentukan oleh pengaturan pada tingkat konfigurasi yang berbeda dan di mana penegakan dievaluasi. Tabel berikut menyediakan pengaturan spesifik di setiap level.

![\[Diagram alur yang menunjukkan titik evaluasi untuk versi metadata instans dan penegakan. IMDSv2\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/images/imds-defaults-launch-flow.png)


Tabel menunjukkan bagaimana versi metadata untuk sebuah instance saat peluncuran (ditunjukkan oleh **konfigurasi instans yang dihasilkan** di kolom 4) ditentukan oleh pengaturan pada tingkat konfigurasi yang berbeda. Urutan prioritas adalah dari kiri ke kanan, di mana kolom pertama diutamakan, sebagai berikut:
+ Kolom 1: **Parameter peluncuran** - Merupakan pengaturan pada instance yang Anda tentukan secara manual saat peluncuran.
+ Kolom 2: **Tingkat akun default** - Merupakan pengaturan untuk akun.
+ Kolom 3: **AMI default** - Merupakan pengaturan pada AMI.


| Parameter peluncuran | Default tingkat akun | AMI standar | Konfigurasi instance yang dihasilkan | 
| --- | --- | --- | --- | 
| Hanya V2 (token diperlukan) | Tidak ada preferensi | Hanya V2 | Hanya V2 | 
| Hanya V2 (token diperlukan) | Hanya V2 | Hanya V2 | Hanya V2 | 
| Hanya V2 (token diperlukan) | V1 atau V2 | Hanya V2 | Hanya V2 | 
| V1 atau V2 (token opsional) | Tidak ada preferensi | Hanya V2 | V1 atau V2 | 
| V1 atau V2 (token opsional) | Hanya V2 | Hanya V2 | V1 atau V2 | 
| V1 atau V2 (token opsional) | V1 atau V2 | Hanya V2 | V1 atau V2 | 
| Tidak diatur | Tidak ada preferensi | Hanya V2 | Hanya V2 | 
| Tidak diatur | Hanya V2 | Hanya V2 | Hanya V2 | 
| Tidak diatur | V1 atau V2 | Hanya V2 | V1 atau V2 | 
| Hanya V2 (token diperlukan) | Tidak ada preferensi | null | Hanya V2 | 
| Hanya V2 (token diperlukan) | Hanya V2 | null | Hanya V2 | 
| Hanya V2 (token diperlukan) | V1 atau V2 | null | Hanya V2 | 
| V1 atau V2 (token opsional) | Tidak ada preferensi | null | V1 atau V2 | 
| V1 atau V2 (token opsional) | Hanya V2 | null | V1 atau V2 | 
| V1 atau V2 (token opsional) | V1 atau V2 | null | V1 atau V2 | 
| Tidak diatur | Tidak ada preferensi | null | V1 atau V2 | 
| Tidak diatur | Hanya V2 | null | Hanya V2 | 
| Tidak diatur | V1 atau V2 | null | V1 atau V2 | 

## Gunakan kunci kondisi IAM untuk membatasi opsi metadata instans
<a name="iam-condition-keys-and-imds"></a>

Anda dapat menggunakan kunci kondisi IAM dalam kebijakan IAM atau SCP sebagai berikut:
+ Izinkan instance untuk diluncurkan hanya jika dikonfigurasi untuk memerlukan penggunaan IMDSv2
+ Batasi jumlah hop yang diizinkan
+ Nonaktifkan akses untuk metadata instans

**Topics**
+ [Tempat mengkonfigurasi opsi metadata instance](#where-to-configure-instance-metadata-options)
+ [Urutan prioritas misalnya opsi metadata](#instance-metadata-options-order-of-precedence)
+ [Gunakan kunci kondisi IAM untuk membatasi opsi metadata instans](#iam-condition-keys-and-imds)
+ [Mengonfigurasi opsi metadata instans untuk instans baru](configuring-IMDS-new-instances.md)
+ [Mengonfigurasi opsi metadata instans untuk instans yang ada](configuring-IMDS-existing-instances.md)

**catatan**  
Anda harus melanjutkan dengan hati-hati dan melakukan pengujian yang cermat sebelum membuat perubahan apa pun. Perhatikan hal-hal berikut ini:  
Jika Anda memaksakan penggunaan IMDSv2, aplikasi atau agen yang menggunakan IMDSv1 misalnya akses metadata akan rusak.
Jika Anda menonaktifkan semua akses ke metadata instans, aplikasi atau agen yang mengandalkan akses metadata instans ke fungsi akan rusak.
Untuk IMDSv2, Anda harus menggunakan `/latest/api/token` saat mengambil token.
(Hanya Windows) Jika PowerShell versi Anda lebih awal dari 4.0, Anda harus [memperbarui ke Windows Management Framework 4.0](https://devblogs.microsoft.com/powershell/windows-management-framework-wmf-4-0-update-now-available-for-windows-server-2012-windows-server-2008-r2-sp1-and-windows-7-sp1/) untuk meminta penggunaan IMDSv2.

# Mengonfigurasi opsi metadata instans untuk instans baru
<a name="configuring-IMDS-new-instances"></a>

Anda dapat mengonfigurasi opsi metadata instance berikut untuk instance baru.

**Topics**
+ [Membutuhkan penggunaan IMDSv2](#configure-IMDS-new-instances)
+ [Aktifkan IMDS IPv4 dan titik akhir IPv6](#configure-IMDS-new-instances-ipv4-ipv6-endpoints)
+ [Nonaktifkan akses untuk metadata instans](#configure-IMDS-new-instances--turn-off-instance-metadata)
+ [Mengizinkan akses ke tanda dalam metadata instans](#configure-IMDS-new-instances-tags-in-instance-metadata)

**catatan**  
Pengaturan untuk opsi ini dikonfigurasi di tingkat akun, baik secara langsung di akun atau dengan menggunakan kebijakan deklaratif. Mereka harus dikonfigurasi di setiap Wilayah AWS tempat Anda ingin mengkonfigurasi opsi metadata instance. Menggunakan kebijakan deklaratif memungkinkan Anda menerapkan pengaturan di beberapa Wilayah secara bersamaan, serta di beberapa akun secara bersamaan. Saat kebijakan deklaratif sedang digunakan, Anda tidak dapat mengubah pengaturan secara langsung di dalam akun. Topik ini menjelaskan cara mengonfigurasi pengaturan secara langsung di dalam akun. Untuk informasi tentang penggunaan kebijakan deklaratif, lihat [Kebijakan deklaratif](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html) di *AWS Organizations Panduan Pengguna*.

## Membutuhkan penggunaan IMDSv2
<a name="configure-IMDS-new-instances"></a>

Anda dapat menggunakan metode berikut untuk meminta penggunaan IMDSv2 pada instance baru Anda.

**Topics**
+ [Tetapkan IMDSv2 sebagai default untuk akun](#set-imdsv2-account-defaults)
+ [Menegakkan IMDSv2 di tingkat akun](#enforce-imdsv2-at-the-account-level)
+ [Konfigurasikan instans saat peluncuran](#configure-IMDS-new-instances-instance-settings)
+ [Konfigurasikan AMI](#configure-IMDS-new-instances-ami-configuration)
+ [Gunakan kebijakan IAM](#configure-IMDS-new-instances-iam-policy)

### Tetapkan IMDSv2 sebagai default untuk akun
<a name="set-imdsv2-account-defaults"></a>

Anda dapat mengatur versi default untuk layanan metadata instans (IMDS) di tingkat akun untuk masing-masing. Wilayah AWS Ini berarti bahwa ketika Anda meluncurkan instance *baru*, versi metadata instans secara otomatis disetel ke default tingkat akun. Namun, Anda dapat mengganti nilai secara manual saat peluncuran atau setelah peluncuran. Untuk informasi selengkapnya tentang bagaimana pengaturan tingkat akun dan penggantian manual memengaruhi instance, lihat. [Urutan prioritas misalnya opsi metadata](configuring-instance-metadata-options.md#instance-metadata-options-order-of-precedence)

**catatan**  
Menyetel default tingkat akun tidak mengatur ulang instance *yang ada*. Misalnya, jika Anda menyetel default tingkat akun ke IMDSv2, semua instance yang ada yang disetel ke tidak IMDSv1 terpengaruh. Jika Anda ingin mengubah nilai pada instance yang ada, Anda harus secara manual mengubah nilai pada instance itu sendiri.

Anda dapat mengatur default akun untuk versi metadata instans IMDSv2 agar semua instance *baru* di akun diluncurkan dengan IMDSv2 required, dan IMDSv1 akan dinonaktifkan. Dengan default akun ini, saat Anda meluncurkan instance, berikut ini adalah nilai default untuk instance:
+ **Konsol: **Versi metadata** diatur ke **V2 saja (diperlukan token)** dan **batas hop respons Metadata** diatur ke 2.**
+ AWS CLI: `HttpTokens` diatur ke `required` dan `HttpPutResponseHopLimit` diatur ke`2`. 

**catatan**  
Sebelum menyetel default akun IMDSv2, pastikan instans Anda tidak bergantung pada IMDSv1. Untuk informasi selengkapnya, lihat [Jalur yang direkomendasikan untuk membutuhkan IMDSv2](instance-metadata-transition-to-version-2.md#recommended-path-for-requiring-imdsv2).

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

**Untuk menetapkan IMDSv2 sebagai default untuk akun untuk Wilayah yang ditentukan**

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

1. Untuk mengubah Wilayah AWS, gunakan pemilih Wilayah di sudut kanan atas halaman.

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

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

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

1. Pada halaman **Kelola default IMDS**, lakukan hal berikut:

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

   1. Untuk **Versi metadata**, pilih **V2 saja (token diperlukan)**.

   1. Untuk **batas hop respons Metadata**, tentukan **2** jika instance Anda akan meng-host container. Jika tidak, pilih **Tidak ada preferensi**. **Ketika tidak ada preferensi yang ditentukan, saat peluncuran, nilai default ke **2** jika AMI memiliki pengaturan`ImdsSupport: v2.0`; jika tidak maka defaultnya ke 1.**

   1. Pilih **Perbarui**.

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

**Untuk menetapkan IMDSv2 sebagai default untuk akun untuk Wilayah yang ditentukan**  
Gunakan [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html)perintah dan tentukan Wilayah untuk memodifikasi pengaturan tingkat akun IMDS. Sertakan `--http-tokens` set ke `required` dan `--http-put-response-hop-limit` atur ke `2` jika instance Anda akan meng-host kontainer. Jika tidak, tentukan `-1` untuk menunjukkan tidak ada preferensi. Ketika `-1` (tidak ada preferensi) ditentukan, saat peluncuran, nilai default jika AMI memiliki pengaturan`ImdsSupport: v2.0`; jika tidak maka default ke`2`. `1`

```
aws ec2 modify-instance-metadata-defaults \
    --region us-east-1 \
    --http-tokens required \
    --http-put-response-hop-limit 2
```

Berikut ini adalah output contoh.

```
{
    "Return": true
}
```

**Untuk melihat pengaturan akun default untuk opsi metadata instance untuk Wilayah yang ditentukan**  
Gunakan [get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html)perintah dan tentukan Wilayah.

```
aws ec2 get-instance-metadata-defaults --region us-east-1
```

Berikut ini adalah output contoh.

```
{
    "AccountLevel": {
        "HttpTokens": "required",
        "HttpPutResponseHopLimit": 2
    },
    "ManagedBy": "account"
}
```

`ManagedBy`Bidang menunjukkan entitas yang mengkonfigurasi pengaturan. Dalam contoh ini, `account` menunjukkan bahwa pengaturan dikonfigurasi langsung di akun. Nilai `declarative-policy` berarti pengaturan dikonfigurasi oleh kebijakan deklaratif. Untuk informasi selengkapnya, lihat [Kebijakan deklaratif](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html) di *Panduan AWS Organizations Pengguna*.

**Untuk menetapkan IMDSv2 sebagai default untuk akun untuk semua Wilayah**  
Gunakan [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html)perintah untuk mengubah pengaturan tingkat akun IMDS untuk semua Wilayah. Sertakan `--http-tokens` set ke `required` dan `--http-put-response-hop-limit` atur ke `2` jika instance Anda akan meng-host kontainer. Jika tidak, tentukan `-1` untuk menunjukkan tidak ada preferensi. Ketika `-1` (tidak ada preferensi) ditentukan, saat peluncuran, nilai default jika AMI memiliki pengaturan`ImdsSupport: v2.0`; jika tidak maka default ke`2`. `1`

```
echo -e "Region          \t Modified" ; \
echo -e "--------------  \t ---------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 modify-instance-metadata-defaults \
            --region $region \
            --http-tokens required \
            --http-put-response-hop-limit 2 \
            --output text)
        echo -e "$region        \t $output"
    );
done
```

Berikut ini adalah output contoh.

```
Region                   Modified
--------------           ---------
ap-south-1               True
eu-north-1               True
eu-west-3                True
...
```

**Untuk melihat pengaturan akun default untuk opsi metadata instans untuk semua Wilayah**  
Gunakan perintah [get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html).

```
echo -e "Region   \t Level          Hops    HttpTokens" ; \
echo -e "-------------- \t ------------   ----    ----------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 get-instance-metadata-defaults \
            --region $region \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

Berikut ini adalah output contoh.

```
Region           Level          Hops    HttpTokens
--------------   ------------   ----    ----------
ap-south-1       ACCOUNTLEVEL   2       required
eu-north-1       ACCOUNTLEVEL   2       required
eu-west-3        ACCOUNTLEVEL   2       required
...
```

------
#### [ PowerShell ]

**Untuk menetapkan IMDSv2 sebagai default untuk akun untuk Wilayah yang ditentukan**  
Gunakan [Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html)cmdlet dan tentukan Wilayah untuk mengubah pengaturan tingkat akun IMDS. Sertakan `-HttpToken` set ke `required` dan `-HttpPutResponseHopLimit` atur ke `2` jika instance Anda akan meng-host kontainer. Jika tidak, tentukan `-1` untuk menunjukkan tidak ada preferensi. Ketika `-1` (tidak ada preferensi) ditentukan, saat peluncuran, nilai default jika AMI memiliki pengaturan`ImdsSupport: v2.0`; jika tidak maka default ke`2`. `1`

```
Edit-EC2InstanceMetadataDefault `
    -Region us-east-1 `
    -HttpToken required `
    -HttpPutResponseHopLimit 2
```

Berikut ini adalah output contoh.

```
True
```

**Untuk melihat pengaturan akun default untuk opsi metadata instance untuk Wilayah yang ditentukan**  
Gunakan [Get-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceMetadataDefault.html)cmdlet dan tentukan Region.

```
Get-EC2InstanceMetadataDefault -Region us-east-1 | Format-List
```

Berikut ini adalah output contoh.

```
HttpEndpoint            : 
HttpPutResponseHopLimit : 2
HttpTokens              : required
InstanceMetadataTags    :
```

**Untuk menetapkan IMDSv2 sebagai default untuk akun untuk semua Wilayah**  
Gunakan [Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html)cmdlet untuk mengubah pengaturan level akun IMDS untuk semua Wilayah. Sertakan `-HttpToken` set ke `required` dan `-HttpPutResponseHopLimit` atur ke `2` jika instance Anda akan meng-host kontainer. Jika tidak, tentukan `-1` untuk menunjukkan tidak ada preferensi. Ketika `-1` (tidak ada preferensi) ditentukan, saat peluncuran, nilai default jika AMI memiliki pengaturan`ImdsSupport: v2.0`; jika tidak maka default ke`2`. `1`

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region   = $_
        Modified = (Edit-EC2InstanceMetadataDefault `
                -Region $_ `
                -HttpToken required `
                -HttpPutResponseHopLimit 2)
    } 
} | `
Format-Table Region, Modified -AutoSize
```

Output yang diharapkan

```
Region         Modified
------         --------
ap-south-1         True
eu-north-1         True
eu-west-3          True
...
```

**Untuk melihat pengaturan akun default untuk opsi metadata instans untuk semua Wilayah**  
Gunakan [Get-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceMetadataDefault.html)cmdlet.

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region = $_
        HttpPutResponseHopLimit = (Get-EC2InstanceMetadataDefault -Region $_).HttpPutResponseHopLimit
        HttpTokens              = (Get-EC2InstanceMetadataDefault -Region $_).HttpTokens
    }
} | `
Format-Table -AutoSize
```

Contoh Output

```
Region         HttpPutResponseHopLimit HttpTokens
------         ----------------------- ----------
ap-south-1                           2 required
eu-north-1                           2 required
eu-west-3                            2 required                    
...
```

------

### Menegakkan IMDSv2 di tingkat akun
<a name="enforce-imdsv2-at-the-account-level"></a>

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.

**catatan**  
Sebelum mengaktifkan IMDSv2 penegakan hukum di tingkat akun, pastikan aplikasi dan AMIs dukungan IMDSv2 Anda. Untuk informasi selengkapnya, lihat [Jalur yang direkomendasikan untuk membutuhkan IMDSv2](instance-metadata-transition-to-version-2.md#recommended-path-for-requiring-imdsv2). 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).

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

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

**IMDSv2 Untuk menegakkan akun di Wilayah yang ditentukan**

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

1. Untuk mengubah Wilayah AWS, gunakan pemilih Wilayah di sudut kanan atas halaman.

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

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

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

1. Pada halaman **Kelola default IMDS**, lakukan hal berikut:

   1. Untuk **Versi metadata**, pilih **V2 saja (token diperlukan)**.

   1. Untuk **Menegakkan IMDSv2**, pilih **Diaktifkan**.

   1. Pilih **Perbarui**.

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

**IMDSv2 Untuk menegakkan akun di Wilayah yang ditentukan**  
 Gunakan [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html)perintah dan tentukan Wilayah yang akan ditegakkan IMDSv2. 

```
aws ec2 modify-instance-metadata-defaults \
    --region us-east-1 \
    --http-tokens required \
    --http-tokens-enforced enabled
```

Berikut ini adalah output contoh.

```
{
"Return": true
}
```

**Untuk melihat pengaturan IMDSv2 penegakan untuk akun di Wilayah tertentu**  
Gunakan [get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html)perintah dan tentukan Wilayah.

```
aws ec2 get-instance-metadata-defaults --region us-east-1
```

Berikut ini adalah output contoh.

```
{
    "AccountLevel": {
        "HttpTokens": "required",
        "HttpTokensEnforced": "enabled"
    },
    "ManagedBy": "account"
}
```

`ManagedBy`Bidang menunjukkan entitas yang mengkonfigurasi pengaturan. Dalam contoh ini, `account` menunjukkan bahwa pengaturan dikonfigurasi langsung di akun. Nilai `declarative-policy` berarti pengaturan dikonfigurasi oleh kebijakan deklaratif. Untuk informasi selengkapnya, lihat [Kebijakan deklaratif](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html) di *Panduan Pengguna AWS Organizations*.

**Untuk menegakkan IMDSv2 akun untuk semua Wilayah**  
Gunakan [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html)perintah untuk menegakkan IMDSv2 di semua Wilayah.

```
echo -e "Region          \t Modified" ; \
echo -e "--------------  \t ---------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 modify-instance-metadata-defaults \
            --region $region \
            --http-tokens-enforced enabled \
            --output text)
        echo -e "$region        \t $output"
    );
done
```

Berikut ini adalah output contoh.

```
Region                   Modified
--------------           ---------
ap-south-1               True
eu-north-1               True
eu-west-3                True
...
```

**Untuk melihat pengaturan IMDSv2 penegakan untuk akun di semua Wilayah**  
Gunakan perintah [get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html).

```
echo -e "Region   \t Level           HttpTokensEnforced" ; \
echo -e "-------------- \t ------------   ----------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 get-instance-metadata-defaults \
            --region $region \
            --query 'AccountLevel.HttpTokensEnforced' \           
            --output text)
        echo -e "$region \t ACCOUNTLEVEL $output" 
    );
done
```

Berikut ini adalah output contoh.

```
Region           Level          HttpTokensEnforced
--------------   ------------   ------------------
ap-south-1       ACCOUNTLEVEL   enabled
eu-north-1       ACCOUNTLEVEL   enabled
eu-west-3        ACCOUNTLEVEL   enabled
...
```

------
#### [ PowerShell ]

**IMDSv2 Untuk menegakkan akun di Wilayah yang ditentukan**  
Gunakan [Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html)cmdlet dan tentukan Wilayah yang akan ditegakkan. IMDSv2 

```
Edit-EC2InstanceMetadataDefault `
    -Region us-east-1 `
    -HttpToken required `
    -HttpPutResponseHopLimit 2
```

Berikut ini adalah output contoh.

```
@{
    Return = $true
}
```

**Untuk melihat pengaturan IMDSv2 penegakan untuk akun di Wilayah tertentu**  
Gunakan Get-EC2InstanceMetadataDefault perintah dan tentukan Wilayah.

```
Get-EC2InstanceMetadataDefault -Region us-east-1
```

Berikut ini adalah output contoh.

```
@{
    AccountLevel = @{
        HttpTokens = "required"
        HttpTokensEnforced = "enabled"
    }
    ManagedBy = "account"
}
```

`ManagedBy`Bidang menunjukkan entitas yang mengkonfigurasi pengaturan. Dalam contoh ini, `account` menunjukkan bahwa pengaturan dikonfigurasi langsung di akun. Nilai `declarative-policy` berarti pengaturan dikonfigurasi oleh kebijakan deklaratif. Untuk informasi selengkapnya, lihat [Kebijakan deklaratif](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html) di *Panduan Pengguna AWS Organizations*.

**Untuk menegakkan IMDSv2 akun untuk semua Wilayah**  
Gunakan [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html)perintah untuk menegakkan IMDSv2 di semua Wilayah.

```
echo -e "Region          \t Modified" ; \
echo -e "--------------  \t ---------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 modify-instance-metadata-defaults \
            --region $region \
            --http-tokens-enforced enabled \
            --output text)
        echo -e "$region        \t $output"
    );
done
```

Berikut ini adalah output contoh.

```
Region                   Modified
--------------           ---------
ap-south-1               True
eu-north-1               True
eu-west-3                True
...
```

**Untuk menetapkan IMDSv2 sebagai default untuk akun untuk semua Wilayah**  
Gunakan [Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html)cmdlet untuk mengubah pengaturan level akun IMDS untuk semua Wilayah. Sertakan `-HttpToken` set ke `required` dan `-HttpPutResponseHopLimit` atur ke `2` jika instance Anda akan meng-host kontainer. Jika tidak, tentukan `-1` untuk menunjukkan tidak ada preferensi. Ketika `-1` (tidak ada preferensi) ditentukan, saat peluncuran, nilai default jika AMI memiliki pengaturan`ImdsSupport: v2.0`; jika tidak maka default ke`2`. `1`

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region   = $_
        Modified = (Edit-EC2InstanceMetadataDefault `
                -Region $_ `
                -HttpToken required `
                -HttpPutResponseHopLimit 2)
    } 
} | `
Format-Table Region, Modified -AutoSize
```

Output yang diharapkan

```
Region         Modified
------         --------
ap-south-1         True
eu-north-1         True
eu-west-3          True
...
```

**Untuk melihat pengaturan akun default untuk opsi metadata instans untuk semua Wilayah**  
Gunakan [Get-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceMetadataDefault.html)cmdlet.

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region = $_
        HttpPutResponseHopLimit = (Get-EC2InstanceMetadataDefault -Region $_).HttpPutResponseHopLimit
        HttpTokens              = (Get-EC2InstanceMetadataDefault -Region $_).HttpTokens
    }
} | `
Format-Table -AutoSize
```

Contoh Output

```
Region         HttpPutResponseHopLimit HttpTokens
------         ----------------------- ----------
ap-south-1                           2 required
eu-north-1                           2 required
eu-west-3                            2 required                    
...
```

------

### Konfigurasikan instans saat peluncuran
<a name="configure-IMDS-new-instances-instance-settings"></a>

Saat [meluncurkan instance](ec2-launch-instance-wizard.md), Anda dapat mengonfigurasi instance agar memerlukan penggunaan IMDSv2 dengan mengonfigurasi bidang berikut:
+ Konsol Amazon EC2: Atur **Versi metadata** ke **V2 saja (diperlukan token)**. 
+ AWS CLI: Atur `HttpTokens` ke `required`.

Bila Anda menentukan yang IMDSv2 diperlukan, Anda juga harus mengaktifkan titik akhir Layanan Metadata Instans (IMDS) dengan menyetel **Metadata yang dapat diakses** ke **Enabled** (console) atau to (). `HttpEndpoint` `enabled`AWS CLI

Dalam lingkungan kontainer, bila IMDSv2 diperlukan, kami sarankan untuk mengatur batas hop ke`2`. Untuk informasi selengkapnya, lihat [Pertimbangan akses metadata instance](instancedata-data-retrieval.md#imds-considerations).

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

**Untuk memerlukan penggunaan IMDSv2 pada instance baru**
+ Saat meluncurkan instans baru di konsol Amazon EC2, perluas **Detail lanjutan**, dan lakukan hal berikut:
  + Untuk **Metadata yang dapat diakses**, pilih **Diaktifkan**.
  + Untuk **Versi metadata**, pilih **V2 saja (token diperlukan)**.
  + **(Lingkungan kontainer) Untuk **batas hop respons Metadata**, pilih 2.**

  Untuk informasi selengkapnya, lihat [Detail lanjutan](ec2-instance-launch-parameters.md#liw-advanced-details).

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

**Untuk memerlukan penggunaan IMDSv2 pada instance baru**  
Contoh [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) berikut meluncurkan instans `c6i.large` dengan `--metadata-options` yang diatur ke `HttpTokens=required`. Jika Anda menetapkan nilai untuk `HttpTokens`, maka Anda juga harus mengatur `HttpEndpoint` ke `enabled`. Karena header token aman disetel ke `required` untuk permintaan pengambilan metadata, ini memerlukan instance untuk digunakan IMDSv2 saat meminta metadata instance.

Dalam lingkungan kontainer, bila IMDSv2 diperlukan, kami sarankan untuk mengatur batas hop ke `2` with`HttpPutResponseHopLimit=2`.

```
aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type c6i.large \
	...
    --metadata-options "HttpEndpoint=enabled,HttpTokens=required,HttpPutResponseHopLimit=2"
```

------
#### [ PowerShell ]

**Untuk memerlukan penggunaan IMDSv2 pada instance baru**  
Contoh [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html)cmdlet berikut meluncurkan `c6i.large` instance dengan `MetadataOptions_HttpEndpoint` set to `enabled` dan parameter ke. `MetadataOptions_HttpTokens` `required` Jika Anda menetapkan nilai untuk `HttpTokens`, maka Anda juga harus mengatur `HttpEndpoint` ke `enabled`. Karena header token aman disetel ke `required` untuk permintaan pengambilan metadata, ini memerlukan instance untuk digunakan IMDSv2 saat meminta metadata instance.

```
New-EC2Instance `
    -ImageId ami-0abcdef1234567890 `
    -InstanceType c6i.large `
    -MetadataOptions_HttpEndpoint enabled `
    -MetadataOptions_HttpTokens required
```

------
#### [ CloudFormation ]

Untuk menentukan opsi metadata untuk instance yang digunakan CloudFormation, lihat [AWS::EC2::LaunchTemplate MetadataOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html)properti di *AWS CloudFormation Panduan Pengguna*.

------

### Konfigurasikan AMI
<a name="configure-IMDS-new-instances-ami-configuration"></a>

Saat Anda mendaftarkan AMI baru atau memodifikasi AMI yang ada, Anda dapat mengatur parameter `imds-support` ke `v2.0`. Instans yang diluncurkan dari AMI ini akan memiliki **versi Metadata** yang disetel ke **V2 saja (diperlukan token) (konsol)** atau `HttpTokens` disetel ke `required` ().AWS CLI Dengan pengaturan ini, instance mengharuskan yang IMDSv2 digunakan saat meminta metadata instance.

Perhatikan bahwa jika Anda mengatur `imds-support` ke `v2.0`, instans yang diluncurkan dari AMI ini juga akan memiliki **Batas hop tanggapan Metadata** (konsol) atau `http-put-response-hop-limit` (AWS CLI) diatur ke **2**.

**penting**  
Jangan gunakan parameter ini kecuali perangkat lunak AMI Anda mendukungIMDSv2. Setelah Anda mengatur nilainya ke `v2.0`, Anda tidak dapat membatalkannya. Satu-satunya cara untuk “mengatur ulang” AMI Anda adalah dengan membuat AMI baru dari snapshot dasar.

**Untuk mengkonfigurasi AMI baru untuk IMDSv2**  
Gunakan salah satu metode berikut untuk mengonfigurasi AMI baru untukIMDSv2.

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

Contoh [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) berikut mendaftarkan AMI menggunakan snapshot yang ditentukan dari volume root EBS sebagai perangkat `/dev/xvda`. Tentukan `v2.0` `imds-support` parameter sehingga instance yang diluncurkan dari AMI ini akan memerlukan yang IMDSv2 digunakan saat meminta metadata instance.

```
aws ec2 register-image \
    --name my-image \
    --root-device-name /dev/xvda \
    --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0123456789example} \
    --architecture x86_64 \
    --imds-support v2.0
```

------
#### [ PowerShell ]

Contoh [Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html)cmdlet berikut mendaftarkan AMI menggunakan snapshot yang ditentukan dari volume root EBS sebagai perangkat. `/dev/xvda` Tentukan `v2.0` `ImdsSupport` parameter sehingga instance yang diluncurkan dari AMI ini akan memerlukan yang IMDSv2 digunakan saat meminta metadata instance.

```
Register-EC2Image `
    -Name 'my-image' `
    -RootDeviceName /dev/xvda `
    -BlockDeviceMapping  ( 
    New-Object `
        -TypeName Amazon.EC2.Model.BlockDeviceMapping `
        -Property @{ 
        DeviceName = '/dev/xvda'; 
        EBS        = (New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice -Property @{ 
                SnapshotId = 'snap-0123456789example'
                VolumeType = 'gp3' 
                } )      
        }  ) `
    -Architecture X86_64 `
    -ImdsSupport v2.0
```

------

**Untuk mengonfigurasi AMI yang ada untuk IMDSv2**  
Gunakan salah satu metode berikut untuk mengonfigurasi AMI yang ada untukIMDSv2.

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

[modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html)Contoh berikut memodifikasi AMI yang ada IMDSv2 hanya untuk. Tentukan `v2.0` `imds-support` parameter sehingga instance yang diluncurkan dari AMI ini akan memerlukan yang IMDSv2 digunakan saat meminta metadata instance.

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --imds-support v2.0
```

------
#### [ PowerShell ]

Contoh [Edit-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html)cmdlet berikut memodifikasi AMI yang ada hanya untuk. IMDSv2 Tentukan `v2.0` `imds-support` parameter sehingga instance yang diluncurkan dari AMI ini akan memerlukan yang IMDSv2 digunakan saat meminta metadata instance.

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -ImdsSupport 'v2.0'
```

------

### Gunakan kebijakan IAM
<a name="configure-IMDS-new-instances-iam-policy"></a>

Anda dapat membuat kebijakan IAM yang melakukan salah satu hal berikut:
+ Mencegah pengguna meluncurkan instance baru kecuali mereka membutuhkan IMDSv2 instance baru.
+ Mencegah pengguna memanggil ModifyInstanceMetadataOptions API untuk mengubah opsi metadata dari instance yang sedang berjalan. Batasi akses ke properti ModifyInstanceMetadataOptions HttpTokens untuk mencegah pembaruan yang tidak diinginkan dari instance yang sedang berjalan.
+ Cegah pengguna memanggil ModifyInstanceMetadataDefaults API untuk mengubah pengaturan default akun dari HttpTokens dan. httpTokensEnforced Membatasi akses ke dua properti ini akan memastikan bahwa hanya peran resmi yang dapat mengubah default akun.

**Untuk menegakkan penggunaan IMDSv2 pada semua instans baru dengan menggunakan kebijakan IAM**  
Untuk memastikan bahwa pengguna hanya dapat meluncurkan instance yang memerlukan penggunaan IMDSv2 saat meminta metadata instance, lakukan hal berikut:
+ Batasi akses ke keduanya `ModifyInstanceMetadataOptions` dan `ModifyInstanceMetadataDefaults` API, dan lebih khusus lagi `httpTokensEnforced` properti `httpTokens` dan properti.
+ Kemudian, atur default akun ke `httpTokens = required` dan`httpTokensEnforced = enabled`.

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

## Aktifkan IMDS IPv4 dan titik akhir IPv6
<a name="configure-IMDS-new-instances-ipv4-ipv6-endpoints"></a>

IMDS memiliki dua titik akhir pada sebuah instance: IPv4 (`169.254.169.254`) dan IPv6 (`[fd00:ec2::254]`). Saat Anda mengaktifkan IMDS, IPv4 titik akhir diaktifkan secara otomatis. IPv6 Titik akhir tetap dinonaktifkan bahkan jika Anda meluncurkan instance ke subnet IPv6 -only. Untuk mengaktifkan IPv6 titik akhir, Anda perlu melakukannya secara eksplisit. Saat Anda mengaktifkan titik IPv6 akhir, IPv4 titik akhir tetap diaktifkan.

Anda dapat mengaktifkan IPv6 titik akhir saat peluncuran instance atau setelahnya.

**Persyaratan untuk mengaktifkan titik akhir IPv6**
+ Jenis instance yang dipilih adalah [instance berbasis Nitro](instance-types.md#instance-hypervisor-type).
+ Subnet yang dipilih mendukung IPv6, di mana subnet adalah [tumpukan ganda atau IPv6 hanya](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range).

Gunakan salah satu metode berikut untuk meluncurkan instance dengan IPv6 titik akhir IMDS diaktifkan.

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

**Untuk mengaktifkan IPv6 titik akhir IMDS saat peluncuran instans**
+ [Luncurkan instans](ec2-launch-instance-wizard.md) di konsol Amazon EC2 dengan menentukan hal-hal berikut ini pada **Detail lanjutan**:
  + **Untuk ** IPv6 titik akhir Metadata**, pilih Diaktifkan.**

Untuk informasi selengkapnya, lihat [Detail lanjutan](ec2-instance-launch-parameters.md#liw-advanced-details).

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

**Untuk mengaktifkan IPv6 titik akhir IMDS saat peluncuran instans**  
Contoh [run-instance berikut meluncurkan `c6i.large` instance dengan IPv6 titik akhir diaktifkan untuk IMDS](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html). Untuk mengaktifkan IPv6 titik akhir, untuk `--metadata-options` parameter, tentukan`HttpProtocolIpv6=enabled`. Jika Anda menetapkan nilai untuk `HttpProtocolIpv6`, maka Anda juga harus mengatur `HttpEndpoint` ke `enabled`.

```
aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type c6i.large \
    ...
    --metadata-options "HttpEndpoint=enabled,HttpProtocolIpv6=enabled"
```

------
#### [ PowerShell ]

**Untuk mengaktifkan IPv6 titik akhir IMDS saat peluncuran instans**  
Contoh [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html)cmdlet berikut meluncurkan `c6i.large` instance dengan IPv6 titik akhir diaktifkan untuk IMDS. Untuk mengaktifkan IPv6 titik akhir, tentukan `MetadataOptions_HttpProtocolIpv6` sebagai`enabled`. Jika Anda menetapkan nilai untuk `MetadataOptions_HttpProtocolIpv6`, maka Anda juga harus mengatur `MetadataOptions_HttpEndpoint` ke `enabled`.

```
New-EC2Instance `
    -ImageId ami-0abcdef1234567890 `
    -InstanceType c6i.large `
    -MetadataOptions_HttpEndpoint enabled `
    -MetadataOptions_HttpProtocolIpv6 enabled
```

------

## Nonaktifkan akses untuk metadata instans
<a name="configure-IMDS-new-instances--turn-off-instance-metadata"></a>

Anda dapat menonaktifkan akses ke metadata instans dengan menonaktifkan IMDS saat Anda meluncurkan instans. Anda dapat mengaktifkan akses nanti dengan mengaktifkan kembali IMDS. Untuk informasi selengkapnya, lihat [Aktifkan akses ke metadata instans](configuring-IMDS-existing-instances.md#enable-instance-metadata-on-existing-instances).

**penting**  
Anda dapat memilih untuk menonaktifkan IMDS saat peluncuran atau setelah peluncuran. Jika Anda menonaktifkan IMDS *saat peluncuran*, hal-hal berikut ini mungkin tidak berfungsi:  
Anda mungkin tidak memiliki akses SSH ke instans Anda. `public-keys/0/openssh-key`, yang merupakan kunci SSH publik instans Anda, tidak akan dapat diakses karena kunci biasanya disediakan dan diakses dari metadata instans EC2. 
Data pengguna EC2 tidak akan tersedia dan tidak akan berjalan saat instans dimulai. Data pengguna EC2 di-host di IMDS. Jika Anda menonaktifkan IMDS, Anda secara efektif mematikan akses ke data pengguna.
Untuk mengakses fungsionalitas ini, Anda dapat mengaktifkan kembali IMDS setelah peluncuran.

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

**Untuk menonaktifkan akses ke metadata instans saat peluncuran**
+ [Luncurkan instans](ec2-launch-instance-wizard.md) di konsol Amazon EC2 dengan menentukan hal-hal berikut ini pada **Detail lanjutan**:
  + Untuk **Metadata yang dapat diakses**, pilih **Diaktifkan**.

Untuk informasi selengkapnya, lihat [Detail lanjutan](ec2-instance-launch-parameters.md#liw-advanced-details).

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

**Untuk menonaktifkan akses ke metadata instans saat peluncuran**  
Luncurkan instans dengan `--metadata-options` diatur ke `HttpEndpoint=disabled`.

```
aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type c6i.large \
    ... 
    --metadata-options "HttpEndpoint=disabled"
```

------
#### [ PowerShell ]

**Untuk menonaktifkan akses ke metadata instans saat peluncuran**  
Contoh [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html)cmdlet berikut meluncurkan instance dengan `MetadataOptions_HttpEndpoint` set ke. `disabled`

```
New-EC2Instance `
    -ImageId ami-0abcdef1234567890 `
    -InstanceType c6i.large `
    -MetadataOptions_HttpEndpoint disabled
```

------
#### [ CloudFormation ]

Untuk menentukan opsi metadata untuk instance yang digunakan CloudFormation, lihat [AWS::EC2::LaunchTemplate MetadataOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html)properti di *CloudFormation Panduan Pengguna*. 

------

## Mengizinkan akses ke tanda dalam metadata instans
<a name="configure-IMDS-new-instances-tags-in-instance-metadata"></a>

Secara default, tag instance tidak dapat diakses dalam metadata instance. Untuk setiap contoh, Anda harus secara eksplisit mengizinkan akses. Jika akses diizinkan, *kunci* tag instance harus mematuhi batasan karakter tertentu, jika tidak, peluncuran instance akan gagal. Untuk informasi selengkapnya, lihat [Aktifkan akses ke tag dalam metadata contoh](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS).

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

Anda dapat mengonfigurasi opsi metadata instans untuk instans yang ada

Anda juga dapat membuat kebijakan IAM yang mencegah pengguna mengubah opsi metadata instans pada instans yang ada. Untuk mengontrol pengguna mana yang dapat memodifikasi opsi metadata instance, tentukan kebijakan yang mencegah semua pengguna selain pengguna dengan peran tertentu untuk menggunakan API. [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) Untuk contoh kebijakan IAM, lihat [Cara menggunakan metadata instans](ExamplePolicies_EC2.md#iam-example-instance-metadata).

**catatan**  
Jika kebijakan deklaratif digunakan untuk mengonfigurasi opsi metadata instance, Anda tidak dapat memodifikasinya secara langsung di dalam akun. Untuk informasi selengkapnya, lihat [Kebijakan deklaratif](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html) di *Panduan AWS Organizations Pengguna*.

## Membutuhkan penggunaan IMDSv2
<a name="modify-require-IMDSv2"></a>

Gunakan salah satu metode berikut untuk memodifikasi opsi metadata instance pada instance yang ada untuk meminta yang IMDSv2 digunakan saat meminta metadata instance. Ketika IMDSv2 diperlukan, IMDSv1 tidak dapat digunakan.

**catatan**  
Sebelum mengharuskan yang IMDSv2 digunakan, pastikan bahwa instance tidak melakukan IMDSv1 panggilan. `MetadataNoToken`CloudWatch Metrik melacak IMDSv1 panggilan. Ketika `MetadataNoToken` mencatat IMDSv1 penggunaan nol untuk sebuah instance, instance kemudian siap untuk membutuhkan IMDSv2.

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

**Untuk memerlukan penggunaan IMDSv2 pada 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 instans Anda.

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

1. Di kotak dialog **Ubah opsi metadata instans**, lakukan hal berikut:

   1. Untuk **Layanan metadata instans**, pilih **Diaktifkan**.

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

   1. Pilih **Simpan**.

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

**Untuk memerlukan penggunaan IMDSv2 pada instance yang ada**  
Gunakan perintah [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html)CLI dan atur `http-tokens` parameternya ke. `required` Jika Anda menetapkan nilai untuk `http-tokens`, maka Anda juga harus mengatur `http-endpoint` ke `enabled`.

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-tokens required \
    --http-endpoint enabled
```

------
#### [ PowerShell ]

**Untuk memerlukan penggunaan IMDSv2 pada instance yang ada**  
Gunakan [Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html)cmdlet dan atur `HttpTokens` parameternya ke. `required` Jika Anda menetapkan nilai untuk `HttpTokens`, maka Anda juga harus mengatur `HttpEndpoint` ke `enabled`.

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpTokens required `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## Kembalikan penggunaan IMDSv1
<a name="modify-restore-IMDSv1"></a>

Ketika IMDSv2 diperlukan pada sebuah instance, menggunakan IMDSv1 permintaan akan gagal. IMDSv2 Kapan opsional, maka keduanya IMDSv2 dan IMDSv1 akan berfungsi. Oleh karena itu, untuk mengembalikan IMDSv1, atur IMDSv2 ke opsional (`httpTokens = optional`) menggunakan salah satu metode berikut.

Properti `httpTokensEnforced` IMDS juga mencegah upaya untuk IMDSv1 mengaktifkan instance yang ada. Saat diaktifkan untuk akun di Wilayah, upaya `httpTokens` untuk menyetel `optional` akan menghasilkan `UnsupportedOperation` pengecualian. Untuk informasi lebih lanjut, lihat[Pemecahan masalah](#troubleshoot-modifying-an-imdsv1-enabled-instance-fails).

**penting**  
Jika peluncuran instans Anda gagal karena IMDSv2 penegakan hukum, Anda memiliki dua opsi untuk mengaktifkan peluncuran agar berhasil:  
**Luncurkan instance sebagai IMDSv2 -only** - Jika perangkat lunak yang berjalan pada instance IMDSv2 hanya menggunakan (tidak ada ketergantungan pada IMDSv1), maka Anda dapat meluncurkan instance sebagai saja. IMDSv2 Untuk melakukan ini, konfigurasikan IMDSv2 hanya dengan mengatur `httpTokens = required` baik dalam parameter peluncuran atau dalam default metadata untuk akun di Wilayah. 
**Nonaktifkan penegakan hukum** — Jika perangkat lunak Anda masih bergantung IMDSv1, atur `httpTokensEnforced` ke `disabled` akun di Wilayah. Untuk informasi selengkapnya, lihat [Menegakkan IMDSv2 di tingkat akun](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level).

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

**Untuk mengembalikan penggunaan IMDSv1 pada sebuah instance**

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. Di kotak dialog **Ubah opsi metadata instans**, lakukan hal berikut:

   1. Untuk **Layanan metadata instans**, pastikan **Aktifkan** telah dipilih.

   1. Untuk **IMDSv2**, pilih **Opsional**.

   1. Pilih **Simpan**.

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

**Untuk mengembalikan penggunaan IMDSv1 pada sebuah instance**  
Anda dapat menggunakan perintah [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html)CLI dengan `http-tokens` set to `optional` untuk mengembalikan penggunaan IMDSv1 saat meminta metadata instance.

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-tokens optional \
    --http-endpoint enabled
```

------
#### [ PowerShell ]

**Untuk mengembalikan penggunaan IMDSv1 pada sebuah instance**  
Anda dapat menggunakan [Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html)cmdlet dengan `HttpTokens` set to `optional` untuk mengembalikan penggunaan IMDSv1 saat meminta metadata instance.

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpTokens optional `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## Mengubah batas hop respons PUT
<a name="modify-PUT-response-hop-limit"></a>

Untuk instans yang ada, Anda dapat mengubah pengaturan batas hop respons `PUT`.

Saat ini hanya AWS CLI dan AWS SDKs mendukung perubahan batas hop respons PUT.

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

**Mengubah batas hop respons PUT**  
Gunakan perintah [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html)CLI dan atur `http-put-response-hop-limit` parameter ke jumlah hop yang diperlukan. Pada instans berikut, batas hop diatur ke `3`. Perhatikan bahwa saat Anda menetapkan nilai untuk `http-put-response-hop-limit`, maka Anda juga harus mengatur `http-endpoint` ke `enabled`.

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-put-response-hop-limit 3 \
    --http-endpoint enabled
```

------
#### [ PowerShell ]

**Mengubah batas hop respons PUT**  
Gunakan [Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html)cmdlet dan atur `HttpPutResponseHopLimit` parameter ke jumlah hop yang diperlukan. Pada instans berikut, batas hop diatur ke `3`. Perhatikan bahwa saat Anda menetapkan nilai untuk `HttpPutResponseHopLimit`, maka Anda juga harus mengatur `HttpEndpoint` ke `enabled`.

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpPutResponseHopLimit 3 `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## Aktifkan IMDS IPv4 dan titik akhir IPv6
<a name="enable-ipv6-endpoint-for-existing-instances"></a>

IMDS memiliki dua titik akhir pada sebuah instance: IPv4 (`169.254.169.254`) dan IPv6 (`[fd00:ec2::254]`). Saat Anda mengaktifkan IMDS, IPv4 titik akhir diaktifkan secara otomatis. IPv6 Titik akhir tetap dinonaktifkan bahkan jika Anda meluncurkan instance ke subnet IPv6 -only. Untuk mengaktifkan IPv6 titik akhir, Anda perlu melakukannya secara eksplisit. Saat Anda mengaktifkan titik IPv6 akhir, IPv4 titik akhir tetap diaktifkan.

Anda dapat mengaktifkan IPv6 titik akhir saat peluncuran instance atau setelahnya.

**Persyaratan untuk mengaktifkan titik akhir IPv6**
+ Jenis instance yang dipilih adalah [instance berbasis Nitro](instance-types.md#instance-hypervisor-type).
+ Subnet yang dipilih mendukung IPv6, di mana subnet adalah [tumpukan ganda atau IPv6 hanya](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range).

Saat ini hanya AWS SDKs dukungan AWS CLI dan yang mengaktifkan IPv6 titik akhir IMDS setelah peluncuran instance.

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

**Untuk mengaktifkan IPv6 titik akhir IMDS untuk instans Anda**  
Gunakan perintah [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html)CLI dan atur `http-protocol-ipv6` parameternya ke. `enabled` Perhatikan bahwa saat Anda menetapkan nilai untuk `http-protocol-ipv6`, maka Anda juga harus mengatur `http-endpoint` ke `enabled`.

```
aws ec2 modify-instance-metadata-options \
	--instance-id i-1234567890abcdef0 \
	--http-protocol-ipv6 enabled \
	--http-endpoint enabled
```

------
#### [ PowerShell ]

**Untuk mengaktifkan IPv6 titik akhir IMDS untuk instans Anda**  
Gunakan [Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html)cmdlet dan atur `HttpProtocolIpv6` parameternya ke. `enabled` Perhatikan bahwa saat Anda menetapkan nilai untuk `HttpProtocolIpv6`, maka Anda juga harus mengatur `HttpEndpoint` ke `enabled`.

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpProtocolIpv6 enabled `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## Aktifkan akses ke metadata instans
<a name="enable-instance-metadata-on-existing-instances"></a>

Anda dapat mengaktifkan akses ke metadata instans dengan mengaktifkan titik akhir HTTP IMDS pada instans Anda, apa pun versi IMDS yang Anda gunakan. Anda dapat megembalikan perubahan ini kapan saja dengan menonaktifkan titik akhir HTTP.

Gunakan salah satu metode berikut untuk menonaktifkan akses ke metadata instans pada instans.

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

**Untuk mengaktifkan akses ke metadata instans**

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. Di kotak dialog **Ubah opsi metadata instans**, lakukan hal berikut:

   1. Untuk **Layanan metadata instans**, pilih **Diaktifkan**.

   1. Pilih **Simpan**.

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

**Untuk mengaktifkan akses ke metadata instans**  
Gunakan perintah [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html)CLI dan atur `http-endpoint` parameternya ke. `enabled`

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-endpoint enabled
```

------
#### [ PowerShell ]

**Untuk mengaktifkan akses ke metadata instans**  
Gunakan [Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html)cmdlet dan atur `HttpEndpoint` parameternya ke. `enabled`

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## Nonaktifkan akses untuk metadata instans
<a name="disable-instance-metadata-on-existing-instances"></a>

Anda dapat menonaktifkan akses ke metadata instans dengan menonaktifkan titik akhir HTTP IMDS pada instans Anda, apa pun versi IMDS yang Anda gunakan. Anda dapat megembalikan perubahan ini kapan saja dengan mengaktifkan titik akhir HTTP.

Gunakan salah satu metode berikut untuk menonaktifkan akses ke metadata instans pada instans.

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

**Untuk menonaktifkan akses untuk metadata instans**

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. Di kotak dialog **Ubah opsi metadata instans**, lakukan hal berikut:

   1. Untuk **Layanan metadata instans**, hapus **Aktifkan**.

   1. Pilih **Simpan**.

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

**Untuk menonaktifkan akses untuk metadata instans**  
Gunakan perintah [modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html)CLI dan atur `http-endpoint` parameternya ke. `disabled`

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-endpoint disabled
```

------
#### [ PowerShell ]

**Untuk menonaktifkan akses untuk metadata instans**  
Gunakan [Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html)cmdlet dan atur `HttpEndpoint` parameternya ke. `disabled`

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpEndpoint disabled).InstanceMetadataOptions
```

------

## Mengizinkan akses ke tanda dalam metadata instans
<a name="modify-access-to-tags-in-instance-metadata-on-existing-instances"></a>

Anda dapat mengizinkan akses ke tag dalam metadata instance pada instance yang sedang berjalan atau dihentikan. Untuk setiap contoh, Anda harus secara eksplisit mengizinkan akses. Jika akses diizinkan, *kunci* tag instance harus mematuhi batasan karakter tertentu, jika tidak, Anda akan mendapatkan kesalahan. Untuk informasi selengkapnya, lihat [Aktifkan akses ke tag dalam metadata contoh](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS).

## Pemecahan masalah
<a name="troubleshoot-modifying-an-imdsv1-enabled-instance-fails"></a>

### Gagal memodifikasi instance IMDSv1 -enabled
<a name="modifying-an-imdsv1-enabled-instance-fails"></a>

#### Deskripsi
<a name="modifying-an-imdsv1-enabled-instance-fails-description"></a>

Anda mendapatkan pesan galat berikut:

`You can't launch instances with IMDSv1 because httpTokensEnforced is enabled for this account. Either launch the instance with httpTokens=required or contact your account owner to disable httpTokensEnforced using the ModifyInstanceMetadataDefaults API or the account settings in the EC2 console.`

#### Penyebab
<a name="modifying-an-imdsv1-enabled-instance-fails-cause"></a>

Kesalahan ini muncul saat Anda mencoba mengubah instance yang ada untuk IMDSv1 diaktifkan (`httpTokens = optional`) di akun tempat pengaturan akun EC2 atau kebijakan deklaratif AWS Organisasi memberlakukan penggunaan IMDSv2 (). `httpTokensEnforced = enabled` 

#### Solusi
<a name="modifying-an-imdsv1-enabled-instance-fails-solution"></a>

Jika Anda memerlukan IMDSv1 dukungan pada instans yang ada, Anda harus menonaktifkan IMDSv2 penegakan hukum untuk akun di Wilayah. Untuk menonaktifkan IMDSv2 penegakan, atur `HttpTokensEnforced` ke`disabled`. Untuk informasi selengkapnya, lihat [ModifyInstanceMetadataDefaults](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataDefaults.html)di Referensi API Amazon EC2. Jika Anda lebih suka mengonfigurasi pengaturan ini menggunakan konsol, lihat[Menegakkan IMDSv2 di tingkat akun](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level).

Kami menyarankan Anda IMDSv2 hanya menggunakan (`httpTokens=required`). Untuk informasi selengkapnya, lihat [Transisi ke penggunaan Layanan Metadata Instans Versi 2](instance-metadata-transition-to-version-2.md).

 

# Jalankan perintah saat Anda meluncurkan instans EC2 dengan input data pengguna
<a name="user-data"></a>

Saat meluncurkan instans Amazon EC2, Anda dapat meneruskan data pengguna ke instans yang digunakan untuk melakukan tugas konfigurasi otomatis, atau menjalankan skrip setelah instance dimulai.

Jika Anda tertarik dengan skenario otomatisasi yang lebih kompleks, Anda dapat mempertimbangkannya CloudFormation. Untuk informasi selengkapnya, [lihat Menerapkan aplikasi di Amazon EC2 CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/deploying.applications.html) dengan di Panduan Pengguna *AWS CloudFormation .*

Pada instance Linux, Anda dapat meneruskan dua jenis data pengguna ke Amazon EC2: skrip shell dan direktif cloud-init. Anda juga dapat meneruskan data ini ke wizard instance peluncuran sebagai teks biasa, sebagai file (ini berguna untuk meluncurkan instance dengan alat baris perintah), atau sebagai teks yang disandikan base64 (untuk panggilan API).

Pada instance Windows, agen peluncuran menangani skrip data pengguna Anda.

**Pertimbangan-pertimbangan**
+ Data pengguna diperlakukan sebagai data buram: apa yang Anda berikan adalah apa yang Anda dapatkan kembali. Terserah instans untuk menafsirkannya.
+ Data pengguna harus dienkode base64. Konsol Amazon EC2 dapat melakukan pengkodean base64 untuk input yang disandikan base64 atau menerima input yang disandikan base64. Jika Anda mengambil data pengguna menggunakan metadata instans atau konsol, data base64 diterjemahkan untuk Anda secara otomatis.
+ 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 adalah atribut instans. Jika Anda membuat AMI dari instans, data pengguna instans tidak disertakan dalam AMI.

## Data pengguna di Konsol Manajemen AWS
<a name="user-data-console"></a>

Anda dapat menentukan data pengguna instans saat Anda meluncurkan instans. Jika volume root dari instans adalah volume EBS, Anda juga dapat menghentikan instans dan memperbarui data penggunanya.

### Tentukan data pengguna instance saat peluncuran dengan Launch Wizard
<a name="user-data-launch-instance-wizard"></a>

Anda dapat menentukan data pengguna saat meluncurkan instance dengan Launch Wizard di konsol EC2. Untuk menentukan data pengguna saat peluncuran, ikuti prosedur untuk [meluncurkan instance](ec2-launch-instance-wizard.md). Bidang **Data pengguna** terletak di bagian [Detail lanjutan](ec2-instance-launch-parameters.md#liw-advanced-details) wizard peluncuran instans. Masukkan PowerShell skrip Anda di bidang **Data pengguna**, dan kemudian selesaikan prosedur peluncuran instance.

Pada tangkapan layar dari bidang **Data pengguna** berikut, skrip contoh membuat file di folder sementara Windows, dengan menggunakan tanggal dan waktu saat ini di nama file. Saat Anda memasukkan `<persist>true</persist>`, skrip akan dijalankan setiap kali Anda melakukan boot ulang atau memulai instans. Jika Anda membiarkan kotak centang **data Pengguna telah dikodekan base64** kosong, konsol Amazon EC2 melakukan pengkodean base64 untuk Anda.

![\[Bidang teks data pengguna Detail Lanjutan.\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/images/configure_ec2config_userdata.png)


Untuk informasi selengkapnya, lihat [Tentukan data pengguna instance saat peluncuran dengan Launch Wizard](#user-data-launch-instance-wizard). Untuk contoh Linux yang menggunakan AWS CLI, lihat[Data pengguna dan AWS CLI](#user-data-api-cli). Untuk contoh Windows yang menggunakan Alat untuk Windows PowerShell, lihat[Data pengguna dan Alat untuk Windows PowerShell](#user-data-powershell).

### Lihat dan perbarui data pengguna instans
<a name="user-data-view-change"></a>

Anda dapat melihat data pengguna instans untuk semua instans, dan Anda dapat memperbarui data pengguna instans untuk instans yang dihentikan.

**Untuk memperbarui data pengguna untuk sebuah instans dengan menggunakan konsol**

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 dan pilih **Tindakan**, **status instans**, **Hentikan instans**.
**Awas**  
Ketika Anda menghentikan sebuah instance, data pada volume penyimpanan instans akan hilang. Untuk menyimpan data ini, buat cadangan ke penyimpanan persisten.

1. Ketika diminta konfirmasi, pilih **Berhenti**. Hal ini dapat memerlukan waktu beberapa menit sampai instans berhenti.

1. Dengan instans yang masih dipilih, pilih **Tindakan**, **Pengaturan instans**, **Edit data pengguna**. Anda tidak dapat mengubah data pengguna jika instans sedang berjalan, tetapi Anda dapat melihatnya.

1. Dalam kotak dialog **Edit data pengguna**, perbarui data pengguna, lalu pilih **Simpan**. Untuk menjalankan skrip data pengguna setiap kali Anda melakukan boot ulang atau memulai instans, tambahkan `<persist>true</persist>`, seperti yang ditunjukkan pada contoh berikut:  
![\[Kotak dialog Edit Data Pengguna.\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/images/view-change-user-data.png)

1. Mulai instans. Jika Anda mengaktifkan eksekusi data pengguna untuk boot ulang atau permulaan berikutnya, skrip data pengguna yang diperbarui akan dijalankan sebagai bagian dari proses mulai instans.

## Cara Amazon EC2 menangani data pengguna untuk instans Linux
<a name="userdata-linux"></a>

Contoh berikut menggunakan data pengguna untuk menjalankan perintah yang mengatur server LAMP saat instance diluncurkan. Dalam setiap contoh, tugas-tugas berikut dilakukan:
+ Paket perangkat lunak distribusi diperbarui.
+ Server web,`php`, dan `mariadb` paket diinstal.
+ `httpd`Layanan dimulai dan dihidupkan.
+ Pengguna `ec2-user` ditambahkan ke grup apache.
+ Kepemilikan yang sesuai dan izin file ditetapkan untuk direktori web dan file yang ada di dalamnya.
+ Halaman web sederhana dibuat untuk menguji server web dan mesin PHP.

**Topics**
+ [Prasyarat](#user-data-requirements)
+ [Data pengguna dan skrip shell](#user-data-shell-scripts)
+ [Perbarui data pengguna instance](#user-data-modify)
+ [Data pengguna dan arahan cloud-init](#user-data-cloud-init)
+ [Data pengguna dan AWS CLI](#user-data-api-cli)
+ [Menggabungkan skrip shell dan arahan cloud-init](#user-data-mime-multi)

### Prasyarat
<a name="user-data-requirements"></a>

Contoh-contoh dalam topik ini mengasumsikan hal berikut:
+ Instans Anda memiliki nama DNS publik yang dapat dijangkau dari internet.
+ Grup keamanan yang terkait dengan instans Anda dikonfigurasi untuk mengizinkan lalu lintas SSH (port 22) sehingga Anda dapat terhubung ke instans untuk melihat file log keluaran.
+ Instans Anda diluncurkan menggunakan AMI Amazon Linux. Perintah dan arahan mungkin tidak berfungsi untuk distribusi Linux lainnya. Untuk informasi selengkapnya tentang distribusi lain, seperti dukungannya untuk cloud-init, lihat dokumentasi untuk distribusi tertentu.

### Data pengguna dan skrip shell
<a name="user-data-shell-scripts"></a>

Jika Anda terbiasa dengan skrip shell, ini adalah cara termudah dan terlengkap untuk mengirim instruksi ke sebuah instans saat peluncuran. Menambahkan tugas ini pada waktu boot akan menambah jumlah waktu yang dibutuhkan untuk booting sebuah instans. Anda harus memberikan waktu tambahan beberapa menit untuk penyelesaian tugas sebelum menguji apakah skrip pengguna telah berhasil diselesaikan.

**penting**  
Secara default, skrip data pengguna dan arahan cloud-init hanya berjalan selama siklus boot saat Anda pertama kali meluncurkan sebuah instans. Anda dapat memperbarui konfigurasi untuk memastikan bahwa skrip data pengguna dan arahan cloud-init Anda berjalan setiap kali Anda memulai ulang instans. Untuk informasi selengkapnya, [lihat Bagaimana cara menggunakan data pengguna untuk menjalankan skrip secara otomatis dengan setiap restart instans Amazon EC2 Linux saya](https://repost.aws/knowledge-center/execute-user-data-ec2)? di pusat AWS pengetahuan.

Skrip shell data pengguna harus dimulai dengan `#!` karakter dan jalur ke penerjemah yang ingin Anda baca skrip (umumnya. **/bin/bash)** Untuk pengenalan tentang skrip shell, lihat [Manual Referensi Bash](https://www.gnu.org/software/bash/manual/bash.html) di situs web *Sistem Operasi GNU*.

Skrip yang dimasukkan sebagai data pengguna dijalankan sebagai pengguna root pengguna, jadi jangan gunakan perintah **sudo** dalam skrip. Ingatlah bahwa file apa pun yang Anda buat akan menjadi milik pengguna root; jika Anda membutuhkan pengguna non-root untuk memiliki akses file, Anda harus mengubah izin yang sesuai dalam skrip. Selain itu, karena skrip tidak dijalankan secara interaktif, Anda tidak dapat menyertakan perintah yang memerlukan umpan balik pengguna (seperti **yum update** tanpa bendera `-y`).

Jika Anda menggunakan AWS API, termasuk AWS CLI, dalam skrip data pengguna, Anda harus menggunakan profil instance saat meluncurkan instance. Profil instance menyediakan AWS kredensi yang sesuai yang diperlukan oleh skrip data pengguna untuk mengeluarkan panggilan API. Untuk informasi selengkapnya, lihat [Menggunakan profil instans](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) di Panduan Pengguna IAM. Izin yang Anda tetapkan ke peran IAM bergantung pada layanan mana yang Anda panggil dengan API. Untuk informasi selengkapnya, lihat [IAM role untuk Amazon EC2](iam-roles-for-amazon-ec2.md).

File log keluaran cloud-init () menangkap keluaran konsol sehingga mudah untuk men-debug skrip Anda setelah peluncuran jika instans tidak berperilaku seperti yang Anda inginkan. Untuk melihat file log, [hubungkan ke instans](connect-to-linux-instance.md) dan buka `/var/log/cloud-init-output.log`.

Ketika skrip data pengguna diproses, skrip itu akan disalin dan dijalankan dari `/var/lib/cloud/instances/instance-id/`. Skrip tidak dihapus setelah dijalankan. Pastikan untuk menghapus skrip data pengguna dari `/var/lib/cloud/instances/instance-id/` sebelum Anda membuat AMI dari instans. Jika tidak, skrip akan ada di direktori ini pada setiap instans yang diluncurkan dari AMI.

### Perbarui data pengguna instance
<a name="user-data-modify"></a>

Untuk memperbarui data pengguna instans, Anda harus menghentikan instans tersebut terlebih dahulu. Jika instans sedang berjalan, Anda dapat melihat data pengguna tetapi Anda tidak dapat mengubahnya.

**Awas**  
Ketika Anda menghentikan sebuah instance, data pada volume penyimpanan instans akan hilang. Untuk menyimpan data ini, buat cadangan ke penyimpanan persisten.

**Untuk mengubah data pengguna instans**

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 dan pilih **Status instans**, **Hentikan instans**. Jika opsi ini dinonaktifkan, instance sudah dihentikan atau volume rootnya adalah volume penyimpanan instance.

1. Ketika diminta konfirmasi, pilih **Berhenti**. Hal ini dapat memerlukan waktu beberapa menit sampai instans berhenti.

1. Dengan instans yang masih dipilih, pilih **Tindakan**, **Pengaturan instans**, **Edit data pengguna**.

1. Ubah data pengguna sesuai kebutuhan, lalu pilih **Simpan**.

1. Mulai instans. Data pengguna baru terlihat di instans Anda setelah Anda memulainya; namun, skrip data pengguna tidak dijalankan.

### Data pengguna dan arahan cloud-init
<a name="user-data-cloud-init"></a>

Paket cloud-init mengonfigurasi aspek spesifik dari instans Amazon Linux baru saat diluncurkan; paket ini terutama mengonfigurasi file `.ssh/authorized_keys` untuk ec2-user sehingga Anda dapat masuk dengan kunci privat Anda sendiri. Untuk informasi selengkapnya tentang tugas konfigurasi yang dilakukan paket cloud-init untuk instans Amazon Linux, lihat dokumentasi berikut:
+ **Amazon Linux 2023 - Cloud-init** [yang disesuaikan](https://docs.aws.amazon.com/linux/al2023/ug/cloud-init.html)
+ **Amazon Linux 2** - [Menggunakan cloud-init di Amazon](https://docs.aws.amazon.com/linux/al2/ug/amazon-linux-cloud-init.html) Linux 2

Arahan pengguna cloud-init dapat diteruskan ke instans saat peluncuran dengan cara yang sama seperti skrip diteruskan, meskipun sintaksnya berbeda. Untuk informasi selengkapnya tentang cloud-init, lihat. [https://cloudinit.readthedocs.org/en/latest/index.html](https://cloudinit.readthedocs.org/en/latest/index.html)

**penting**  
Secara default, skrip data pengguna dan arahan cloud-init hanya berjalan selama siklus boot saat Anda pertama kali meluncurkan sebuah instans. Anda dapat memperbarui konfigurasi untuk memastikan bahwa skrip data pengguna dan arahan cloud-init Anda berjalan setiap kali Anda memulai ulang instans. Untuk informasi selengkapnya, [lihat Bagaimana cara menggunakan data pengguna untuk menjalankan skrip secara otomatis dengan setiap restart instans Amazon EC2 Linux saya](https://repost.aws/knowledge-center/execute-user-data-ec2)? di pusat AWS pengetahuan.

Menambahkan tugas ini pada waktu boot akan menambah jumlah waktu yang dibutuhkan untuk booting sebuah instans. Anda harus memberikan waktu tambahan beberapa menit untuk penyelesaian tugas sebelum menguji apakah arahan data pengguna Anda telah selesai.

**Untuk meneruskan arahan cloud-init ke instans Amazon Linux**

1. Ikuti prosedur untuk [meluncurkan instans](ec2-launch-instance-wizard.md). Bidang **Data pengguna** terletak di bagian [Detail lanjutan](ec2-instance-launch-parameters.md#liw-advanced-details) wizard peluncuran instans. Masukkan teks arahan cloud-init Anda di bidang **Data pengguna**, lalu selesaikan prosedur peluncuran instans.

   Dalam contoh di bawah ini, arahan membuat dan mengkonfigurasi server web di Amazon Linux. Baris `#cloud-config` di atas diperlukan untuk mengidentifikasi perintah sebagai arahan cloud-init.

------
#### [ AL2023 ]

   ```
   #cloud-config
   package_update: true
   package_upgrade: all
   	
   packages:
   - httpd
   - mariadb105-server
   - php8.1
   - php8.1-mysqlnd
   
   runcmd:
   - systemctl start httpd
   - systemctl enable httpd
   - [ sh, -c, "usermod -a -G apache ec2-user" ]
   - [ sh, -c, "chown -R ec2-user:apache /var/www" ]
   - chmod 2775 /var/www
   - [ find, /var/www, -type, d, -exec, chmod, 2775, {}, \; ]
   - [ find, /var/www, -type, f, -exec, chmod, 0664, {}, \; ]
   - [ sh, -c, 'echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php' ]
   ```

------
#### [ AL2 ]

   ```
   #cloud-config
   package_update: true
   package_upgrade: all
   	
   packages:
   - httpd
   - mariadb-server
   	
   runcmd:
   - [ sh, -c, "amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2" ]
   - systemctl start httpd
   - systemctl enable httpd
   - [ sh, -c, "usermod -a -G apache ec2-user" ]
   - [ sh, -c, "chown -R ec2-user:apache /var/www" ]
   - chmod 2775 /var/www
   - [ find, /var/www, -type, d, -exec, chmod, 2775, {}, \; ]
   - [ find, /var/www, -type, f, -exec, chmod, 0664, {}, \; ]
   - [ sh, -c, 'echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php' ]
   ```

------

1. Berikan waktu yang cukup bagi instans untuk meluncurkan dan menjalankan arahan di data pengguna Anda, lalu periksa untuk melihat apakah arahan Anda telah menyelesaikan tugas yang Anda maksudkan.

   Misalnya, di peramban web, masukkan URL file pengujian PHP yang dibuat arahan tersebut. URL ini adalah alamat DNS publik dari instans Anda yang diikuti dengan garis miring ke depan dan nama file.

   ```
   http://my.public.dns.amazonaws.com/phpinfo.php
   ```

   Anda akan melihat halaman informasi PHP: Jika Anda tidak dapat melihat halaman informasi PHP, periksa apakah grup keamanan yang Anda gunakan berisi aturan yang mengizinkan lalu lintas HTTP (port 80). Untuk informasi selengkapnya, lihat [Mengonfigurasi aturan grup keamanan](changing-security-group.md#add-remove-security-group-rules).

1. (Opsional) Jika arahan Anda tidak menyelesaikan tugas yang Anda harapkan, atau jika Anda hanya ingin memverifikasi bahwa arahan Anda selesai tanpa kesalahan, [hubungkan ke instans](connect-to-linux-instance.md), periksa file log output (`/var/log/cloud-init-output.log`), dan cari pesan kesalahan di output. Untuk informasi debugging tambahan, Anda dapat menambahkan baris berikut ke arahan Anda:

   ```
   output : { all : '| tee -a /var/log/cloud-init-output.log' }
   ```

   Arahan ini mengirimkan output **runcmd** ke `/var/log/cloud-init-output.log`.

### Data pengguna dan AWS CLI
<a name="user-data-api-cli"></a>

Anda dapat menggunakan AWS CLI untuk menentukan, memodifikasi, dan melihat data pengguna untuk instance Anda. Untuk informasi tentang melihat data pengguna dari instans Anda menggunakan metadata instans, lihat [Akses metadata instans untuk instans EC2](instancedata-data-retrieval.md).

Di Windows, Anda dapat menggunakan AWS Tools for Windows PowerShell alih-alih menggunakan file AWS CLI. Untuk informasi selengkapnya, lihat [Data pengguna dan Alat untuk Windows PowerShell](#user-data-powershell).

**Contoh: Tentukan data pengguna saat peluncuran**  
Untuk menentukan data pengguna saat Anda meluncurkan instans, gunakan perintah [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) dengan parameter `--user-data`. Dengan**run-instances**, AWS CLI melakukan pengkodean base64 dari data pengguna untuk Anda.

Contoh berikut menunjukkan cara menentukan skrip sebagai string pada baris perintah:

```
aws ec2 run-instances --image-id ami-abcd1234 --count 1 --instance-type m3.medium \
    --key-name my-key-pair --subnet-id subnet-abcd1234 --security-group-ids sg-abcd1234 \
    --user-data echo user data
```

Contoh berikut menunjukkan cara menentukan skrip menggunakan file teks. Pastikan untuk menggunakan awalan `file://` untuk menentukan file.

```
aws ec2 run-instances --image-id ami-abcd1234 --count 1 --instance-type m3.medium \
    --key-name my-key-pair --subnet-id subnet-abcd1234 --security-group-ids sg-abcd1234 \
    --user-data file://my_script.txt
```

Berikut ini adalah contoh file teks dengan skrip shell.

```
#!/bin/bash
yum update -y
service httpd start
chkconfig httpd on
```

**Contoh: Modifikasi data pengguna dari instans yang dihentikan**  
Anda dapat memodifikasi data pengguna dari instance yang dihentikan menggunakan [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html)perintah. Dengan**modify-instance-attribute**, AWS CLI tidak melakukan pengkodean base64 dari data pengguna untuk Anda.
+ Di komputer **Linux**, gunakan perintah base64 untuk mengenkode data pengguna.

  ```
  base64 my_script.txt >my_script_base64.txt
  ```
+ Di komputer **Windows**, gunakan perintah certutil untuk mengenkode data pengguna. Sebelum Anda dapat menggunakan file ini dengan AWS CLI, Anda harus menghapus baris pertama (BEGIN CERTIFICATE) dan terakhir (END CERTIFICATE).

  ```
  certutil -encode my_script.txt my_script_base64.txt
  notepad my_script_base64.txt
  ```

Menggunakan parameter `--attribute` dan `--value` untuk menggunakan file teks yang dienkode untuk menentukan data pengguna. Pastikan untuk menggunakan awalan `file://` untuk menentukan file.

```
aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData --value file://my_script_base64.txt
```

**Contoh: Hapus data pengguna dari instans yang dihentikan**  
Untuk menghapus data pengguna yang ada, gunakan [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html)perintah sebagai berikut:

```
aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --user-data Value=
```

**Contoh: Lihat data pengguna**  
Untuk mengambil data pengguna untuk sebuah contoh, gunakan [describe-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-attribute.html)perintah. Dengan**describe-instance-attribute**, AWS CLI tidak melakukan decoding base64 dari data pengguna untuk Anda.

```
aws ec2 describe-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData
```

Berikut ini adalah contoh output dengan data pengguna berenkode base64.

```
{
    "UserData": {
        "Value": "IyEvYmluL2Jhc2gKeXVtIHVwZGF0ZSAteQpzZXJ2aWNlIGh0dHBkIHN0YXJ0CmNoa2NvbmZpZyBodHRwZCBvbg=="
    },
    "InstanceId": "i-1234567890abcdef0"
}
```
+ Di komputer **Linux**, gunakan`--query` opsi untuk mendapatkan data pengguna yang disandikan dan perintah base64 untuk mendekodekannya.

  ```
  aws ec2 describe-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData --output text --query "UserData.Value" | base64 --decode
  ```
+ Di komputer **Windows**, gunakan`--query` opsi untuk mendapatkan data pengguna yang dikodekan dan perintah certutil untuk mendekodekannya. Perhatikan bahwa output dienkode disimpan dalam suatu file dan output yang didekode disimpan di file lain.

  ```
  aws ec2 describe-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData --output text --query "UserData.Value" >my_output.txt
  certutil -decode my_output.txt my_output_decoded.txt
  type my_output_decoded.txt
  ```

Berikut ini adalah output contoh.

```
#!/bin/bash
yum update -y
service httpd start
chkconfig httpd on
```

### Menggabungkan skrip shell dan arahan cloud-init
<a name="user-data-mime-multi"></a>

Secara default, Anda hanya dapat menyertakan satu tipe konten dalam data pengguna pada satu waktu. Namun, Anda dapat menggunakan tipe konten `text/cloud-config` dan `text/x-shellscript` dalam file bagian mime-multi untuk menyertakan skrip shell dan arahan cloud-init dalam data pengguna Anda.

Berikut ini menunjukkan format bagian mime-multi.

```
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
	
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
	
#cloud-config
cloud-init directives
	
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
	
#!/bin/bash
shell script commands
--//--
```

Misalnya, data pengguna berikut menyertakan arahan cloud-init dan skrip bash shell. Arahan cloud-init membuat file (`/test-cloudinit/cloud-init.txt`), dan menulis `Created by cloud-init` ke file itu. Skrip bash shell membuat file (`/test-userscript/userscript.txt`) dan menulis `Created by bash shell script` ke file itu.

```
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
	
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
	
#cloud-config
runcmd:
- [ mkdir, /test-cloudinit ]
write_files:
- path: /test-cloudinit/cloud-init.txt
content: Created by cloud-init
	
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
	
#!/bin/bash
mkdir test-userscript
touch /test-userscript/userscript.txt
echo "Created by bash shell script" >> /test-userscript/userscript.txt
--//--
```

## Bagaimana Amazon EC2 menangani data pengguna untuk instans Windows
<a name="ec2-windows-user-data"></a>

Pada instance Windows, agen peluncuran melakukan tugas yang terkait dengan data pengguna. Untuk informasi selengkapnya, lihat berikut ini:
+ [EC2Luncurkan v2](ec2launch-v2.md) 
+ [EC2Peluncuran](ec2launch.md) 
+ [EC2Layanan Config](ec2config-service.md)

[Untuk contoh perakitan `UserData` properti dalam CloudFormation template, lihat [Base64 Encoded Property dan Base64 Encoded UserData Property](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-general.html#scenario-userdata-base64) dengan dan. UserData AccessKey SecretKey](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-general.html#scenario-userdata-base64-with-keys)

*Untuk contoh menjalankan perintah pada instance dalam grup Auto Scaling yang bekerja dengan kait siklus hidup, lihat [Tutorial: Mengonfigurasi data pengguna untuk mengambil status siklus hidup target melalui metadata instans di](https://docs.aws.amazon.com/autoscaling/ec2/userguide/tutorial-lifecycle-hook-instance-metadata.html) Panduan Pengguna Amazon EC2 Auto Scaling.*

**Topics**
+ [Skrip data pengguna](#user-data-scripts)
+ [Data pengguna terkompresi](#user-data-compressed)
+ [Eksekusi data pengguna](#user-data-execution)
+ [Data pengguna dan Alat untuk Windows PowerShell](#user-data-powershell)

### Skrip data pengguna
<a name="user-data-scripts"></a>

Untuk `EC2Config` atau `EC2Launch` untuk menjalankan skrip, Anda harus melampirkan skrip dalam tag khusus saat Anda menambahkannya ke data pengguna. Tag yang Anda gunakan tergantung pada apakah perintah berjalan di jendela Command Prompt (perintah batch) atau menggunakan WindowsPowerShell.

Jika Anda menentukan skrip batch dan skrip Windows, PowerShell skrip batch berjalan terlebih dahulu dan PowerShell skrip Windows berjalan berikutnya, terlepas dari urutan kemunculannya dalam data pengguna instance.

Jika Anda menggunakan AWS API, termasuk AWS CLI, dalam skrip data pengguna, Anda harus menggunakan profil instance saat meluncurkan instance. Profil instance menyediakan AWS kredensi yang sesuai yang diperlukan oleh skrip data pengguna untuk melakukan panggilan API. Untuk informasi selengkapnya, lihat [Profil instans](iam-roles-for-amazon-ec2.md#ec2-instance-profile). Izin yang Anda tetapkan ke peran IAM bergantung pada layanan mana yang Anda panggil dengan API. Untuk informasi selengkapnya, lihat [IAM role untuk Amazon EC2](iam-roles-for-amazon-ec2.md).

**Topics**
+ [Sintaks untuk skrip batch](#user-data-batch-scripts)
+ [Sintaks untuk skrip Windows PowerShell](#user-data-powershell-scripts)
+ [Sintaks untuk skrip konfigurasi YAML](#user-data-yaml-scripts)
+ [Enkode Base64](#user-data-base64-encoding)

#### Sintaks untuk skrip batch
<a name="user-data-batch-scripts"></a>

Tentukan skrip batch menggunakan tanda `script`. Pisahkan perintah menggunakan jeda baris seperti yang ditunjukkan dalam contoh berikut.

```
<script>
    echo Current date and time >> %SystemRoot%\Temp\test.log
    echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log
</script>
```

Secara default, skrip data pengguna dijalankan satu kali saat Anda meluncurkan instans. Untuk menjalankan skrip data pengguna setiap kali Anda melakukan boot ulang atau memulai instans, tambahkan `<persist>true</persist>` ke data pengguna.

```
<script>
    echo Current date and time >> %SystemRoot%\Temp\test.log
    echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log
</script>
<persist>true</persist>
```

**EC2Luncurkan agen v2**  
Untuk menjalankan skrip data pengguna XMLsebagai proses terpisah dengan **executeScript** tugas EC2 Launch v2 di `UserData` panggung, tambahkan `<detach>true</detach>` ke data pengguna.

**catatan**  
detachTag tidak didukung oleh agen peluncuran sebelumnya.

```
<script>
    echo Current date and time >> %SystemRoot%\Temp\test.log
    echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log
</script>
<detach>true</detach>
```

#### Sintaks untuk skrip Windows PowerShell
<a name="user-data-powershell-scripts"></a>

 AWS Windows AMIs menyertakan [AWS Tools for Windows PowerShell](https://aws.amazon.com/powershell/), sehingga Anda dapat menentukan cmdlet ini dalam data pengguna. Jika Anda mengaitkan peran IAM dengan instans, Anda tidak perlu menentukan kredensil ke cmdlet, karena aplikasi yang berjalan pada instance menggunakan kredenal peran untuk mengakses sumber daya ( AWS misalnya, bucket Amazon S3).

Tentukan PowerShell skrip Windows menggunakan `<powershell>` tag. Pisahkan perintah menggunakan jeda baris. Tag `<powershell>` tidak peka huruf besar/kecil.

Contoh:

```
<powershell>
    $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
```

Secara default, skrip data pengguna berjalan satu kali saat Anda meluncurkan instance. Untuk menjalankan skrip data pengguna setiap kali Anda melakukan boot ulang atau memulai instans, tambahkan `<persist>true</persist>` ke data pengguna.

```
<powershell>
    $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
<persist>true</persist>
```

Anda dapat menentukan satu atau lebih PowerShell argumen dengan `<powershellArguments>` tag. Jika tidak ada argumen yang diteruskan, EC2 EC2 Launch dan Launch v2 tambahkan argumen berikut secara default:`-ExecutionPolicy Unrestricted`.

**Contoh:**

```
<powershell>
    $file = $env:SystemRoot + "\Temp" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
<powershellArguments>-ExecutionPolicy Unrestricted -NoProfile -NonInteractive</powershellArguments>
```

**EC2Luncurkan agen v2**  
Untuk menjalankan skrip data pengguna XMLsebagai proses terpisah dengan **executeScript** tugas EC2 Launch v2 di `UserData` panggung, tambahkan `<detach>true</detach>` ke data pengguna.

**catatan**  
detachTag tidak didukung oleh agen peluncuran sebelumnya.

```
<powershell>
    $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
<detach>true</detach>
```

#### Sintaks untuk skrip konfigurasi YAML
<a name="user-data-yaml-scripts"></a>

Jika Anda menggunakan EC2 Launch v2 untuk menjalankan skrip, Anda dapat menggunakan format YAMAL. Untuk melihat tugas konfigurasi, detail, dan contoh untuk EC2 Launch v2, lihat[EC2Luncurkan konfigurasi tugas v2](ec2launch-v2-settings.md#ec2launch-v2-task-configuration).

Tentukan skrip YAML dengan tugas `executeScript`.

**Contoh sintaks YAMG untuk menjalankan skrip PowerShell ** 

```
version: 1.0
tasks:
- task: executeScript
  inputs:
  - frequency: always
    type: powershell
    runAs: localSystem
    content: |-
      $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
      New-Item $file -ItemType file
```

**Contoh sintaks YAML untuk menjalankan skrip batch**

```
version: 1.1
tasks:
- task: executeScript
  inputs:
  - frequency: always
    type: batch
    runAs: localSystem
    content: |-
      echo Current date and time >> %SystemRoot%\Temp\test.log
      echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log
```

#### Enkode Base64
<a name="user-data-base64-encoding"></a>

Jika Anda menggunakan API Amazon EC2 atau alat yang tidak melakukan enkode base64 pada data pengguna, Anda harus mengenkode sendiri data pengguna. Jika tidak, kesalahan akan dicatat tentang tidak dapat menemukan tanda `script` atau `powershell` yang akan dijalankan. Berikut ini adalah contoh yang menyandikan menggunakan Windows PowerShell .

```
$UserData = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Script))
```

Berikut ini adalah contoh yang menerjemahkan menggunakan PowerShell .

```
$Script = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($UserData))
```

[Untuk informasi lebih lanjut tentang pengkodean base64, lihat https://www.ietf. org/rfc/rfc](https://www.ietf.org/rfc/rfc4648.txt)4648.txt.

### Data pengguna terkompresi
<a name="user-data-compressed"></a>

EC2Launch v2 mendukung data pengguna zip sebagai metode untuk mengirimkan data pengguna yang lebih besar dari batas 16 KB yang diberlakukan oleh IMDS. Untuk menggunakan fitur ini, kompres skrip data pengguna Anda ke dalam `.zip` arsip dan teruskan ke instans EC2 Anda. Ketika EC2 Launch v2 mendeteksi data pengguna terkompresi, secara otomatis membuka ritsleting skrip data pengguna terkompresi dan menjalankannya.

Seperti halnya data pengguna standar, jika Anda menggunakan Amazon EC2 API atau alat yang tidak melakukan pengkodean base64 data pengguna, Anda harus menyandikan sendiri data pengguna yang dikompresi. Untuk informasi selengkapnya tentang batas ukuran data pengguna dan pengkodean base64, lihat. [Akses metadata instans untuk instans EC2](instancedata-data-retrieval.md)

### Eksekusi data pengguna
<a name="user-data-execution"></a>

Secara default, semua AWS Windows AMIs memiliki eksekusi data pengguna yang diaktifkan untuk peluncuran awal. Anda dapat menentukan bahwa skrip data pengguna dijalankan setiap kali instans di-boot ulang atau dimulai ulang. Atau, Anda dapat menentukan bahwa skrip data pengguna dijalankan setiap kali instans di-boot ulang atau dimulai ulang.

**catatan**  
Data pengguna tidak diaktifkan untuk dijalankan secara default setelah peluncuran awal. Agar data pengguna dapat dijalankan saat Anda melakukan boot ulang atau memulai instans, lihat [Jalankan skrip selama reboot atau mulai berikutnya](#user-data-scripts-subsequent).

Skrip data pengguna dijalankan dari akun administrator lokal ketika kata sandi acak dibuat. Jika tidak, skrip data pengguna dijalankan dari akun Sistem.

#### Skrip peluncuran instance
<a name="user-data-scripts-launch"></a>

Skrip dalam data pengguna instans dijalankan selama peluncuran awal instans. Jika tanda `persist` ditemukan, eksekusi data pengguna diaktifkan untuk boot ulang atau pemulaian berikutnya. File log untuk EC2 Launch v2, EC2 Launch, dan EC2 Config berisi output dari output standar dan aliran kesalahan standar.

**EC2Luncurkan v2**  
File log untuk EC2 Launch v2 adalah`C:\ProgramData\Amazon\EC2Launch\log\agent.log`.

**catatan**  
Folder `C:\ProgramData` mungkin tersembunyi. Untuk melihat folder, Anda harus menampilkan file dan folder yang tersembunyi.

Informasi berikut dicatat ketika data pengguna dijalankan:
+ `Info: Converting user-data to yaml format` – Jika data pengguna disediakan dalam format XML
+ `Info: Initialize user-data state` – Awal eksekusi data pengguna
+ `Info: Frequency is: always` – Jika tugas data pengguna berjalan di setiap boot
+ `Info: Frequency is: once` – Jika tugas data pengguna berjalan hanya sekali
+ `Stage: postReadyUserData execution completed` – Akhir eksekusi data pengguna

**EC2Peluncuran**  
File log untuk EC2 Launch adalah`C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log`.

Folder `C:\ProgramData` mungkin tersembunyi. Untuk melihat folder, Anda harus menampilkan file dan folder yang tersembunyi.

Informasi berikut dicatat ketika data pengguna dijalankan:
+ `Userdata execution begins` – Awal eksekusi data pengguna
+ `<persist> tag was provided: true` – Jika tanda yang masih ada ditemukan
+ `Running userdata on every boot` – Jika tanda yang masih ada ditemukan
+ `<powershell> tag was provided.. running powershell content` – Jika tanda powershell ditemukan
+ `<script> tag was provided.. running script content` – Jika tanda skrip ditemukan
+ `Message: The output from user scripts` – Jika skrip data pengguna dijalankan, maka outputnya dicatat

**EC2Config**  
File log untuk EC2 Config adalah. `C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2Config.log` Informasi berikut dicatat ketika data pengguna dijalankan:
+ `Ec2HandleUserData: Message: Start running user scripts` – Awal eksekusi data pengguna
+ `Ec2HandleUserData: Message: Re-enabled userdata execution` – Jika tanda yang masih ada ditemukan
+ `Ec2HandleUserData: Message: Could not find <persist> and </persist>` – Jika tanda yang masih ada tidak ditemukan
+ `Ec2HandleUserData: Message: The output from user scripts` – Jika skrip data pengguna dijalankan, maka outputnya dicatat

#### Jalankan skrip selama reboot atau mulai berikutnya
<a name="user-data-scripts-subsequent"></a>

Saat Anda memperbarui data pengguna instans, konten data pengguna yang diperbarui secara otomatis tercermin dalam metadata instans saat berikutnya Anda me-reboot atau memulai instance. Namun, tergantung pada agen peluncuran yang diinstal, konfigurasi tambahan mungkin diperlukan untuk mengonfigurasi skrip data pengguna agar berjalan pada reboot atau mulai berikutnya.

Jika Anda memilih opsi **Shutdown with Sysprep**, skrip data pengguna berjalan saat instance dimulai atau reboot berikutnya, bahkan jika Anda tidak mengaktifkan eksekusi data pengguna untuk reboot atau memulai berikutnya.

Untuk instruksi untuk mengaktifkan eksekusi data pengguna, pilih tab yang cocok dengan agen peluncuran Anda.

------
#### [ EC2Launch v2 ]

Tidak seperti EC2 Launch v1, EC2 Launch v2 mengevaluasi tugas data pengguna pada setiap boot. Tidak perlu menjadwalkan tugas data pengguna secara manual. Data pengguna berjalan berdasarkan frekuensi yang disertakan atau opsi bertahan.

Untuk skrip data pengguna XHTML  
Untuk menjalankan skrip data pengguna pada setiap boot, tambahkan `<persist>true</persist>` bendera ke data pengguna. Jika flag persisten tidak disertakan, skrip data pengguna hanya berjalan pada boot awal.

Untuk data pengguna YAMG  
+ Untuk menjalankan tugas dalam data pengguna pada boot awal, atur tugas `frequency` ke`once`.
+ Untuk menjalankan tugas dalam data pengguna pada setiap boot, atur tugas `frequency` ke`always`.

------
#### [ EC2Launch ]

1. Hubungkan ke instans Windows Anda.

1. Buka jendela PowerShell perintah dan jalankan salah satu perintah berikut:

**Jalankan sekali**  
Untuk menjalankan data pengguna sekali pada boot berikutnya, gunakan `-Schedule` bendera.

   ```
   C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
   ```

**Jalankan pada semua sepatu bot berikutnya**  
Untuk menjalankan data pengguna pada semua boot berikutnya, gunakan `-SchedulePerBoot` bendera.

   ```
   C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -SchedulePerBoot
   ```

1. Putuskan sambungan dari instans Windows Anda. Untuk menjalankan skrip yang diperbarui saat instans dimulai lagi nanti, hentikan instans dan perbarui data pengguna.

------
#### [ EC2Config ]

1. Hubungkan ke instans Windows Anda.

1. Buka `C:\Program Files\Amazon\Ec2ConfigService\Ec2ConfigServiceSetting.exe`.

1. Untuk **Data Pengguna** , pilih **Aktifkan UserData eksekusi untuk layanan berikutnya dimulai** .

1. Putuskan sambungan dari instans Windows Anda. Untuk menjalankan skrip yang diperbarui saat instans dimulai lagi nanti, hentikan instans dan perbarui data pengguna.

------

### Data pengguna dan Alat untuk Windows PowerShell
<a name="user-data-powershell"></a>

Anda dapat menggunakan Alat untuk Windows PowerShell untuk menentukan, memodifikasi, dan melihat data pengguna untuk instance Anda. Untuk informasi tentang melihat data pengguna dari instans Anda menggunakan metadata instans, lihat [Akses metadata instans untuk instans EC2](instancedata-data-retrieval.md). Untuk informasi tentang data pengguna dan AWS CLI, lihat[Data pengguna dan AWS CLI](#user-data-api-cli).

**Contoh: Tentukan data pengguna instans saat peluncuran**  
Buat file teks dengan data pengguna instans. Untuk menjalankan skrip data pengguna setiap kali Anda melakukan boot ulang atau memulai instans, tambahkan `<persist>true</persist>`, seperti yang ditunjukkan pada contoh berikut.

```
<powershell>
    $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
<persist>true</persist>
```

Untuk menentukan data pengguna instance saat Anda meluncurkan instance Anda, gunakan [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html)perintah. Perintah ini tidak melakukan enkode base64 pada data pengguna untuk Anda. Gunakan perintah berikut untuk menyandikan data pengguna dalam file teks bernama.`script.txt`

```
PS C:\> $Script = Get-Content -Raw script.txt
PS C:\> $UserData = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Script))
```

Gunakan parameter `-UserData` untuk meneruskan data pengguna ke perintah **New-EC2Instance**.

```
PS C:\> New-EC2Instance -ImageId ami-abcd1234 -MinCount 1 -MaxCount 1 -InstanceType m3.medium \
    -KeyName my-key-pair -SubnetId subnet-12345678 -SecurityGroupIds sg-1a2b3c4d \
    -UserData $UserData
```

**Contoh: Perbarui data pengguna instans untuk instans yang dihentikan**  
Anda dapat memodifikasi data pengguna dari instance yang dihentikan menggunakan [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html)perintah.

Buat file teks dengan skrip baru. Gunakan perintah berikut untuk menyandikan data pengguna dalam file teks bernama.`new-script.txt`

```
PS C:\> $NewScript = Get-Content -Raw new-script.txt
PS C:\> $NewUserData = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($NewScript))
```

Gunakan parameter `-UserData` dan `-Value` untuk menentukan data pengguna.

```
PS C:\> Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -Attribute userData -Value $NewUserData
```

**Contoh: Lihat data pengguna instans**  
Untuk mengambil data pengguna untuk sebuah contoh, gunakan [Get-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceAttribute.html)perintah.

```
PS C:\> (Get-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -Attribute userData).UserData
```

Berikut ini adalah output contoh. Perhatikan bahwa data pengguna dienkode.

```
PHBvd2Vyc2hlbGw+DQpSZW5hbWUtQ29tcHV0ZXIgLU5ld05hbWUgdXNlci1kYXRhLXRlc3QNCjwvcG93ZXJzaGVsbD4=
```

Gunakan perintah berikut untuk menyimpan data pengguna yang dienkode dalam variabel dan kemudian mendekodekannya.

```
PS C:\> $UserData_encoded = (Get-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -Attribute userData).UserData
PS C:\> [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($UserData_encoded))
```

Berikut ini adalah contoh output.

```
<powershell>
    $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
<persist>true</persist>
```

**Contoh: Ubah nama instans agar sesuai dengan nilai tanda**  
Anda dapat menggunakan [Get-EC2Tag](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Tag.html)perintah untuk membaca nilai tag, mengganti nama instance pada boot pertama agar sesuai dengan nilai tag, dan reboot. Untuk menjalankan perintah ini dengan sukses, Anda harus memiliki peran dengan izin `ec2:DescribeTags` yang dilampirkan ke instans karena informasi tag diambil dengan panggilan API. Untuk informasi selengkapnya tentang izin pengaturan menggunakan peran IAM, lihat. [Melampirkan IAM role ke instans](attach-iam-role.md)

------
#### [ IMDSv2 ]

```
<powershell>
    [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri 'http://169.254.169.254/latest/api/token' -UseBasicParsing
    $instanceId = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri 'http://169.254.169.254/latest/meta-data/instance-id' -UseBasicParsing
	$nameValue = (Get-EC2Tag -Filter @{Name="resource-id";Value=$instanceid},@{Name="key";Value="Name"}).Value
	$pattern = "^(?![0-9]{1,15}$)[a-zA-Z0-9-]{1,15}$"
	#Verify Name Value satisfies best practices for Windows hostnames
	If ($nameValue -match $pattern) 
	    {Try
	        {Rename-Computer -NewName $nameValue -Restart -ErrorAction Stop} 
	    Catch
	        {$ErrorMessage = $_.Exception.Message
	        Write-Output "Rename failed: $ErrorMessage"}}
	Else
	    {Throw "Provided name not a valid hostname. Please ensure Name value is between 1 and 15 characters in length and contains only alphanumeric or hyphen characters"}
</powershell>
```

------
#### [ IMDSv1 ]

```
<powershell>
	$instanceId = (Invoke-WebRequest http://169.254.169.254/latest/meta-data/instance-id -UseBasicParsing).content
	$nameValue = (Get-EC2Tag -Filter @{Name="resource-id";Value=$instanceid},@{Name="key";Value="Name"}).Value
	$pattern = "^(?![0-9]{1,15}$)[a-zA-Z0-9-]{1,15}$"
	#Verify Name Value satisfies best practices for Windows hostnames
	If ($nameValue -match $pattern) 
	    {Try
	        {Rename-Computer -NewName $nameValue -Restart -ErrorAction Stop} 
	    Catch
	        {$ErrorMessage = $_.Exception.Message
	        Write-Output "Rename failed: $ErrorMessage"}}
	Else
	    {Throw "Provided name not a valid hostname. Please ensure Name value is between 1 and 15 characters in length and contains only alphanumeric or hyphen characters"}
</powershell>
```

------

Anda juga dapat mengganti nama instans menggunakan tanda dalam metadata instans, jika instans Anda dikonfigurasi untuk mengakses tanda dari metadata instans. Lihat informasi yang lebih lengkap di [Lihat tag untuk instans EC2 Anda menggunakan metadata instans](work-with-tags-in-IMDS.md).

------
#### [ IMDSv2 ]

```
<powershell>
    [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri 'http://169.254.169.254/latest/api/token' -UseBasicParsing
	$nameValue = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri 'http://169.254.169.254/latest/meta-data/tags/instance/Name' -UseBasicParsing
	$pattern = "^(?![0-9]{1,15}$)[a-zA-Z0-9-]{1,15}$"
	#Verify Name Value satisfies best practices for Windows hostnames
	If ($nameValue -match $pattern) 
	    {Try
	        {Rename-Computer -NewName $nameValue -Restart -ErrorAction Stop} 
	    Catch
	        {$ErrorMessage = $_.Exception.Message
	        Write-Output "Rename failed: $ErrorMessage"}}
	Else
	    {Throw "Provided name not a valid hostname. Please ensure Name value is between 1 and 15 characters in length and contains only alphanumeric or hyphen characters"}
</powershell>
```

------
#### [ IMDSv1 ]

```
<powershell>
	$nameValue = Get-EC2InstanceMetadata -Path /tags/instance/Name
	$pattern = "^(?![0-9]{1,15}$)[a-zA-Z0-9-]{1,15}$"
	#Verify Name Value satisfies best practices for Windows hostnames
	If ($nameValue -match $pattern) 
	    {Try
	        {Rename-Computer -NewName $nameValue -Restart -ErrorAction Stop} 
	    Catch
	        {$ErrorMessage = $_.Exception.Message
	        Write-Output "Rename failed: $ErrorMessage"}}
	Else
	    {Throw "Provided name not a valid hostname. Please ensure Name value is between 1 and 15 characters in length and contains only alphanumeric or hyphen characters"}
</powershell>
```

------

# Identifikasi setiap instance yang diluncurkan dalam satu permintaan
<a name="AMI-launch-index-examples"></a>

Contoh ini menunjukkan bagaimana Anda dapat menggunakan data pengguna dan metadata instans untuk mengonfigurasi instans Amazon EC2 Anda.

**catatan**  
Contoh di bagian ini menggunakan IPv4 alamat 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 

Alice ingin meluncurkan empat instans AMI basis data favoritnya, di mana instans pertama bertindak sebagai instans asli dan tiga instans lainnya bertindak sebagai replika. Saat meluncurkannya, dia ingin menambahkan data pengguna tentang strategi replikasi untuk setiap replika. Dia sadar bahwa data ini akan tersedia untuk keempat instans, jadi dia perlu menyusun data pengguna dengan cara yang memungkinkan setiap instans untuk mengenali bagian mana yang dapat diterapkan padanya. Dia bisa melakukan ini dengan menggunakan nilai metadata instans `ami-launch-index`, yang akan unik untuk setiap instans. Jika ia memulai lebih dari satu instans secara bersamaan, maka `ami-launch-index` menunjukkan urutan peluncuran instans tersebut. Nilai instans pertama yang diluncurkan adalah `0`.

Berikut adalah data pengguna yang telah dibuat oleh Alice.

```
replicate-every=1min | replicate-every=5min | replicate-every=10min
```

Data `replicate-every=1min` menentukan konfigurasi replika pertama, `replicate-every=5min` menentukan konfigurasi replika kedua, dan seterusnya. Alice memutuskan untuk memberikan data ini sebagai string ASCII dengan simbol pipa (`|` ) yang membatasi data untuk instans terpisah.

Alice meluncurkan empat instans menggunakan perintah [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html), dengan menentukan data pengguna.

```
aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --count 4 \
    --instance-type t2.micro \
    --user-data "replicate-every=1min | replicate-every=5min | replicate-every=10min"
```

Setelah diluncurkan, semua instans memiliki salinan data pengguna dan metadata umum yang ditampilkan di sini:
+ ID AMI: ami-0abcdef1234567890
+ ID Reservasi: r-1234567890abcabc0
+ Kunci publik: tidak ada 
+ Nama grup keamanan: default
+ Tipe instans: t2.micro

Namun, setiap instance memiliki metadata unik, seperti yang ditunjukkan pada tabel berikut.


| Metadata | Nilai | 
| --- | --- | 
| instance-id | i-1234567890abcdef0 | 
| ami-launch-index | 0 | 
| public-hostname | ec2-203-0-113-25.compute-1.amazonaws.com | 
| public-ipv4 | 67.202.51.223 | 
| local-hostname | ip-10-251-50-12.ec2.internal | 
| local-ipv4 | 10.251.50.35 | 


| Metadata | Nilai | 
| --- | --- | 
| instance-id | i-0598c7d356eba48d7 | 
| ami-launch-index | 1 | 
| public-hostname | ec2-67-202-51-224.compute-1.amazonaws.com | 
| public-ipv4 | 67.202.51.224 | 
| local-hostname | ip-10-251-50-36.ec2.internal | 
| local-ipv4 | 10.251.50.36 | 


| Metadata | Nilai | 
| --- | --- | 
| instance-id | i-0ee992212549ce0e7 | 
| ami-launch-index | 2 | 
| public-hostname | ec2-67-202-51-225.compute-1.amazonaws.com | 
| public-ipv4 | 67.202.51.225 | 
| local-hostname | ip-10-251-50-37.ec2.internal | 
| local-ipv4 | 10.251.50.37 | 


| Metadata | Nilai | 
| --- | --- | 
| instance-id | i-1234567890abcdef0 | 
| ami-launch-index | 3 | 
| public-hostname | ec2-67-202-51-226.compute-1.amazonaws.com | 
| public-ipv4 | 67.202.51.226 | 
| local-hostname | ip-10-251-50-38.ec2.internal | 
| local-ipv4 | 10.251.50.38 | 

Alice bisa menggunakan nilai `ami-launch-index` untuk menentukan bagian mana dari data pengguna yang berlaku untuk instans tertentu.

1. Dia terhubung salah satu instans, dan mengambil `ami-launch-index` untuk instans tersebut agar dapat memastikan bahwa instans itu adalah salah satu replika:

------
#### [ IMDSv2 ]

   ```
   [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/meta-data/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-launch-index
   2
   ```

   Untuk langkah-langkah berikut, IMDSv2 permintaan menggunakan token yang disimpan dari IMDSv2 perintah sebelumnya, dengan asumsi token belum kedaluwarsa.

------
#### [ IMDSv1 ]

   ```
   [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-launch-index
   2
   ```

------

1. Dia menyimpan `ami-launch-index` sebagai variabel.

------
#### [ IMDSv2 ]

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

------
#### [ IMDSv1 ]

   ```
   [ec2-user ~]$ ami_launch_index=`curl http://169.254.169.254/latest/meta-data/ami-launch-index`
   ```

------

1. Dia menyimpan data pengguna sebagai variabel.

------
#### [ IMDSv2 ]

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

------
#### [ IMDSv1 ]

   ```
   [ec2-user ~]$ user_data=`curl http://169.254.169.254/latest/user-data`
   ```

------

1. Akhirnya, Alice menggunakan perintah **cut** untuk mengekstrak bagian dari data pengguna yang berlaku untuk instans itu.

------
#### [ IMDSv2 ]

   ```
   [ec2-user ~]$ echo $user_data | cut -d"|" -f"$ami_launch_index"
   replicate-every=5min
   ```

------
#### [ IMDSv1 ]

   ```
   [ec2-user ~]$ echo $user_data | cut -d"|" -f"$ami_launch_index"
   replicate-every=5min
   ```

------