Buat AMI Linux dengan tombol Boot Aman UEFI kustom - Amazon Elastic Compute Cloud

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

Buat AMI Linux dengan tombol Boot Aman UEFI kustom

Prosedur 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 rilis AL2 023 2023.1. Untuk informasi selengkapnya, lihat Boot Aman UEFI di Panduan Pengguna AL2023.

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

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.

Untuk membuat AMI Linux yang mendukung UEFI Secure Boot, pertama-tama buat tiga pasangan kunci, lalu selesaikan Opsi A atau Opsi B, tetapi tidak keduanya:

Langkah 1

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.

Bersiap untuk membuat pasangan kunci

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

  1. Hubungkan ke instans.

  2. Jalankan perintah berikut di prompt shell.

    uuidgen --random > GUID.txt

Pasangan kunci 1: Buat kunci platform (PK)

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 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-alihPlatform key.

  2. Buat sertifikat.

    openssl x509 -outform DER -in PK.crt -out PK.cer
  3. Konversi sertifikat menjadi daftar tanda tangan UEFI.

    cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
  4. 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)

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
  2. Buat sertifikat.

    openssl x509 -outform DER -in KEK.crt -out KEK.cer
  3. Konversi sertifikat menjadi daftar tanda tangan UEFI.

    cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
  4. 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

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
  2. Buat sertifikat.

    openssl x509 -outform DER -in db.crt -out db.cer
  3. Konversi sertifikat menjadi daftar tanda tangan UEFI.

    cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
  4. 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

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, yang ditulis oleh Tim ArchWiki Pemeliharaan dan/atau kontributor. ArchWiki

Langkah 2 (Opsi A): Tambahkan kunci ke penyimpanan variabel dari dalam instance

Setelah Anda membuat tiga pasang kunci, Anda dapat terhubung ke instans Anda dan menambahkan kunci ke penyimpanan variabel dari dalam instans dengan menyelesaikan langkah-langkah berikut. Atau, selesaikan langkah-langkah untukLangkah 2 (Opsi B): Buat gumpalan biner yang berisi penyimpanan variabel yang telah diisi sebelumnya.

Langkah 1: Luncurkan instans yang akan mendukung UEFI Secure Boot

Ketika Anda meluncurkan sebuah instans 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 Amazon EC2 AMI.

    Perhatikan bahwa AWS hanya menyediakan Linux yang AMIs dikonfigurasi untuk mendukung UEFI untuk jenis instans berbasis Graviton. AWS saat ini tidak menyediakan x86_64 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.

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

  • 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) 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 get-instance-uefi-dataperintah dan tentukan ID instance.

aws ec2 get-instance-uefi-data --instance-id i-0123456789example

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

Daftarkan pasangan kunci di penyimpanan variabel UEFI Anda pada instans

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 (nilainya1), 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 EC2 instans Amazon diaktifkan untuk UEFI Secure Boot.

Anda sekarang dapat mengekspor toko variabel UEFI Anda dengan get-instance-uefi-dataPerintah CLI, atau Anda melanjutkan ke langkah berikutnya dan menandatangani gambar boot Anda untuk reboot ke instance UEFI Secure Boot-enabled.

Langkah 3: Buat AMI dari instans

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. Untuk petunjuk API, lihat CreateImage.

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.

Langkah 2 (Opsi B): Buat gumpalan biner yang berisi penyimpanan variabel yang telah diisi sebelumnya

Setelah Anda membuat tiga pasangan kunci, Anda dapat membuat gumpalan biner yang berisi penyimpanan variabel yang telah diisi sebelumnya yang berisi kunci UEFI Secure Boot. Atau, selesaikan langkah-langkah untukLangkah 2 (Opsi A): Tambahkan kunci ke penyimpanan variabel dari dalam instance.

Awas

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

Langkah 1: Buat penyimpanan variabel baru atau perbarui yang sudah ada

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
  2. Buat penyimpanan variabel baru dari kunci Anda dengan menjalankan perintah berikut. Ini akan membuat gumpalan biner berenkode base64 di.bin. your_binary_blob 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

Gunakan register-imageuntuk 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