샘플 Amazon Linux 2023 이미지 설명 빌드하기
샘플 Amazon Linux 2023 이미지 설명 빌드하기 (Build the sample Amazon Linux 2023 image description)
AWS는 워크로드용 자체 사용자 지정 증명 가능 AMI(Attestable AMI)를 만드는 시작점으로 사용할 수 있는 샘플 Amazon Linux 2023 이미지 설명을 제공해요. 샘플 이미지 설명은 기본 운영 체제로 Amazon Linux 2023을 포함하고, 파일 시스템 불변성을 위한 dm-verity 및 erofs 구성을 포함하며, 격리된 컴퓨팅 환경을 만들기 위해 모든 대화형 액세스(SSH, EC2 Instance Connect, 직렬 콘솔 등)를 제거해요. 샘플 이미지 설명에 대한 자세한 내용은 Github 리포지토리를 참고하세요.
샘플 이미지 설명은 빌드된 이미지의 /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(Attestable AMI)를 만드는 방법을 보여줘요.
자체 이미지 설명을 만드는 방법에 대한 자세한 내용은 다음 KIWI NG 설명서를 참고하세요:
- Quick Start
- Image Description
- Sample Amazon Linux 2023 image description
사전 준비 (Prerequisites)
이 튜토리얼을 완료하려면 IAM 자격의 권한이 다음이어야 해요:
arn:aws:ec2:*::snapshot/*에 대한ebs:CompleteSnapshot,ebs:StartSnapshot,ebs:PutSnapshotBlock- 모든 리소스에 대한
ec2:RegisterImage
KIWI NG를 사용해 샘플 Amazon Linux 2023 이미지 설명 빌드하기
- 최신 AL2023 AMI를 사용해 Amazon EC2 인스턴스를 시작하세요. 인스턴스에 AMI를 빌드할 충분한 스토리지 공간이 있도록 최소 12GB의 스토리지를 프로비저닝하세요.
- 필수 종속성을 설치하세요. 다음 명령은 다음 유틸리티를 설치해요:
kiwi-cliveritysetuperofs-utilsaws-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
- coldsnap 유틸리티를 설치하세요. 이 유틸리티를 사용해 원시 이미지 데이터에서 Amazon EBS 스냅샷을 만들 수 있어요. 이 유틸리티를 사용해 KIWI NG가 만든 원시 디스크 이미지 파일에서 EBS 스냅샷을 만들게 돼요.
git clone https://github.com/awslabs/coldsnap.git
cd coldsnap
cargo install --locked coldsnap
cd ..
- 샘플 이미지 설명 파일을 가져오세요.
sudo dnf install kiwi-image-descriptions-examples
샘플 이미지 설명 파일은 다음 디렉터리에 다운로드돼요: /usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example
- KIWI NG 시스템 빌드 명령을 사용해 샘플 이미지 설명을 빌드하세요. 다음 명령은
./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 설명서를 참고하세요.
- AMI의 참조 측정값을 가져오세요. 측정값은 이전 단계의 이미지 빌드 시간에
nitro-tpm-pcr-compute유틸리티가 생성해요. 참조 측정값은 다음 파일에서 찾을 수 있어요:./image/pcr_measurements.json측정값은 다음 JSON 형식으로 제공돼요:
{
"Measurements": {
"HashAlgorithm": "SHA384 { ... }",
"PCR4": "PCR4_measurement",
"PCR7": "PCR7_measurement",
"PCR12": "PCR12_measurement"
}
}
- coldsnap 유틸리티를 사용해 KIWI NG가 만든 원시 디스크 이미지를 EBS 스냅샷에 업로드하세요. 명령이 스냅샷 ID를 반환해요. 다음 단계에서 필요하므로 ID를 기록해 두세요.
SNAPSHOT=$(.cargo/bin/coldsnap upload ./image/al2023*.raw)
echo "Created snapshot: $SNAPSHOT"
coldsnap 유틸리티에 대한 자세한 내용은 coldsnap GitHub 리포지토리를 참고하세요.
- 이전 단계의 스냅샷을 사용해 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