构建示例 Amazon Linux 2023 映像描述 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

构建示例 Amazon Linux 2023 映像描述

Amazon 提供了示例 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