

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

# Boot Aman UEFI untuk instans Amazon EC2
<a name="uefi-secure-boot"></a>

UEFI Secure Boot dibangun di atas proses boot aman lama Amazon EC2, dan menyediakan tambahan yang membantu pelanggan mengamankan perangkat lunak dari ancaman defense-in-depth yang bertahan selama reboot. UEFI Secure Boot memastikan bahwa instans hanya melakukan boot perangkat lunak yang diberi tanda dengan kunci kriptografi. Kunci disimpan dalam basis data kunci di [penyimpanan variabel non-volatile UEFI](uefi-variables.md). UEFI Secure Boot mencegah modifikasi yang tidak sah dari aliran boot instans.

**Topics**
+ [Cara kerja Boot Aman UEFI dengan instans Amazon EC2](how-uefi-secure-boot-works.md)
+ [Persyaratan untuk Boot Aman UEFI di Amazon EC2](launch-instance-with-uefi-sb.md)
+ [Verifikasi apakah instans Amazon EC2 diaktifkan untuk Boot Aman UEFI](verify-uefi-secure-boot.md)
+ [Buat AMI Linux dengan tombol Boot Aman UEFI kustom](create-ami-with-uefi-secure-boot.md)
+ [Buat gumpalan AWS biner untuk UEFI Secure Boot](aws-binary-blob-creation.md)

# Cara kerja Boot Aman UEFI dengan instans Amazon EC2
<a name="how-uefi-secure-boot-works"></a>

UEFI Secure Boot adalah fitur yang ditentukan dalam UEFI, yang menyediakan verifikasi tentang keadaan rantai boot. UEFI Secure Boot dirancang untuk memastikan bahwa hanya binari UEFI yang terverifikasi secara kriptografis yang akan dieksekusi setelah inisialisasi mandiri pada firmware. Binari ini termasuk driver UEFI dan bootloader utama, serta komponen yang dimuat rantai.

UEFI Secure Boot menetapkan empat basis data utama, yang digunakan dalam rantai kepercayaan. Basis data disimpan di penyimpanan variabel UEFI.

Rantai kepercayaan tersebut adalah sebagai berikut:

**Basis data kunci platform (PK)**  
Basis data PK adalah root kepercayaan. Basis data ini berisi satu kunci PK publik yang digunakan dalam rantai kepercayaan untuk memperbarui basis data kunci untuk pertukaran kunci (KEK).  
Untuk mengubah basis data PK, Anda harus memiliki kunci PK privat untuk menandatangani permintaan pembaruan. Ini termasuk menghapus basis data PK dengan menulis kunci PK kosong.

**Basis data kunci untuk pertukaran kunci (KEK)**  
Basis data KEK adalah daftar kunci KEK publik yang digunakan dalam rantai kepercayaan untuk memperbarui basis data tanda tangan (db) dan denylist (dbx).  
Untuk mengubah basis data KEK publik, Anda harus memiliki kunci PK privat untuk menandatangani permintaan pembaruan.

**Basis data tanda tangan (db)**  
Basis data db adalah daftar kunci publik dan hash yang digunakan dalam rantai kepercayaan untuk memvalidasi semua binari boot UEFI.  
Untuk mengubah basis data db, Anda harus memiliki kunci PK privat atau salah satu kunci KEK privat untuk menandatangani permintaan pembaruan.

**Basis data denylist tanda tangan (dbx)**  
Basis data dbx adalah daftar kunci publik dan hash biner yang tidak tepercaya, dan digunakan dalam rantai kepercayaan sebagai file pencabutan.  
Basis data dbx selalu diutamakan daripada semua basis data kunci lainnya.  
Untuk mengubah basis data dbx, Anda harus memiliki kunci PK privat atau kunci KEK privat apa pun untuk menandatangani permintaan pembaruan.  
Forum UEFI mengelola dbx yang tersedia untuk umum untuk banyak biner dan sertifikat yang diketahui buruk di [https://uefi.org/revocationlistfile](https://uefi.org/revocationlistfile).

**penting**  
UEFI Secure Boot memberlakukan validasi tanda tangan pada binari UEFI apa pun. Untuk mengizinkan eksekusi biner UEFI di UEFI Secure Boot, Anda menandatanganinya dengan salah satu kunci db privat yang dijelaskan di atas.

Secara default, UEFI Secure Boot dinonaktifkan dan sistem ada pada `SetupMode`. Ketika sistem ada di `SetupMode`, semua variabel kunci dapat diperbarui tanpa tanda tangan kriptografis. Ketika PK diatur, UEFI Secure Boot diaktifkan dan keluar. SetupMode 

# Persyaratan untuk Boot Aman UEFI di Amazon EC2
<a name="launch-instance-with-uefi-sb"></a>

Saat Anda [meluncurkan instans Amazon EC2](LaunchingAndUsingInstances.md) dengan AMI yang didukung dan jenis instans yang didukung, instance tersebut akan secara otomatis memvalidasi binari boot UEFI terhadap database Boot Aman UEFI. Tidak diperlukan konfigurasi tambahan. Anda juga dapat mengonfigurasi UEFI Secure Boot pada sebuah instans setelah diluncurkan.

**catatan**  
UEFI Secure Boot melindungi instans Anda dan sistem operasinya dari perubahan aliran boot. Jika Anda membuat AMI baru dari sumber AMI yang mengaktifkan UEFI Secure Boot dan memodifikasi parameter tertentu selama proses penyalinan, seperti mengubah bagian `UefiData` dalam AMI, Anda dapat menonaktifkan Boot Aman UEFI.

**Topics**
+ [Didukung AMIs](#uefi-amis)
+ [Tipe instans yang didukung](#uefi-instance)

## Didukung AMIs
<a name="uefi-amis"></a>

**Linux AMIs**  
Untuk meluncurkan instance Linux, AMI Linux harus mengaktifkan UEFI Secure Boot.

Amazon Linux mendukung UEFI Secure Boot dimulai dengan AL2023 rilis 2023.1. Namun, Boot Aman UEFI tidak diaktifkan secara default. AMIs Untuk informasi selengkapnya, lihat [Boot Aman UEFI](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html) di *AL2023 Panduan Pengguna*. Versi lama Amazon Linux AMIs tidak diaktifkan untuk UEFI Secure Boot. Agar dapat menggunakan AMI yang didukung, Anda harus melakukan sejumlah langkah konfigurasi pada Linux AMI Anda sendiri. Untuk informasi selengkapnya, lihat [Buat AMI Linux dengan tombol Boot Aman UEFI kustom](create-ami-with-uefi-secure-boot.md).

**Jendela AMIs**  
Untuk meluncurkan instance Windows, AMI Windows harus mengaktifkan UEFI Secure Boot. *Untuk menemukan AMI AWS Windows yang telah dikonfigurasi sebelumnya untuk Boot Aman UEFI dengan kunci Microsoft, lihat [Temukan Windows Server yang AMIs dikonfigurasi dengan NitRotPM dan UEFI](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ami-windows-tpm.html#ami-windows-tpm-find) Secure Boot di Referensi Windows.AWS AMIs *

[Saat ini, kami tidak mendukung mengimpor Windows dengan UEFI Secure Boot dengan menggunakan perintah import-image.](https://docs.aws.amazon.com/cli/latest/reference/ec2/import-image.html)

## Tipe instans yang didukung
<a name="uefi-instance"></a>

Semua jenis instans virtual yang mendukung UEFI juga mendukung UEFI Secure Boot. Untuk tipe instans yang mendukung UEFI Secure Boot, lihat [Persyaratan untuk mode boot UEFI](launch-instance-boot-mode.md).

**catatan**  
Tipe instans bare metal tidak mendukung UEFI Secure Boot.

# Verifikasi apakah instans Amazon EC2 diaktifkan untuk Boot Aman UEFI
<a name="verify-uefi-secure-boot"></a>

Anda dapat menggunakan prosedur berikut untuk menentukan apakah Amazon EC2 diaktifkan untuk Boot Aman UEFI.

## Instans Linux
<a name="verify-uefi-secure-boot-linux"></a>

Anda dapat menggunakan utilitas `mokutil` untuk memverifikasi apakah instans Linux diaktifkan untuk UEFI Secure Boot. Jika `mokutil` tidak diinstal pada instans Anda, Anda harus menginstalnya. Untuk petunjuk penginstalan Amazon Linux 2, lihat [Menemukan dan menginstal paket perangkat lunak pada instans Amazon Linux 2](https://docs.aws.amazon.com/linux/al2/ug/find-install-software.html). Untuk distribusi Linux lainnya, lihat dokumentasi spesifiknya.

**Untuk memverifikasi apakah sebuah instans Linux diaktifkan untuk UEFI Secure Boot**  
Connect ke instance Anda dan jalankan perintah berikut seperti `root` pada jendela terminal.

```
mokutil --sb-state 
```

Berikut ini adalah output contoh.
+ Jika UEFI Secure Boot diaktifkan, output berisi `SecureBoot enabled`.
+ Jika UEFI Secure Boot tidak diaktifkan, output berisi `SecureBoot disabled` atau `Failed to read SecureBoot`.

## Instans Windows
<a name="verify-uefi-secure-boot-windows"></a>

**Untuk memverifikasi apakah sebuah instans Windows diaktifkan untuk UEFI Secure Boot**

1. Terhubung ke instans Anda.

1. Buka alat msinfo32.

1. Periksa bidang **Kondisi Secure Boot**. Jika UEFI Secure Boot diaktifkan, nilainya **Didukung**, seperti yang ditunjukkan pada gambar berikut.  
![\[Kondisi Secure Boot dalam Informasi Sistem.\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/images/secure-boot-state-win.png)

Anda juga dapat menggunakan Windows PowerShell Cmdlet `Confirm-SecureBootUEFI` untuk memeriksa status Boot Aman. Untuk informasi selengkapnya tentang cmdlet, lihat [Konfirmasi- SecureBoot UEFI di](https://learn.microsoft.com/en-us/powershell/module/secureboot/confirm-securebootuefi) Dokumentasi Microsoft.

# Buat AMI Linux dengan tombol Boot Aman UEFI kustom
<a name="create-ami-with-uefi-secure-boot"></a>

Petunjuk ini menunjukkan kepada Anda cara membuat AMI Linux dengan UEFI Secure Boot dan kunci pribadi yang dibuat khusus. Amazon Linux mendukung UEFI Secure Boot dimulai dengan AL2023 rilis 2023.1. Untuk informasi selengkapnya, lihat [Boot Aman UEFI aktif AL2023](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html) di Panduan Pengguna *Amazon Linux 2023*.

**penting**  
Prosedur berikut ditujukan untuk **pengguna tingkat lanjut saja**. Anda harus memiliki pengetahuan yang cukup tentang alur boot distribusi SSL dan Linux untuk menggunakan prosedur ini.

**Prasyarat**
+ Alat-alat berikut akan digunakan:
  + OpenSSL – [https://www.openssl.org/](https://www.openssl.org/)
  + [efivar — efivar https://github.com/rhboot/](https://github.com/rhboot/efivar)
  + [efitools - https://git.kernel. org/pub/scm/linux/kernel/git/jejb/efitools.git/](https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/)
  + Perintah [get-instance-uefi-data](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html)
+ Instans Linux Anda harus telah diluncurkan dengan AMI Linux yang mendukung mode boot UEFI, dan memiliki data non-volatile.

Instans yang baru dibuat tanpa kunci UEFI Secure Boot akan dibuat di `SetupMode`, yang memungkinkan Anda untuk mendaftarkan kunci Anda sendiri. Beberapa AMIs datang pra-konfigurasi dengan UEFI Secure Boot dan Anda tidak dapat mengubah kunci yang ada. Jika Anda ingin mengubah kunci, Anda harus membuat AMI baru berdasarkan AMI yang asli.

Anda memiliki dua cara untuk menyebarkan kunci di penyimpanan variabel, yang dijelaskan dalam Opsi A dan Opsi B di bawah ini. Opsi A menjelaskan bagaimana melakukan ini dari dalam instans, meniru aliran perangkat keras nyata. Opsi B menjelaskan cara membuat gumpalan biner, yang kemudian diteruskan sebagai file base64 saat Anda membuat AMI. Untuk kedua opsi, Anda harus terlebih dahulu membuat tiga pasang kunci, yang digunakan untuk rantai kepercayaan.

**Topics**
+ [Tugas 1: Buat pasangan kunci](#uefi-secure-boot-create-three-key-pairs)
+ [Tugas 2 - Opsi A: Tambahkan kunci ke toko variabel dari dalam instance](#uefi-secure-boot-optionA)
+ [Tugas 2 - Opsi B: Buat gumpalan biner yang berisi penyimpanan variabel yang telah diisi sebelumnya](#uefi-secure-boot-optionB)

## Tugas 1: Buat pasangan kunci
<a name="uefi-secure-boot-create-three-key-pairs"></a>

UEFI Secure Boot didasarkan pada tiga basis data utama berikut, yang digunakan dalam rantai kepercayaan: kunci platform (PK), kunci untuk pertukaran kunci (KEK), dan basis data (db) tanda tangan.¹

Anda membuat setiap kunci pada instans. Untuk menyiapkan kunci publik dalam format yang valid untuk standar UEFI Secure Boot, Anda membuat sertifikat untuk setiap kunci. `DER` mendefinisikan format SSL (pengodean biner suatu format). Anda kemudian mengonversi setiap sertifikat menjadi daftar tanda tangan UEFI, yang merupakan format biner yang dipahami oleh UEFI Secure Boot. Terakhir, Anda menandatangani setiap sertifikat dengan kunci yang relevan.

**Topics**
+ [Bersiap untuk membuat pasangan kunci](#uefisb-prepare-to-create-key-pairs)
+ [Pasangan kunci 1: Buat kunci platform (PK)](#uefisb-create-key-pair-1)
+ [Pasangan kunci 2: Buat kunci untuk pertukaran kunci (KEK)](#uefisb-create-key-pair-2)
+ [Pasangan kunci 3: Buat basis data (db) tanda tangan](#uefisb-create-key-pair-3)
+ [Tanda tangani gambar boot (kernel) dengan kunci privat](#uefi-secure-boot-sign-kernel)

### Bersiap untuk membuat pasangan kunci
<a name="uefisb-prepare-to-create-key-pairs"></a>

Sebelum membuat pasangan kunci, buat pengidentifikasi unik global (GUID) untuk digunakan dalam pembuatan kunci.

1. [Hubungkan ke instans.](connect.md)

1. Jalankan perintah berikut di prompt shell.

   ```
   uuidgen --random > GUID.txt
   ```

### Pasangan kunci 1: Buat kunci platform (PK)
<a name="uefisb-create-key-pair-1"></a>

PK adalah root kepercayaan untuk instans UEFI Secure Boot. PK privat digunakan untuk memperbarui KEK, yang nantinya dapat digunakan untuk menambahkan kunci resmi ke basis data (db) tanda tangan.

Standar X.509 digunakan untuk membuat pasangan kunci. Untuk informasi tentang standar yang digunakan, lihat [X.509](https://en.wikipedia.org/wiki/X.509) di *Wikipedia*.

**Untuk membuat PK**

1. Buat kunci. Anda harus memberi nama variabel `PK`.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=Platform key/" -out PK.crt
   ```

   Parameter berikut ditentukan:
   + `-keyout PK.key` – File kunci privat.
   + `-days 3650` – Jumlah hari sertifikat tersebut valid.
   + `-out PK.crt` – Sertifikat yang digunakan untuk membuat variabel UEFI.
   + `CN=Platform key` – Nama umum (CN) untuk kunci. Anda dapat memasukkan nama organisasi Anda sendiri alih-alih*Platform key*.

1. Buat sertifikat.

   ```
   openssl x509 -outform DER -in PK.crt -out PK.cer
   ```

1. Konversi sertifikat menjadi daftar tanda tangan UEFI.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
   ```

1. Tanda tangani daftar tanda tangan UEFI dengan PK privat (yang ditandatangani sendiri).

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth
   ```

### Pasangan kunci 2: Buat kunci untuk pertukaran kunci (KEK)
<a name="uefisb-create-key-pair-2"></a>

KEK privat digunakan untuk menambahkan kunci ke db, yang merupakan daftar tanda tangan resmi untuk boot pada sistem. 

**Untuk membuat PK**

1. Buat kunci.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=Key Exchange Key/" -out KEK.crt
   ```

1. Buat sertifikat.

   ```
   openssl x509 -outform DER -in KEK.crt -out KEK.cer
   ```

1. Konversi sertifikat menjadi daftar tanda tangan UEFI.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
   ```

1. Tanda tangani daftar tanda tangan dengan PK privat.

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth
   ```

### Pasangan kunci 3: Buat basis data (db) tanda tangan
<a name="uefisb-create-key-pair-3"></a>

Daftar db berisi kunci resmi yang diizinkan untuk di-boot pada sistem. Untuk memodifikasi daftar ini, diperlukan KEK privat. Gambar boot akan ditandatangani dengan kunci privat yang dibuat pada langkah ini.

**Untuk membuat PK**

1. Buat kunci.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=Signature Database key/" -out db.crt
   ```

1. Buat sertifikat.

   ```
   openssl x509 -outform DER -in db.crt -out db.cer
   ```

1. Konversi sertifikat menjadi daftar tanda tangan UEFI.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
   ```

1. Tanda tangani daftar tanda tangan dengan KEK privat.

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth
   ```

### Tanda tangani gambar boot (kernel) dengan kunci privat
<a name="uefi-secure-boot-sign-kernel"></a>

Untuk Ubuntu 22.04, gambar berikut memerlukan tanda tangan.

```
/boot/efi/EFI/ubuntu/shimx64.efi
/boot/efi/EFI/ubuntu/mmx64.efi
/boot/efi/EFI/ubuntu/grubx64.efi
/boot/vmlinuz
```

**Untuk menandatangani gambar**  
Gunakan sintaksis berikut untuk menandatangani gambar.

```
sbsign --key db.key --cert db.crt --output /boot/vmlinuz /boot/vmlinuz
```

**catatan**  
Anda harus menandatangani semua kernel baru. *`/boot/vmlinuz`* biasanya akan symlink ke kernel yang terakhir diinstal.

Lihat dokumentasi distribusi Anda untuk menemukan rantai boot dan gambar yang diperlukan.

¹ Terima kasih kepada ArchWiki komunitas untuk semua pekerjaan yang telah mereka lakukan. Perintah untuk membuat PK, membuat KEK, membuat DB, dan menandatangani gambar berasal dari [Creating keys](https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Creating_keys), yang ditulis oleh Tim ArchWiki and/or Pemeliharaan kontributor. ArchWiki 

## Tugas 2 - Opsi A: Tambahkan kunci ke toko variabel dari dalam instance
<a name="uefi-secure-boot-optionA"></a>

Setelah Anda membuat [tiga pasang kunci](#uefi-secure-boot-create-three-key-pairs), Anda dapat terhubung ke instans Anda dan menambahkan kunci ke penyimpanan variabel dari dalam instans dengan menyelesaikan langkah-langkah berikut. Atau, selesaikan langkah-langkahnya[Tugas 2 - Opsi B: Buat gumpalan biner yang berisi penyimpanan variabel yang telah diisi sebelumnya](#uefi-secure-boot-optionB).

**Topics**
+ [Langkah 1: Luncurkan instans yang akan mendukung UEFI Secure Boot](#step1-launch-uefi-sb)
+ [Langkah 2: Konfigurasikan instans untuk mendukung UEFI Secure Boot](#step2-launch-uefi-sb)
+ [Langkah 3: Buat AMI dari instans](#step3-launch-uefi-sb)

### Langkah 1: Luncurkan instans yang akan mendukung UEFI Secure Boot
<a name="step1-launch-uefi-sb"></a>

Ketika Anda [meluncurkan sebuah instans](LaunchingAndUsingInstances.md) dengan prasyarat berikut, instans kemudian akan siap untuk dikonfigurasi untuk mendukung UEFI Secure Boot. Anda hanya dapat mengaktifkan dukungan untuk UEFI Secure Boot pada instans saat peluncuran; Anda tidak dapat mengaktifkannya nanti.

**Prasyarat**
+ **AMI** – AMI Linux harus mendukung mode boot UEFI. Untuk memverifikasi bahwa AMI mendukung mode boot UEFI, parameter mode boot AMI harus **uefi**. Untuk informasi selengkapnya, lihat [Tentukan parameter mode boot dari Amazon EC2 AMI](ami-boot-mode.md).

  Perhatikan bahwa AWS hanya menyediakan Linux yang AMIs dikonfigurasi untuk mendukung UEFI untuk jenis instans berbasis Graviton. AWS saat ini tidak menyediakan x86\$164 Linux AMIs yang mendukung mode boot UEFI. Anda dapat mengonfigurasi AMI Anda sendiri untuk mendukung mode boot UEFI untuk semua arsitektur. Untuk mengonfigurasi AMI Anda sendiri untuk mendukung mode boot UEFI, Anda harus melakukan sejumlah langkah konfigurasi pada AMI Anda sendiri. Untuk informasi selengkapnya, lihat [Mengatur mode boot Amazon EC2 AMI](set-ami-boot-mode.md).
+ **Tipe instans** – Semua tipe instans virtual yang mendukung UEFI juga mendukung UEFI Secure Boot. Tipe instans bare metal tidak mendukung UEFI Secure Boot. Untuk tipe instans yang mendukung UEFI Secure Boot, lihat [Persyaratan untuk mode boot UEFI](launch-instance-boot-mode.md).
+ Luncurkan instans Anda setelah rilis UEFI Secure Boot. Hanya instans yang diluncurkan setelah 10 Mei 2022 (saat UEFI Secure Boot dirilis) yang dapat mendukung UEFI Secure Boot.

Setelah Anda meluncurkan instans Anda, Anda dapat memverifikasi bahwa instans siap dikonfigurasi untuk mendukung UEFI Secure Boot (dengan kata lain, Anda dapat melanjutkan ke [Langkah 2](#step2-launch-uefi-sb)) dengan memeriksa apakah tersedia data UEFI. Keberadaan data UEFI menunjukkan bahwa data non-volatile tetap ada.

**Untuk memverifikasi apakah instans Anda siap untuk Langkah 2**  
Gunakan perintah [https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) dan tentukan ID instans.

```
aws ec2 get-instance-uefi-data --instance-id i-1234567890abcdef0
```

Instans siap untuk Langkah 2 jika data UEFI sudah tersedia dalam output. Jika output kosong, instans tidak dapat dikonfigurasi untuk mendukung UEFI Secure Boot. Hal ini dapat terjadi jika instans Anda diluncurkan sebelum dukungan UEFI Secure Boot tersedia. Luncurkan instans baru dan coba lagi.

### Langkah 2: Konfigurasikan instans untuk mendukung UEFI Secure Boot
<a name="step2-launch-uefi-sb"></a>

#### Daftarkan pasangan kunci di penyimpanan variabel UEFI Anda pada instans
<a name="step2a-launch-uefi-sb"></a>

**Awas**  
Anda harus menandatangani gambar boot Anda *setelah* Anda mendaftarkan kunci, jika tidak, Anda tidak akan dapat melakukan boot instans Anda.

Setelah Anda membuat daftar tanda tangan UEFI yang ditandatangani (`PK`, `KEK`, dan `db`), tanda tangan tersebut harus terdaftar ke firmware UEFI.

Penulisan ke variabel `PK` hanya dapat dilakukan jika:
+ Belum ada PK yang terdaftar, yang ditunjukkan jika variabel `SetupMode` nya `1`. Periksa ini dengan menggunakan perintah berikut. Outputnya adalah `1` atau `0`.

  ```
  efivar -d -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-SetupMode 
  ```
+ PK yang baru ditandatangani oleh kunci privat dari PK yang ada.

**Untuk mendaftarkan kunci di penyimpanan variabel UEFI Anda**  
Perintah berikut harus dijalankan pada instans.

Jika SetupMode diaktifkan (nilainya`1`), kunci dapat didaftarkan dengan menjalankan perintah berikut pada instance:

```
[ec2-user ~]$ efi-updatevar -f db.auth db
```

```
[ec2-user ~]$ efi-updatevar -f KEK.auth KEK
```

```
[ec2-user ~]$ efi-updatevar -f PK.auth PK
```

**Untuk memverifikasi bahwa UEFI Secure Boot diaktifkan**  
Untuk memverifikasi bahwa UEFI Secure Boot diaktifkan, ikuti langkah-langkah di [Verifikasi apakah instans Amazon EC2 diaktifkan untuk Boot Aman UEFI](verify-uefi-secure-boot.md).

Anda sekarang dapat mengekspor penyimpanan variabel UEFI Anda dengan perintah CLI [https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html), atau Anda melanjutkan ke langkah berikutnya dan menandatangani gambar boot Anda untuk boot ulang ke instans dengan UEFI Secure Boot diaktifkan.

### Langkah 3: Buat AMI dari instans
<a name="step3-launch-uefi-sb"></a>

Untuk membuat AMI dari instance, Anda dapat menggunakan konsol atau `CreateImage` API, CLI, atau. SDKs Untuk instruksi konsol, lihat [Buat AMI yang didukung Amazon EBS-Backed](creating-an-ami-ebs.md). Untuk petunjuk API, lihat [CreateImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html).

**catatan**  
API `CreateImage` secara otomatis menyalin penyimpanan variabel UEFI dari instans ke AMI. Konsol menggunakan API `CreateImage`. Setelah Anda meluncurkan instans menggunakan AMI ini, instans akan memiliki penyimpanan variabel UEFI yang sama.

## Tugas 2 - Opsi B: Buat gumpalan biner yang berisi penyimpanan variabel yang telah diisi sebelumnya
<a name="uefi-secure-boot-optionB"></a>

Setelah Anda membuat [tiga pasangan kunci](#uefi-secure-boot-create-three-key-pairs), Anda dapat membuat gumpalan biner yang berisi penyimpanan variabel yang telah diisi sebelumnya yang berisi kunci UEFI Secure Boot. Atau, selesaikan langkah-langkahnya[Tugas 2 - Opsi A: Tambahkan kunci ke toko variabel dari dalam instance](#uefi-secure-boot-optionA).

**Awas**  
Anda harus menandatangani gambar boot Anda *sebelum* mendaftarkan kunci, jika tidak, Anda tidak akan dapat melakukan boot instans Anda.

**Topics**
+ [Langkah 1: Buat penyimpanan variabel baru atau perbarui yang sudah ada](#uefi-secure-boot-create-or-update-variable)
+ [Langkah 2: Unggah gumpalan biner pada pembuatan AMI](#uefi-secure-boot-upload-binary-blob-on-ami-creation)

### Langkah 1: Buat penyimpanan variabel baru atau perbarui yang sudah ada
<a name="uefi-secure-boot-create-or-update-variable"></a>

Anda dapat membuat penyimpanan variabel *offline* tanpa instans yang berjalan dengan menggunakan python-uefivars. Alat ini dapat membuat penyimpanan variabel baru dari kunci Anda. Skrip saat ini mendukung EDK2 format, AWS format, dan representasi JSON yang lebih mudah diedit dengan perkakas tingkat yang lebih tinggi.

**Untuk membuat penyimpanan variabel offline tanpa instans yang berjalan**

1. Unduh alat di tautan berikut.

   ```
   https://github.com/awslabs/python-uefivars
   ```

1. Buat penyimpanan variabel baru dari kunci Anda dengan menjalankan perintah berikut. Ini akan membuat gumpalan biner berenkode base64 di.bin. *your\$1binary\$1blob* Alat ini juga mendukung pembaruan gumpalan biner melalui parameter `-I`.

   ```
   ./uefivars.py -i none -o aws -O your_binary_blob.bin -P PK.esl -K KEK.esl --db db.esl --dbx dbx.esl
   ```

### Langkah 2: Unggah gumpalan biner pada pembuatan AMI
<a name="uefi-secure-boot-upload-binary-blob-on-ami-creation"></a>

Gunakan [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) untuk meneruskan data penyimpanan variabel UEFI Anda. Untuk parameter `--uefi-data`, tentukan gumpalan biner Anda, dan untuk parameter `--boot-mode`, tentukan `uefi`.

```
aws ec2 register-image \
    --name uefi_sb_tpm_register_image_test \
    --uefi-data $(cat your_binary_blob.bin) \
    --block-device-mappings "DeviceName=/dev/sda1,Ebs= {SnapshotId=snap-0123456789example,DeleteOnTermination=true}" \
    --architecture x86_64 \
    --root-device-name /dev/sda1 \
    --virtualization-type hvm \
    --ena-support \
    --boot-mode uefi
```

# Buat gumpalan AWS biner untuk UEFI Secure Boot
<a name="aws-binary-blob-creation"></a>

Anda dapat menggunakan langkah-langkah berikut untuk mengkustomisasi variabel UEFI Secure Boot selama pembuatan AMI. KEK yang digunakan dalam langkah-langkah ini berlaku per September 2021. Jika Microsoft memperbarui KEK, Anda harus menggunakan KEK terbaru.

**Untuk membuat gumpalan AWS biner**

1. Buat daftar tanda tangan PK kosong.

   ```
   touch empty_key.crt
   cert-to-efi-sig-list empty_key.crt PK.esl
   ```

1. Unduh sertifikat KEK.

   ```
   https://go.microsoft.com/fwlink/?LinkId=321185
   ```

1. Bungkus sertifikat KEK dalam daftar tanda tangan UEFI (`siglist`).

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK.esl MicCorKEKCA2011_2011-06-24.crt 
   ```

1. Unduh sertifikat db Microsoft.

   ```
   https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt
   https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt
   ```

1. Hasilkan daftar tanda tangan db.

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db.esl MicWinProPCA2011_2011-10-19.crt
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db.esl MicCorUEFCA2011_2011-06-27.crt
   cat MS_Win_db.esl MS_UEFI_db.esl > MS_db.esl
   ```

1. Unified Extensible Firmware Interface Forum tidak lagi menyediakan file DBX. Mereka sekarang disediakan oleh Microsoft di GitHub. [Unduh pembaruan DBX terbaru dari repositori pembaruan Microsoft Secure Boot di secureboot\$1objects. https://github.com/microsoft/](https://github.com/microsoft/secureboot_objects)

1. Buka paket biner pembaruan yang ditandatangani.

   Buat `SplitDbxContent.ps1` dengan konten skrip di bawah ini. Atau, Anda dapat menginstal skrip dari [PowerShell Galeri](https://www.powershellgallery.com/packages/SplitDbxContent/1.0) menggunakan`Install-Script -Name SplitDbxContent`.

   ```
   <#PSScriptInfo
    
   .VERSION 1.0
    
   .GUID ec45a3fc-5e87-4d90-b55e-bdea083f732d
    
   .AUTHOR Microsoft Secure Boot Team
    
   .COMPANYNAME Microsoft
    
   .COPYRIGHT Microsoft
    
   .TAGS Windows Security
    
   .LICENSEURI
    
   .PROJECTURI
    
   .ICONURI
    
   .EXTERNALMODULEDEPENDENCIES
    
   .REQUIREDSCRIPTS
    
   .EXTERNALSCRIPTDEPENDENCIES
    
   .RELEASENOTES
   Version 1.0: Original published version.
    
   #>
   
   <#
   .DESCRIPTION
    Splits a DBX update package into the new DBX variable contents and the signature authorizing the change.
    To apply an update using the output files of this script, try:
    Set-SecureBootUefi -Name dbx -ContentFilePath .\content.bin -SignedFilePath .\signature.p7 -Time 2010-03-06T19:17:21Z -AppendWrite'
   .EXAMPLE
   .\SplitDbxAuthInfo.ps1 DbxUpdate_x64.bin
   #>
   
   
   # Get file from script input
   $file  = Get-Content -Encoding Byte $args[0]
   
   # Identify file signature
   $chop = $file[40..($file.Length - 1)]
   if (($chop[0] -ne 0x30) -or ($chop[1] -ne 0x82 )) {
       Write-Error "Cannot find signature"
       exit 1
   }
   
   # Signature is known to be ASN size plus header of 4 bytes
   $sig_length = ($chop[2] * 256) + $chop[3] + 4
   $sig = $chop[0..($sig_length - 1)]
   
   if ($sig_length -gt ($file.Length + 40)) {
       Write-Error "Signature longer than file size!"
       exit 1
   }
   
   # Content is everything else
   $content = $file[0..39] + $chop[$sig_length..($chop.Length - 1)]
   
   # Write signature and content to files
   Set-Content -Encoding Byte signature.p7 $sig
   Set-Content -Encoding Byte content.bin $content
   ```

   Gunakan skrip untuk membongkar file DBX yang ditandatangani.

   ```
   PS C:\Windows\system32> SplitDbxContent.ps1 .\dbx.bin
   ```

   Ini menghasilkan dua file — `signature.p7` dan`content.bin`. Gunakan `content.bin` pada langkah berikutnya.

1. Buat penyimpanan variabel UEFI menggunakan skrip `uefivars.py`.

   ```
   ./uefivars.py -i none -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin 
   ```

1. Periksa gumpalan biner dan penyimpanan variabel UEFI.

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o json | less
   ```

1. Anda dapat memperbarui gumpalan dengan meneruskannya ke alat yang sama lagi.

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin
   ```

   Keluaran yang diharapkan

   ```
   Replacing PK
   Replacing KEK
   Replacing db
   Replacing dbx
   ```