

# Amazon Linux 2023 이미지 설명 샘플 빌드
<a name="build-sample-ami"></a>

AWS는 워크로드에 대한 자체 사용자 지정 증명 가능 AMI를 생성하기 위한 시작점으로 사용할 수 있는 Amazon Linux 2023 이미지 설명 샘플을 제공합니다. 이미지 설명 샘플에는 기본 운영 체제로 Amazon Linux 2023, 파일 시스템 불변성에 대한 `dm-verity` 및 `erofs` 구성이 포함되어 있으며, 모든 대화형 액세스(예: SSH, EC2 Instance Connect 및 직렬 콘솔)를 제거하여 격리된 컴퓨팅 환경을 생성합니다. 이미지 설명 샘플에 대한 자세한 내용은 [Github repo](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 설명서를 참조하세요.
+ [빠른 시작](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 자격 증명에 다음 권한이 있어야 합니다.
+ `arn:aws:ec2:*::snapshot/*`에 대한 `ebs:CompleteSnapshot`, `ebs:StartSnapshot` 및 `ebs:PutSnapshotBlock`
+ 모든 리소스에서 `ec2:RegisterImage`

**KIWI NG를 사용하여 샘플 Amazon Linux 2023 이미지 설명을 빌드하는 방법**

1. 최신 AL2023 AMI를 사용하여 Amazon EC2 인스턴스를 시작하세요. 인스턴스에 AMI를 빌드하기에 충분한 스토리지 공간이 있는지 확인하려면 최소 12GB의 스토리지를 프로비저닝해야 합니다.

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 repo](https://github.com/awslabs/coldsnap)를 참조하세요.

1. 이전 단계의 스냅샷을 사용하여 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
   ```