Criar o exemplo de descrição de imagem do Amazon Linux 2023
AWSA fornece um exemplo de descrição de imagem do Amazon Linux 2023 que você pode usar como ponto de partida para criar suas próprias AMIs atestáveis personalizadas para suas workloads. O exemplo de descrição de imagem inclui o Amazon Linux 2023 como sistema operacional básico, as configurações dm-verity e erofs, para garantir a imutabilidade do sistema de arquivos, e remove todo acesso interativo (como SSH, conexão de instância do EC2 e console serial) para criar um ambiente computacional isolado. Para obter mais informações sobre o exemplo de descrição de imagem, consulte o repositório do Github
O exemplo de descrição de imagem instala automaticamente as ferramentas do NitroTPM (nitro-tpm-pcr-compute e nitro-tpm-attest) na imagem gerada no diretório /usr/bin/. Isso garante que as ferramentas sejam pré-instaladas nas instâncias iniciadas na AMI.
O exemplo de descrição de imagem inclui um script, edit_boot_install.sh, que inclui os comandos necessários para gerar as medidas de referência. O script monta o arquivo da imagem de disco bruta (.raw) criada pelo KIWI NG em um dispositivo de loopback, localiza a UKI, que tem a extensão de arquivo .efi, e executa o utilitário nitro-tpm-pcr-compute para gerar as medidas de referência para a AMI. O script é executado automaticamente pelo KIWI NG durante a compilação.
Este tutorial mostra como compilar o exemplo de descrição de imagem para criar uma AMI atestável.
Para obter mais informações sobre como criar suas próprias descrições de imagem, consulte a seguinte documentação do KIWI NG:
Pré-requisitos
A identidade do IAM precisa ter as seguintes permissões para concluir este tutorial:
-
ebs:CompleteSnapshot,ebs:StartSnapshoteebs:PutSnapshotBlocknoarn:aws:ec2:*::snapshot/* -
ec2:RegisterImagePara todos os recursos
Para compilar o exemplo de descrição de imagem do Amazon Linux 2023 usando o KIWI NG
-
Inicie uma instância do Amazon EC2 usando a AMI AL2023 mais recente. Para garantir que a instância tenha espaço de armazenamento suficiente para compilar a AMI, provisione pelo menos 12 GB de armazenamento.
-
Instale as dependências necessárias. O seguinte comando instala estes utilitários:
-
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 -
-
Instale o utilitário
coldsnap. Esse utilitário permite que você crie snapshots do Amazon EBS a partir de dados de imagem brutos. Você usará esse utilitário para criar um snapshot do EBS a partir do arquivo da imagem de disco bruta criada pelo KIWI NG.git clone https://github.com/awslabs/coldsnap.git cd coldsnap cargo install --locked coldsnap cd .. -
Obtenha os arquivos de exemplos de descrição de imagem.
sudo dnf install kiwi-image-descriptions-examplesOs arquivos de exemplos de descrição de imagem são baixados para o seguinte diretório:
/usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example -
Compile o exemplo de descrição de imagem usando o comando
system builddo KIWI NG. O comando a seguir cria um arquivo da imagem de disco bruta no diretório./image.sudo kiwi-ng \ --color-output \ --loglevel 0 \ system build \ --description /usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example \ --target-dir ./imagePara obter mais informações, consulte a documentação do kiwi-ng system build
. -
Obtenha as medidas de referência da AMI. As medidas são geradas pelo utilitário
nitro-tpm-pcr-computedurante a criação da imagem na etapa anterior. É possível localizar as medidas de referência no seguinte arquivo:./image/pcr_measurements.json.As medidas são fornecidas no seguinte formato JSON:
{ "Measurements": { "HashAlgorithm": "SHA384 { ... }", "PCR4": "PCR4_measurement", "PCR7": "PCR7_measurement", "PCR12": "PCR12_measurement" } } -
Use o utilitário
coldsnappara carregar a imagem de disco bruta criada pelo KIWI NG em um snapshot do EBS. O comando retorna o ID do snapshot. Anote o valor do ID, pois vai precisar dele na próxima etapa.SNAPSHOT=$(.cargo/bin/coldsnap upload ./image/al2023*.raw) echo "Created snapshot: $SNAPSHOT"Para obter mais informações sobre o utilitário
coldsnap, consulte o repositório do coldsnap no GitHub. -
Registre uma AMI habilitada para o TPM 2.0 com o modo de inicialização UEFI usando o snapshot da etapa anterior. Para
--architecture, especifiquex86_64para Intel ouarm64para Graviton.aws ec2 register-image \ --name "attestable_isolated_al2023_ami" \ --virtualization-type hvm \ --boot-mode uefi \ --architecturex86_64|arm64\ --root-device-name /dev/xvda \ --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=${SNAPSHOT}} \ --tpm-support v2.0 \ --ena-support