构建示例 Amazon Linux 2023 映像描述 - Amazon Elastic Compute Cloud

构建示例 Amazon Linux 2023 映像描述

AWS 提供了示例 Amazon Linux 2023 映像描述,您可以将其作为创建自定义可认证 AMI 的起点,以满足自己的工作负载需求。示例映像描述包括作为基本操作系统的 Amazon Linux 2023,用于文件系统不可变性的 dm-verityerofs 配置,其删除了所有交互式访问权限(例如 SSH、EC2 实例连接和串行控制台),以创建隔离的计算环境。有关示例映像描述的更多信息,请参阅 Github repo

示例映像描述会自动在构建映像的 /usr/bin/ 目录中安装 NitroTPM 工具(nitro-tpm-pcr-computenitro-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 映像描述
  1. 使用最新的 AL2023 AMI 启动 Amazon EC2 实例。为确保您的实例有足够的存储空间来构建 AMI,请确保预置至少 12 GB 的存储空间。

  2. 安装所需的依赖项。以下命令将安装以下实用程序:

    • 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
  3. 安装 coldsnap 实用程序。此实用程序使您能够根据原始映像数据创建 Amazon EBS 快照。您将使用此实用程序根据 KIWI NG 创建的原始磁盘映像文件创建 EBS 快照。

    git clone https://github.com/awslabs/coldsnap.git cd coldsnap cargo install --locked coldsnap cd ..
  4. 获取示例映像描述文件。

    sudo dnf install kiwi-image-descriptions-examples

    示例映像描述文件将下载到以下目录:/usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example

  5. 使用 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 文档。

  6. 获取 AMI 的参考测量值。这些测量值由 nitro-tpm-pcr-compute 实用程序在上一步的映像构建过程中生成。您可在以下文件中找到参考测量值:./image/pcr_measurements.json

    这些测量值均使用以下 JSON 格式提供:

    { "Measurements": { "HashAlgorithm": "SHA384 { ... }", "PCR4": "PCR4_measurement", "PCR7": "PCR7_measurement" } }
  7. 使用 coldsnap 实用程序将 KIWI NG 创建的原始磁盘映像上传到 EBS 快照。该命令将返回快照 ID。记下该 ID,您需要在下一步中使用它。

    SNAPSHOT=$(.cargo/bin/coldsnap upload ./image/kiwi*.raw) echo "Created snapshot: $SNAPSHOT"

    有关 coldsnap 实用程序的更多信息,请参阅 coldsnap GitHub repo

  8. 使用上一步中的快照注册启用 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