构建示例 Amazon Linux 2023 映像描述
Amazon 提供了示例 Amazon Linux 2023 映像描述,您可以将其作为创建自定义可认证 AMI 的起点,以满足自己的工作负载需求。示例映像描述包括作为基本操作系统的 Amazon Linux 2023,用于文件系统不可变性的 dm-verity
和 erofs
配置,其删除了所有交互式访问权限(例如 SSH、EC2 实例连接和串行控制台),以创建隔离的计算环境。有关示例映像描述的更多信息,请参阅 Github repo
示例映像描述会自动在构建映像的 /usr/bin/
目录中安装 NitroTPM 工具(nitro-tpm-pcr-compute
和 nitro-tpm-attest
)。这可确保从 AMI 启动的实例上已预安装这些工具。
示例映像描述包含一个脚本 edit_boot_install.sh
,其中包含生成参考测量值所需的命令。该脚本将 KIWI NG 创建的原始磁盘映像文件(.raw
)挂载到环回设备,找到文件扩展名为 .efi
的 UKI,然后运行 nitro-tpm-pcr-compute
实用程序来生成 AMI 的参考测量值。该脚本由 KIWI NG 在构建期间自动执行。
本教程向您展示如何构建示例映像描述以创建可认证的 AMI。
有关创建您自己的映像描述的更多信息,请参阅以下 KIWI NG 文档:
使用 KIWI NG 构建示例 Amazon Linux 2023 映像描述
-
使用最新的 AL2023 AMI 启动 Amazon EC2 实例。为确保您的实例有足够的存储空间来构建 AMI,请确保预置至少 12 GB 的存储空间。
-
安装所需的依赖项。以下命令将安装以下实用程序:
-
kiwi-cli
-
veritysetup
-
erofs-utils
-
aws-nitro-tpm-tools
sudo dnf install -y kiwi-cli python3-kiwi kiwi-systemdeps-core python3-poetry-core qemu-img veritysetup erofs-utils git cargo aws-nitro-tpm-tools
-
-
安装
coldsnap
实用程序。此实用程序使您能够根据原始映像数据创建 Amazon EBS 快照。您将使用此实用程序根据 KIWI NG 创建的原始磁盘映像文件创建 EBS 快照。git clone https://github.com/awslabs/coldsnap.git cd coldsnap cargo install --locked coldsnap cd ..
-
获取示例映像描述文件。
sudo dnf install kiwi-image-descriptions-examples
示例映像描述文件将下载到以下目录:
/usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example
-
使用 KIWI NG
system build
命令生成示例映像描述。以下命令将在./image
目录中创建原始磁盘映像文件。sudo kiwi-ng \ --color-output \ --loglevel 0 \ system build \ --description usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example \ --target-dir ./image
有关更多信息,请参阅 kiwi-ng system build
文档。 -
获取 AMI 的参考测量值。这些测量值由
nitro-tpm-pcr-compute
实用程序在上一步的映像构建过程中生成。您可在以下文件中找到参考测量值:./image/pcr_measurements.json
。这些测量值均使用以下 JSON 格式提供:
{ "Measurements": { "HashAlgorithm": "SHA384 { ... }", "PCR4": "
PCR4_measurement
", "PCR7": "PCR7_measurement
" } } -
使用
coldsnap
实用程序将 KIWI NG 创建的原始磁盘映像上传到 EBS 快照。该命令将返回快照 ID。记下该 ID,您需要在下一步中使用它。SNAPSHOT=$(.cargo/bin/coldsnap upload ./image/kiwi*.raw) echo "Created snapshot: $SNAPSHOT"
有关
coldsnap
实用程序的更多信息,请参阅 coldsnap GitHub repo。 -
使用上一步中的快照注册启用 TPM 2.0 且具有 UEFI 启动模式 的 AMI。对于
--architecture
,请为 Intel 指定x86_64
,或为 Graviton 指定arm64
。aws ec2 register-image \ --name "attestable_isolated_al2023_ami" \ --virtualization-type hvm \ --boot-mode uefi \ --architecture
x86_64|arm64
\ --root-device-name /dev/xvda \ --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=${SNAPSHOT}} \ --tpm-support v2.0 \ --ena-support