Amazon Linux 2023 のサンプルイメージの説明を作成する - Amazon Elastic Compute Cloud

Amazon Linux 2023 のサンプルイメージの説明を作成する

AWS は、ワークロード用に独自のカスタム Attestable AMI を作成するための出発点として使用できる Amazon Linux 2023 のサンプルイメージの説明を提供します。サンプルイメージの説明には、ベースオペレーティングシステムとしての Amazon Linux 2023、ファイルシステムのイミュータビリティ用の dm-verityerofs の設定が含まれ、分離されたコンピューティング環境を作成するためにすべてのインタラクティブアクセス (SSH、EC2 インスタンス接続、シリアルコンソールなど) が削除されます。サンプルイメージの説明の詳細については、Github リポジトリを参照してください。

サンプルイメージの説明では、NitroTPM ツール (nitro-tpm-pcr-compute および nitro-tpm-attest) が /usr/bin/ ディレクトリのビルド済みイメージに自動的にインストールされます。これにより、AMI から起動されたインスタンスにツールがプリインストールされます。

サンプルイメージの説明には、リファレンス測定値の生成に必要なコマンドを含むスクリプトである edit_boot_install.sh が含まれています。スクリプトは、KIWI NG によって作成された raw ディスクイメージファイル (.raw) をループバックデバイスにマウントし、UKI (.efi ファイル拡張子を持つ) を見つけ、nitro-tpm-pcr-compute ユーティリティを実行して AMI のリファレンス測定値を生成します。スクリプトは、ビルド時に KIWI NG によって自動的に実行されます。

このチュートリアルでは、サンプルイメージの説明を作成して Attestable 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 ユーティリティをインストールします。このユーティリティを使用すると、raw イメージデータから Amazon EBS スナップショットを作成できます。このユーティリティを使用して、KIWI NG によって作成された raw ディスクイメージファイルから 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 ディレクトリに raw ディスクイメージファイルを作成します。

    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 によって作成された raw ディスクイメージを EBS スナップショットにアップロードします。コマンドはスナップショット ID を返します。次のステップで必要になるため、ID を書きとめておきます。

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

    coldsnap ユーティリティの詳細については、コールドスナップ GitHub リポジトリを参照してください。

  8. 前のステップのスナップショットを使用して、TPM 2.0 対応 AMI を UEFI ブートモードで登録します。--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