

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建置範例 Amazon Linux 2023 映像說明
<a name="build-sample-ami"></a>

AWS 提供範例 Amazon Linux 2023 映像描述，您可以用作為工作負載建立自訂可認證 AMIs起點。範例映像說明包括做為基本作業系統的 Amazon Linux 2023，以及實現檔案系統不可變性的 `dm-verity` 與 `erofs` 組態，並且該說明移除了全部互動式存取權 (例如 SSH、EC2 Instance Connect，以及序列主控台)，以建立隔離式運算環境。若要了解範例映像說明的詳細資訊，請參閱 [Github 儲存庫](https://github.com/amazonlinux/kiwi-image-descriptions-examples)。

範例映像說明可在 `/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 文件：
+ [Quick Start](https://osinside.github.io/kiwi/quickstart.html)
+ [映像說明](https://osinside.github.io/kiwi/image_description.html)
+ [範例 Amazon Linux 2023 映像說明](https://github.com/amazonlinux/kiwi-image-descriptions-examples)

先決條件

您的 IAM 身分必須具有下列許可才能完成本教學課程：
+ `ebs:CompleteSnapshot`、 `ebs:StartSnapshot`和 `ebs:PutSnapshotBlock`上的 `arn:aws:ec2:*::snapshot/*`
+ `ec2:RegisterImage` 在所有資源上

**如需使用 KIWI NG 來建置範例 Amazon Linux 2023 映像說明**

1. 使用最新的 AL2023 AMI 來啟動 Amazon EC2 執行個體 如需確保執行個體具有足夠的儲存空間以建置 AMI，請確保至少佈建 12 GB 的儲存空間。

1. 安裝所需的依存項目。使用下面的命令可安裝以下公用程式：
   + `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
   ```

1. 安裝 `coldsnap` 公用程式。使用此公用程式，您可透過原始映像資料來建立 Amazon EBS 快照。您將使用此公用程式，透過 KIWI NG 建立的原始磁碟映像檔案來建立 EBS 快照。

   ```
   git clone https://github.com/awslabs/coldsnap.git
   cd coldsnap
   cargo install --locked coldsnap
   cd ..
   ```

1. 獲取範例映像說明檔案。

   ```
   sudo dnf install kiwi-image-descriptions-examples
   ```

   範例映像說明檔案可下載至以下目錄：`/usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example`

1. 使用 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](https://osinside.github.io/kiwi/commands/system_build.html) 文件。

1. 獲取 AMI 的參考衡量項。`nitro-tpm-pcr-compute` 公用程式可在上一步驟的映像建置期間生成衡量項。您可在以下檔案中尋找參考衡量項：`./image/pcr_measurements.json`。

   衡量項以下列 JSON 格式提供：

   ```
   {
     "Measurements": {
       "HashAlgorithm": "SHA384 { ... }",
       "PCR4": "PCR4_measurement",
       "PCR7": "PCR7_measurement",
       "PCR12": "PCR12_measurement"
     }
   }
   ```

1. 使用 `coldsnap` 公用程式可上傳 KIWI NG 建立的原始磁碟映像至 EBS 快照。使用命令可傳回快照 ID。請記下 ID，您在後續步驟會用到。

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

   若要了解 `coldsnap` 公用程式的相關詳細資訊，請參閱 [coldsnap GitHub 儲存庫](https://github.com/awslabs/coldsnap)。

1. 使用上一步驟的快照，在 UEFI 啟動模式下註冊支援 TPM 2.0 的 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
   ```