6.4. 使用自定义 RHEL 镜像配置带有安全引导的 RHEL 实例
要确保 AWS 上的 RHEL 实例有安全引导序列,请使用安全引导。当注册自定义 RHEL Amazon 机器镜像(AMI)时,镜像由安全引导的预存储统一固件接口(UEFI)变量组成。这可让从 RHEL AMI 启动的所有实例都使用带有第一次引导时所需的变量的安全引导机制。
先决条件
- 您已创建了并上传 AWS AMI 镜像。详情请参阅 创建和上传 AWS AMI。
您已安装了以下软件包:
-
awscli2 -
python3 -
openssl -
efivar -
keyutils -
python3-virt-firmware
-
流程
创建新的随机通用唯一标识符(UUID),并将其存储在系统生成的文本文件中:
$ uuidgen --random > GUID.txt为平台密钥数据库生成一个新的 RSA 私钥
PK.key和自签名 X.509 证书PK.cer:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout PK.key \ -new -x509 -sha256 \ -days 3650 \ -outform DER -out PK.ceropenssl工具通过将输出格式设置为可辨识的编码规则(DER)来为证书生成一个通用名称平台密钥。为密钥交换密钥数据库生成一个新的 RSA 私钥
KEK.key和自签名 X.509 证书KEK.cer:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout KEK.key \ -new -x509 -sha256 \ -days 3650 \ -subj "/CN=Key Exchange Key/" \ -outform DER -out KEK.cer生成自定义证书
custom_db.cer:$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout custom_db.key \ -new -x509 -sha256 \ -days 3650 -subj "/CN=Signature Database key/" \ --outform DER -out custom_db.cer为 64 位系统下载禁止签名(
dbx)更新的 UEFI Revocation List 文件:$ wget https://uefi.org/sites/default/files/resources/x64_DBXUpdate.bin使用
virt-fw-vars工具从密钥、数据库证书和 UEFI 变量存储生成aws_blob.bin二进制文件:$ virt-fw-vars --output-aws aws_blob.bin \ --set-pk "$(< GUID.txt)" PK.cer \ --add-kek "$(< GUID.txt)" KEK.cer \ --add-db "$(< GUID.txt)" custom_db.cer \ --add-db 77fa9abd-0359-4d32-bd60-28f4e78f784b MicCorUEFCA2011_2011-06-27.crt \ --set-dbx x64_DBXUpdate.bin自定义 blob 由以下几项组成:
-
PK.cer带有自签名 X.509 证书 -
KEK.cer和custom_db.cer带有所有者组 GUID 和 Privacy Enhanced Mail (pem)格式 -
从排除签名的数据库下载的
x64_DBXUpdate.bin列表(dbx)。 -
77fa9abd-0359-4d32-bd60-28f4e78f784bUUID 适用于MicCorUEFCA2011_2011-06-27.crtMicrosoft Corporation UEFI 认证机构 2011。
-
使用
awscli2工具使用所需的安全引导变量从磁盘快照中创建并注册 AMI:$ aws ec2 register-image \ --name rhel9-example-ami \ --architecture x86_64 \ --virtualization-type hvm \ --root-device-name "/dev/sda1" \ --block-device-mappings "{\"DeviceName\": \"/dev/sda1\",\"Ebs\": {\"SnapshotId\": \"snap-example-id\"}}" \ --ena-support --boot-mode uefi \ --region eu-central-1 \ --uefi-data $(cat aws_blob.bin)- 从 AWS 控制台重启实例。
验证
验证是否启用了安全引导:
$ mokutil --sb-state SecureBoot enabled使用
keyctl工具验证自定义证书的内核密钥环:$ sudo keyctl list %:.platform 4 keys in keyring: 907254483: ---lswrv 0 0 asymmetric: Signature Database key: f064979641c24e1b935e402bdbc3d5c4672a1acc ...