

# Criar o exemplo de descrição de imagem do Amazon Linux 2023
<a name="build-sample-ami"></a>

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](https://github.com/amazonlinux/kiwi-image-descriptions-examples).

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:
+ [Início rápido](https://osinside.github.io/kiwi/quickstart.html)
+ [Descrição de imagem](https://osinside.github.io/kiwi/image_description.html)
+ [Exemplo de descrição de imagem do Amazon Linux 2023](https://github.com/amazonlinux/kiwi-image-descriptions-examples)

Pré-requisitos

A identidade do IAM precisa ter as seguintes permissões para concluir este tutorial:
+ `ebs:CompleteSnapshot`, `ebs:StartSnapshot` e `ebs:PutSnapshotBlock` no `arn:aws:ec2:*::snapshot/*`
+ `ec2:RegisterImage` Para todos os recursos

**Para compilar o exemplo de descrição de imagem do Amazon Linux 2023 usando o KIWI NG**

1. 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.

1. 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
   ```

1. 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 ..
   ```

1. Obtenha os arquivos de exemplos de descrição de imagem.

   ```
   sudo dnf install kiwi-image-descriptions-examples
   ```

   Os 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`

1. Compile o exemplo de descrição de imagem usando o comando `system build` do 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 ./image
   ```

   Para obter mais informações, consulte a [documentação do kiwi-ng system build](https://osinside.github.io/kiwi/commands/system_build.html).

1. Obtenha as medidas de referência da AMI. As medidas são geradas pelo utilitário `nitro-tpm-pcr-compute` durante 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"
     }
   }
   ```

1. Use o utilitário `coldsnap` para 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](https://github.com/awslabs/coldsnap).

1. Registre uma AMI habilitada para o TPM 2.0 com o modo de inicialização UEFI usando o snapshot da etapa anterior. Para `--architecture`, especifique `x86_64` para Intel ou `arm64` para Graviton.

   ```
   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
   ```