Criar o exemplo de descrição de imagem do Amazon Linux 2023
A AWS 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:
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. Você pode 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" } } -
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/kiwi*.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