5.3. AWS Marketplace でセキュアブートを使用して RHEL インスタンスを設定する
AWS 上の RHEL インスタンスでオペレーティングシステムのブートプロセスのセキュリティーを確保するには、セキュアブートを使用します。AWS でセキュアブートをサポートする Red Hat Enterprise Linux (RHEL) インスタンスを設定するには、AWS Marketplace から、uefi-preferred
対応のブートモードで事前設定された RHEL Amazon Machine Image (AMI) を起動します。uefi-preferred
オプションは、セキュアブートに必要な Unified Extensible Firmware Interface (UEFI) ブートローダーのサポートを有効にします。UEFI がないと、セキュアブート機能は動作しません。
セキュリティー上の問題を回避するために、現在の RHEL インスタンスとは別に秘密鍵を生成して保管してください。セキュアブートのシークレットが、使用中のインスタンスと同じインスタンスに保存されている場合、侵入者がシークレットにアクセスして特権を昇格できます。AWS EC2 インスタンスの起動の詳細は、Get started with Amazon EC2 を参照してください。
前提条件
RHEL AMI のブート設定で
uefi-preferred
オプションが有効になっている。aws ec2 describe-images --image-id <ami-099f85fc24d27c2a7> --region <us-east-2> | grep -E '"ImageId"|"Name"|"BootMode"'
$ aws ec2 describe-images --image-id <ami-099f85fc24d27c2a7> --region <us-east-2> | grep -E '"ImageId"|"Name"|"BootMode"' "ImageId": "ami-099f85fc24d27c2a7", "Name": "RHEL-10.0.0_HVM_GA-20250423-x86_64-0-Hourly2-GP3", "BootMode": "uefi-preferred"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL インスタンスに次のパッケージがインストールされている。
-
awscli2
-
python3
-
openssl
-
efivar
-
keyutils
-
edk2-ovmf
-
python3-virt-firmware
-
手順
RHEL Marketplace AMI インスタンスのプラットフォームステータスを確認します。
mokutil --sb-state
$ mokutil --sb-state SecureBoot disabled Platform is in Setup Mode
Copy to Clipboard Copied! Toggle word wrap Toggle overflow setup
モードでは、インスタンス内のセキュアブート UEFI 変数を更新できます。新しいランダムな汎用一意識別子 (UUID) を作成し、システムによって生成されたテキストファイルに保存します。
uuidgen --random > GUID.txt
$ uuidgen --random > GUID.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Platform Key データベース用の新しい RSA 秘密鍵
PK.key
と自己署名 X.509 証明書PK.cer
を生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow openssl
ユーティリティーは、出力形式を Distinguished Encoding Rules (DER) に設定して、証明書のコモンネームPlatform key
を生成します。Key Exchange Key データベース用の新しい RSA 秘密鍵
KEK.key
と自己署名 X.509 証明書KEK.cer
を生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow カスタム証明書
custom_db.cer
を生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Microsoft Corporation UEFI CA 2011
証明書をダウンロードします。wget https://go.microsoft.com/fwlink/p/?linkid=321194 --user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" -O MicCorUEFCA2011_2011-06-27.crt
$ wget https://go.microsoft.com/fwlink/p/?linkid=321194 --user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" -O MicCorUEFCA2011_2011-06-27.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow x64 ビットシステム用の更新された禁止署名 (
dbx
) の UEFI 失効リストファイルをダウンロードします。wget https://uefi.org/sites/default/files/resources/x64_DBXUpdate.bin
$ wget https://uefi.org/sites/default/files/resources/x64_DBXUpdate.bin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow virt-fw-vars
ユーティリティーを使用して UEFI 変数ファイルを生成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細は、システム上の
virt-fw-vars(1)
man ページを参照してください。UEFI 変数を Extensible Firmware Interface (EFI) Signature List (ESL) 形式に変換します。
python3 /usr/share/doc/python3-virt-firmware/experimental/authfiles.py \ --input VARS \ --outdir . for f in PK KEK db dbx; do tail -c +41 $f.auth > $f.esl; done
$ python3 /usr/share/doc/python3-virt-firmware/experimental/authfiles.py \ --input VARS \ --outdir . $ for f in PK KEK db dbx; do tail -c +41 $f.auth > $f.esl; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記GUID はそれぞれ割り当てられた値であり、EFI パラメーターを表します。
-
8be4df61-93ca-11d2-aa0d-00e098032b8c
:EFI_GLOBAL_VARIABLE_GUID
-
d719b2cb-3d3a-4596-a3bc-dad00e67656f
:EFI_IMAGE_SECURITY_DATABASE_GUID
EFI_GLOBAL_VARIABLE_GUID
パラメーターは、ブート可能なデバイスとブートマネージャーの設定を保持します。一方、EFI_IMAGE_SECURITY_DATABASE_GUID
パラメーターは、セキュアブート変数であるdb
、dbx
、および必要な鍵と証明書を保存するためのイメージセキュリティーデータベースを表します。-
データベース証明書をターゲットインスタンスに転送し、
efivar
ユーティリティーを使用して UEFI 環境変数を管理します。PK.esl
を転送するには、次のように入力します。efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-PK -f PK.esl
# efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-PK -f PK.esl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow KEK.esl
を転送するには、次のように入力します。efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-KEK -f KEK.esl
# efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-KEK -f KEK.esl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow db.esl
を転送するには、次のように入力します。efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-db -f db.esl
# efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-db -f db.esl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow x64 アーキテクチャー用の
dbx.esl
UEFI 失効リストファイルを転送するには、次のように入力します。efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-dbx -f dbx.esl
# efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-dbx -f dbx.esl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- AWS コンソールからインスタンスを再起動します。
検証
セキュアブートが有効になっているかどうかを確認します。
mokutil --sb-state
$ mokutil --sb-state SecureBoot enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow keyctl
ユーティリティーを使用して、カスタム証明書のカーネルキーリングを確認します。sudo keyctl list %:.platform
$ sudo keyctl list %:.platform 4 keys in keyring: 786569360: ---lswrv 0 0 asymmetric: Signature Database key: 5856827178d376838611787277dc1d090c575759 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow