Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Buat Linux AMI dengan tombol Boot UEFI Aman khusus
Prosedur ini menunjukkan kepada Anda cara membuat Linux AMI dengan Boot UEFI Aman dan kunci pribadi yang dibuat khusus. Amazon Linux mendukung Boot UEFI Aman dimulai dengan rilis AL2 023 2023.1. Untuk informasi selengkapnya, lihat Boot UEFI Aman di Panduan Pengguna AL2 023.
penting
Prosedur berikut ditujukan untuk pengguna tingkat lanjut saja. Anda harus memiliki pengetahuan yang cukup SSL dan alur boot distribusi Linux untuk menggunakan prosedur ini.
Prasyarat
-
Alat-alat berikut akan digunakan:
-
Buka SSL - https://www.openssl.org/
-
efitools – https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/
-
get-instance-uefi-data AWS CLI perintah
-
-
Instans Linux Anda harus telah diluncurkan dengan Linux AMI yang mendukung mode UEFI boot, dan memiliki data non-volatile hadir.
Instans yang baru dibuat tanpa kunci Boot UEFI Aman dibuatSetupMode
, yang memungkinkan Anda mendaftarkan kunci Anda sendiri. Beberapa AMIs datang dikonfigurasikan sebelumnya dengan Boot UEFI Aman dan Anda tidak dapat mengubah kunci yang ada. Jika Anda ingin mengubah kunci, Anda harus membuat yang baru AMI berdasarkan aslinyaAMI.
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 yang dikodekan base64 saat Anda membuat file. AMI Untuk kedua opsi, Anda harus terlebih dahulu membuat tiga pasang kunci, yang digunakan untuk rantai kepercayaan.
Untuk membuat Linux AMI yang mendukung UEFI Secure Boot, pertama-tama buat tiga pasangan kunci, lalu selesaikan Opsi A atau Opsi B, tetapi tidak keduanya:
UEFISecure Boot didasarkan pada tiga basis data utama berikut, yang digunakan dalam rantai kepercayaan: kunci platform (PK), kunci pertukaran kunci (KEK), dan database tanda tangan (db) .¹
Anda membuat setiap kunci pada instans. Untuk menyiapkan kunci publik dalam format yang valid untuk standar Boot UEFI Aman, Anda membuat sertifikat untuk setiap kunci. DER
mendefinisikan SSL format (pengkodean biner format). Anda kemudian mengonversi setiap sertifikat menjadi daftar UEFI tanda tangan, yang merupakan format biner yang dipahami oleh UEFI Secure Boot. Terakhir, Anda menandatangani setiap sertifikat dengan kunci yang relevan.
Topik
Bersiap untuk membuat pasangan kunci
Sebelum membuat pasangan kunci, buat identifier unik global (GUID) untuk digunakan dalam pembuatan kunci.
-
Jalankan perintah berikut di prompt shell.
uuidgen --random > GUID.txt
Pasangan kunci 1: Buat kunci platform (PK)
PK adalah akar kepercayaan untuk instance Boot UEFI Aman. PK pribadi digunakan untuk memperbaruiKEK, yang pada gilirannya dapat digunakan untuk menambahkan kunci resmi ke database tanda tangan (db).
Standar X.509 digunakan untuk membuat pasangan kunci. Untuk informasi tentang standar yang digunakan, lihat X.509
Untuk membuat PK
-
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.crtParameter berikut ditentukan:
-
-keyout PK.key
– File kunci privat. -
-days 3650
– Jumlah hari sertifikat tersebut valid. -
-out PK.crt
— Sertifikat yang digunakan untuk membuat UEFI variabel. -
CN=
– Nama umum (CN) untuk kunci. Anda dapat memasukkan nama organisasi Anda sendiri alih-alihPlatform key
Platform key
.
-
-
Buat sertifikat.
openssl x509 -outform DER -in PK.crt -out PK.cer
-
Ubah sertifikat menjadi daftar UEFI tanda tangan.
cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
-
Tanda tangani daftar UEFI tanda tangan dengan PK pribadi (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 pertukaran kunci (KEK)
Privat KEK digunakan untuk menambahkan kunci ke db, yang merupakan daftar tanda tangan resmi untuk boot pada sistem.
Untuk membuat KEK
-
Buat kunci.
openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=Key Exchange Key/" -out KEK.crt
-
Buat sertifikat.
openssl x509 -outform DER -in KEK.crt -out KEK.cer
-
Ubah sertifikat menjadi daftar UEFI tanda tangan.
cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
-
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, privat KEK diperlukan. Gambar boot akan ditandatangani dengan kunci privat yang dibuat pada langkah ini.
Untuk membuat PK
-
Buat kunci.
openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=Signature Database key/" -out db.crt
-
Buat sertifikat.
openssl x509 -outform DER -in db.crt -out db.cer
-
Ubah sertifikat menjadi daftar UEFI tanda tangan.
cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
-
Tanda tangani daftar tanda tangan dengan pribadiKEK.
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.
biasanya akan symlink ke kernel yang terakhir diinstal./boot/vmlinuz
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, membuat DBKEK, dan menandatangani gambar berasal dari Creating keys
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.
Langkah-langkah Opsi A:
Langkah 1: Luncurkan instance yang akan mendukung Boot UEFI Aman
Ketika Anda meluncurkan sebuah instance dengan prasyarat berikut, instance kemudian akan siap untuk dikonfigurasi untuk mendukung Boot Aman. UEFI Anda hanya dapat mengaktifkan dukungan untuk Boot UEFI Aman pada instance saat peluncuran; Anda tidak dapat mengaktifkannya nanti.
Prasyarat
-
AMILinux AMI harus mendukung mode UEFI boot. Untuk memverifikasi bahwa AMI mendukung mode UEFI boot, parameter mode AMI boot harus uefi. Untuk informasi selengkapnya, lihat Tentukan parameter mode boot Amazon EC2 AMI.
Perhatikan bahwa AWS hanya menyediakan Linux yang AMIs dikonfigurasi UEFI untuk mendukung jenis instance berbasis Graviton. AWS saat ini tidak menyediakan x86_64 Linux AMIs yang mendukung UEFI mode boot. Anda dapat mengonfigurasi sendiri AMI untuk mendukung mode UEFI boot untuk semua arsitektur. Untuk mengkonfigurasi sendiri AMI untuk mendukung mode UEFI boot, Anda harus melakukan sejumlah langkah konfigurasi sendiriAMI. Untuk informasi selengkapnya, lihat Mengatur mode boot Amazon EC2 AMI.
-
Jenis instans — Semua jenis instans virtual yang mendukung UEFI juga mendukung Boot UEFI Aman. Jenis instans bare metal tidak mendukung Boot UEFI Aman. Untuk jenis instance yang mendukung Boot UEFI Aman, lihatPersyaratan untuk mode UEFI boot.
-
Luncurkan instance Anda setelah rilis UEFI Secure Boot. Hanya instance yang diluncurkan setelah 10 Mei 2022 (saat Boot UEFI Aman dirilis) yang dapat mendukung Boot UEFI Aman.
Setelah meluncurkan instans, Anda dapat memverifikasi bahwa instans siap dikonfigurasi untuk mendukung Boot UEFI Aman (dengan kata lain, Anda dapat melanjutkan ke Langkah 2) dengan memeriksa apakah ada UEFI data. Kehadiran UEFI data menunjukkan bahwa data non-volatile tetap ada.
Untuk memverifikasi apakah instans Anda siap untuk Langkah 2
Gunakan perintah get-instance-uefi-data dan tentukan ID instans.
aws ec2 get-instance-uefi-data --instance-id
i-0123456789example
Instance siap untuk Langkah 2 jika UEFI data hadir dalam output. Jika output kosong, instance tidak dapat dikonfigurasi untuk mendukung Boot UEFI Aman. Hal ini dapat terjadi jika instans Anda diluncurkan sebelum dukungan Boot UEFI Aman tersedia. Luncurkan instans baru dan coba lagi.
Langkah 2: Konfigurasikan instance untuk mendukung Boot UEFI Aman
Daftarkan pasangan kunci di toko UEFI variabel Anda pada instance
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 UEFI tanda tangan yang ditandatangani (PK
KEK
,, dandb
), mereka harus terdaftar ke dalam UEFI firmware.
Penulisan ke variabel PK
hanya dapat dilakukan jika:
-
Belum ada PK yang terdaftar, yang ditunjukkan jika variabel
SetupMode
nya1
. Periksa ini dengan menggunakan perintah berikut. Outputnya adalah1
atau0
.efivar -d -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-SetupMode
-
PK yang baru ditandatangani oleh kunci privat dari PK yang ada.
Untuk mendaftarkan kunci di toko UEFI variabel 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 Boot UEFI Aman diaktifkan
Untuk memverifikasi bahwa Boot UEFI Aman diaktifkan, ikuti langkah-langkahnyaVerifikasi apakah EC2 instans Amazon diaktifkan untuk Boot UEFI Aman.
Anda sekarang dapat mengekspor toko UEFI variabel Anda dengan get-instance-uefi-dataCLIperintah, atau Anda melanjutkan ke langkah berikutnya dan menandatangani gambar boot Anda untuk reboot ke instance UEFI Secure Boot-enabled.
Langkah 3: Buat AMI dari instance
Untuk membuat AMI dari instance, Anda dapat menggunakan konsol atau CreateImage
API,CLI, atauSDKs. Untuk instruksi konsol, lihat Buat Amazon yang EBS didukung AMI. Untuk API instruksinya, lihat CreateImage.
catatan
CreateImage
APISecara otomatis menyalin penyimpanan UEFI variabel instance ke fileAMI. Konsol menggunakan CreateImage
API. Setelah Anda meluncurkan instance menggunakan iniAMI, instance akan memiliki penyimpanan UEFI variabel yang sama.
Setelah Anda membuat tiga pasangan kunci, Anda dapat membuat gumpalan biner yang berisi penyimpanan variabel yang telah diisi sebelumnya yang berisi kunci Boot UEFI Aman.
Awas
Anda harus menandatangani gambar boot Anda sebelum mendaftarkan kunci, jika tidak, Anda tidak akan dapat melakukan boot instans Anda.
Langkah-langkah Opsi B:
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 JSON representasi yang lebih mudah diedit dengan perkakas tingkat yang lebih tinggi.
Untuk membuat penyimpanan variabel offline tanpa instans yang berjalan
-
Unduh alat di tautan berikut.
https://github.com/awslabs/python-uefivars
-
Buat penyimpanan variabel baru dari kunci Anda dengan menjalankan perintah berikut. Ini akan membuat gumpalan biner yang dikodekan base64 di
your_binary_blob
.bin. 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 UEFI variabel 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