Buat Linux AMI dengan tombol Boot UEFI Aman khusus - 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 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

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

    Bersiap untuk membuat pasangan kunci

    Sebelum membuat pasangan kunci, buat identifier 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 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 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 UEFI variabel.

      • CN=Platform key – Nama umum (CN) untuk kunci. Anda dapat memasukkan nama organisasi Anda sendiri alih-alih Platform key.

    2. Buat sertifikat.

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

      cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
    4. 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
    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. Ubah sertifikat menjadi daftar UEFI tanda tangan.

      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, privat KEK diperlukan. 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. Ubah sertifikat menjadi daftar UEFI tanda tangan.

      cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
    4. 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. /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, membuat DBKEK, dan menandatangani gambar berasal dari Creating keys, yang ditulis oleh Tim ArchWiki Pemeliharaan dan/atau kontributor. ArchWiki

    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 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 (PKKEK,, 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 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 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 CreateImageAPI,CLI, atauSDKs. Untuk instruksi konsol, lihat Buat Amazon yang EBS didukung AMI. Untuk API instruksinya, lihat CreateImage.

    catatan

    CreateImageAPISecara otomatis menyalin penyimpanan UEFI variabel instance ke fileAMI. Konsol menggunakan CreateImageAPI. 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 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
    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 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