

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Attestable AMIs
<a name="attestable-ami"></a>

Une AMI vérifiable est une Amazon Machine Image (AMI) avec un hachage cryptographique correspondant qui représente l’ensemble de son contenu. Le hachage est généré pendant le processus de création de l’AMI et il est calculé en fonction de l’intégralité du contenu de cette AMI, y compris les applications, le code et le processus de démarrage.

## Maintien d’un état vérifiable
<a name="maintain-attestability"></a>

Les mesures d’une instance sont basées sur son état de démarrage initial. Toute modification logicielle ou de code apportée à l’instance après le lancement et qui persiste après le redémarrage modifiera la mesure de l’instance après le redémarrage. Si les mesures sont modifiées, elles s’écartent des mesures de référence de l’AMI vérifiable, et l’instance ne pourra plus attester avec succès auprès du AWS KMS après son redémarrage. Par conséquent, pour qu'Attestable AMIs soit utile, les instances doivent revenir à leur état de démarrage d'origine après le redémarrage.

Le fait de toujours revenir à l’état de démarrage d’origine garantit qu’une instance peut être vérifiée avec succès après son redémarrage. Les utilitaires suivants peuvent être utilisés pour garantir que vos instances restent vérifiables après le redémarrage :
+ `erofs` : système de fichiers en lecture seule amélioré. Cet utilitaire garantit que votre système de fichiers racine est en lecture seule. Avec cet utilitaire, les écritures sur le système de fichiers, y compris `/etc`, `/run` et `/var`, sont stockées en mémoire et perdues au redémarrage de l’instance, laissant le système de fichiers racine dans son état de lancement initial. Pour plus d’informations, consultez la [documentation erofs](https://docs.kernel.org/filesystems/erofs.html).
+ `dm-verity` : fournit une protection d’intégrité pour le système de fichiers racine en lecture seule. L’utilitaire calcule le hachage des blocs du système de fichiers et le stocke dans la ligne de commande du noyau. Cela permet au noyau de vérifier l’intégrité du système de fichiers lors du démarrage. Pour en savoir plus, consultez la [documentation dm-verity](https://docs.kernel.org/admin-guide/device-mapper/verity.html).

## Conditions requises pour créer Attestable AMIs
<a name="ami-attestable-requirements"></a>

Les attestables AMIs répondent aux exigences suivantes :
+ **Système d’exploitation de base** : Amazon Linux 2023 et [NixOS](https://github.com/aws/nitrotpm-attestation-samples)
+ **Architecture** : architecture `x86_64` ou `arm64`
+ **Support TPM** : NitroTPM doit être activé. Pour de plus amples informations, veuillez consulter [Conditions d'utilisation de NitroTPM avec des instances Amazon EC2](enable-nitrotpm-prerequisites.md).
+ **Mode de démarrage** : le mode de démarrage UEFI doit être activé.

**Topics**
+ [Maintien d’un état vérifiable](#maintain-attestability)
+ [Conditions requises pour créer Attestable AMIs](#ami-attestable-requirements)
+ [Création d'un attestable AMIs](#sample-ami)
+ [Création de l’exemple de description d’image](build-sample-ami.md)
+ [Exemple de description d’image Amazon Linux 2023](al2023-isolated-compute-recipe.md)
+ [Personnaliser la description d’image d’exemple](customize-sample-ami.md)
+ [Calcul des mesures PCR](create-pcr-compute.md)

## Création d'un attestable AMIs
<a name="sample-ami"></a>

Pour créer une AMI vérifiable, vous devez utiliser Amazon Linux 2023 avec [KIWI Next Generation (KIWI NG)](https://osinside.github.io/kiwi/). Amazon Linux 2023 fournit tous les logiciels et utilitaires nécessaires pour créer une AMI vérifiable à l’aide de KIWI NG. 

KIWI NG est un outil open source permettant de créer des images préconfigurées basées sur Linux. KIWI NG utilise des *descriptions d’image* XML qui définissent le contenu d’une image. La description de l'image indique le système d'exploitation de base, le logiciel, la configuration du noyau et les scripts à exécuter afin de créer une ready-to-use AMI pour un cas d'utilisation spécifique.

Pendant la phase de création de l’AMI, vous devez utiliser l’utilitaire `nitro-tpm-pcr-compute` pour générer les mesures de référence en fonction de l’image UKI (Unified Kernel Image) générée par KIWI NG. Pour plus d’informations sur l’utilisation de l’utilitaire `nitro-tpm-pcr-compute`, consultez la section [Calcul des mesures PCR pour une AMI personnalisée](create-pcr-compute.md).

AWS fournit un exemple de description d'image Amazon Linux 2023 qui inclut toutes les configurations nécessaires pour configurer une instance EC2 dans un environnement informatique isolé. Pour de plus amples informations, veuillez consulter [Création de l’exemple de description d’image Amazon Linux 2023](build-sample-ami.md).

# Création de l’exemple de description d’image Amazon Linux 2023
<a name="build-sample-ami"></a>

AWS fournit un exemple de description d'image Amazon Linux 2023 que vous pouvez utiliser comme point de départ pour créer votre propre Attestable personnalisé AMIs pour vos charges de travail. L’exemple de description d’image inclut Amazon Linux 2023 comme système d’exploitation de base, les configurations `dm-verity` et `erofs` pour l’immuabilité du système de fichiers, et supprime tout accès interactif (tel que SSH, EC2 instance connect et console série) afin de créer un environnement de calcul isolé. Pour plus d’informations sur l’exemple de description d’image, consultez le [dépôt Github](https://github.com/amazonlinux/kiwi-image-descriptions-examples).

L’exemple de description d’image installe automatiquement les outils NitroTPM (`nitro-tpm-pcr-compute` et `nitro-tpm-attest`) dans l’image créée dans le répertoire `/usr/bin/`. Cela garantit que les outils sont préinstallés sur les instances lancées depuis l’AMI.

L’exemple de description d’image inclut un script qui inclut les commandes nécessaires pour générer les mesures de référence `edit_boot_install.sh`. Le script monte le fichier image disque brut (`.raw`) créé par KIWI NG sur un périphérique de boucle, localise l’UKI, qui porte l’extension de fichier `.efi`, puis exécute l’utilitaire `nitro-tpm-pcr-compute` pour générer les mesures de référence pour l’AMI. Le script est automatiquement exécuté par KIWI NG pendant la phase de construction.

Ce didacticiel vous montre comment créer un exemple de description d’image pour créer une AMI vérifiable.

Pour plus d’informations sur la création de vos propres descriptions d’images, consultez la documentation KIWI NG suivante :
+ [Quick Start](https://osinside.github.io/kiwi/quickstart.html)
+ [Description de l’image](https://osinside.github.io/kiwi/image_description.html)
+ [Exemple de description d’image Amazon Linux 2023](https://github.com/amazonlinux/kiwi-image-descriptions-examples)

Conditions préalables

Votre identité IAM doit disposer des autorisations suivantes pour suivre ce didacticiel :
+ `ebs:CompleteSnapshot``ebs:StartSnapshot`, et ainsi de `ebs:PutSnapshotBlock` suite `arn:aws:ec2:*::snapshot/*`
+ `ec2:RegisterImage`sur toutes les ressources

**Pour créer l’exemple de description d’image Amazon Linux 2023 à l’aide de KIWI NG**

1. Lancez une instance Amazon EC2 à l'aide de la dernière AMI AL2023 . Pour vous assurer que votre instance dispose de suffisamment d’espace de stockage pour créer l’AMI, assurez-vous de fournir au moins 12 Go de stockage.

1. Installez les dépendances obligatoires. La commande ci-dessous installe les utilitaires suivants :
   + `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. Installez l’utilitaire `coldsnap`. Cet utilitaire vous permet de créer des instantanés Amazon EBS à partir de données d’image brutes. Vous allez utiliser cet utilitaire pour créer un instantané EBS à partir du fichier image disque brut créé par KIWI NG.

   ```
   git clone https://github.com/awslabs/coldsnap.git
   cd coldsnap
   cargo install --locked coldsnap
   cd ..
   ```

1. Obtenez les exemples de fichiers de description d’image.

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

   Les exemples de fichiers de description d’image sont téléchargés dans le répertoire suivant : `/usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example`

1. Créez l’exemple de description d’image à l’aide de la commande KIWI NG `system build`. La commande suivante crée un fichier image disque brut dans le répertoire `./image`.

   ```
   sudo kiwi-ng \
   --color-output \
   --loglevel 0 \
   system build \
   --description /usr/share/kiwi-image-descriptions-examples/al2023/attestable-image-example \
   --target-dir ./image
   ```

   Pour plus d’informations, consultez la documentation de [création de système kiwi-ng](https://osinside.github.io/kiwi/commands/system_build.html).

1. Obtenez les mesures de référence pour l’AMI. Les mesures sont générées par l’utilitaire `nitro-tpm-pcr-compute` lors de la création de l’image à l’étape précédente. Vous pouvez trouver les mesures de référence dans le fichier suivant : `./image/pcr_measurements.json`

   Les mesures sont fournies au format JSON suivant :

   ```
   {
     "Measurements": {
       "HashAlgorithm": "SHA384 { ... }",
       "PCR4": "PCR4_measurement",
       "PCR7": "PCR7_measurement",
       "PCR12": "PCR12_measurement"
     }
   }
   ```

1. Utilisez l’utilitaire `coldsnap` pour télécharger l’image disque brute créée par KIWI NG sur un instantané EBS. La commande renvoie l’ID d’instantané. Notez l’ID, vous en aurez besoin pour l’étape suivante.

   ```
   SNAPSHOT=$(.cargo/bin/coldsnap upload ./image/al2023*.raw)
   echo "Created snapshot: $SNAPSHOT"
   ```

   Pour plus d'informations sur cet `coldsnap` utilitaire, consultez le dépôt [coldsnap GitHub ](https://github.com/awslabs/coldsnap).

1. Enregistrez une AMI compatible TPM 2.0 avec le mode de démarrage UEFI à l’aide de l’instantané de l’étape précédente. Pour `--architecture`, spécifiez `x86_64` pour Intel ou `arm64` pour 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
   ```

# Exemple de description d’image Amazon Linux 2023
<a name="al2023-isolated-compute-recipe"></a>

L’exemple de description d’image Amazon Linux 2023 présente les caractéristiques suivantes : 

1. **Démarrage à partir d’une image de noyau unifiée (UKI)** : démarrage à l’aide d’un seul binaire signé qui combine le noyau, `initrd` et les paramètres de démarrage en une seule image immuable.

1. **Système de fichiers racine en lecture seule** : utilisation du système de fichiers en lecture seule amélioré (`erofs`) avec protection dm-verity pour garantir que le système de fichiers racine ne peut pas être modifié et maintenir la vérification de l’intégrité cryptographique.

1. **Système de fichiers superposé éphémère** : création d’un système de fichiers superposé temporaire qui autorise les écritures temporaires dans des répertoires tels que `/etc`, `/run` et `/var`. Comme ce système de fichiers superposé n’existe qu’en mémoire. Toutes les modifications sont automatiquement perdues lorsque l’instance redémarre, ce qui garantit que le système revient à son état de confiance d’origine.

1. **Méthodes d’accès à distance désactivées** : suppression des mécanismes d’accès à distance suivants pour empêcher l’accès à distance :    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/al2023-isolated-compute-recipe.html)

   \$1 Pour plus d’informations, consultez la section [Éléments de description d’image](https://osinside.github.io/kiwi/image_description/elements.html#packages-ignore).

# Personnalisez l’exemple de description d’image Amazon Linux 2023 en fonction de votre charge de travail
<a name="customize-sample-ami"></a>

Vous pouvez personnaliser l’exemple de description d’image Amazon Linux 2023 et inclure les packages logiciels, les scripts et les fichiers nécessaires à votre charge de travail spécifique. Les personnalisations sont réalisées en ajoutant ou en modifiant divers éléments dans la description d’image KIWI NG.

**Topics**
+ [Gestion des référentiels](#prepare-custom-image-repos)
+ [Gestion des packages](#customize-sample-ami-packages)
+ [Ajout de fichiers et de répertoires](#customize-sample-ami-overlay)
+ [Ajout de scripts personnalisés](#customize-sample-ami-script)

## Gestion des référentiels
<a name="prepare-custom-image-repos"></a>

Par défaut, l’exemple de description d’image inclut un seul élément `<repository>` qui pointe vers un point de terminaison miroir pour les référentiels principaux d’Amazon Linux 2023. Si nécessaire, vous pouvez ajouter des références à d’autres référentiels à partir desquels installer le logiciel requis.

L’exemple de description d’image utilise le gestionnaire de packages `dnf`, tel que défini dans l’élément `<packagemanager>`.

Pour plus d’informations sur l’ajout de référentiels, consultez la section [Configuration des référentiels](https://osinside.github.io/kiwi/concept_and_workflow/repository_setup.html).

## Gestion des packages
<a name="customize-sample-ami-packages"></a>

Par défaut, l’exemple de description d’image inclut tous les packages nécessaires pour créer une AMI vérifiable Amazon Linux 2023 pour un environnement de calcul isolé avec un système de fichiers `erofs` en lecture seule.

Vous pouvez inclure des progiciels supplémentaires dans la description d’image en les ajoutant à l’élément `<packages>` de la description d’image. L’élément `<packages>` définit tous les logiciels qui doivent être installés dans l’AMI.

Vous pouvez également utiliser l’élément `<packages>` pour désinstaller ou supprimer des packages logiciels spécifiques.

Pour plus d’informations sur l’ajout ou la suppression de packages dans la description d’image, consultez la section [Ajout et suppression de packages](https://osinside.github.io/kiwi/concept_and_workflow/packages.html#).

## Ajout de fichiers et de répertoires
<a name="customize-sample-ami-overlay"></a>

L’exemple de description d’image inclut un répertoire arborescent superposé (`/root/`). Le répertoire arborescent superposé est un répertoire qui contient les fichiers et les répertoires qui seront copiés dans l’image pendant le processus de création de l’image. Tous les fichiers et répertoires que vous placez dans le répertoire arborescent superposé seront copiés directement dans le système de fichiers racine de l’image pendant le processus de création de l’image.

Le répertoire arborescent superposé est copié dans l’image une fois que tous les packages ont été installés. De nouveaux fichiers sont ajoutés et les fichiers existants sont remplacés.

## Ajout de scripts personnalisés
<a name="customize-sample-ami-script"></a>

L’exemple de description d’image inclut un seul script personnalisé, `edit_boot_install.sh`. Ce script inclut les commandes nécessaires pour exécuter l’utilitaire `nitro-tpm-pcr-compute`, qui génère les mesures de référence en fonction du contenu de l’image. Ce script est appelé immédiatement après l’installation du chargeur de démarrage.

Si nécessaire, vous pouvez inclure vos propres scripts personnalisés dans la description d’image pour effectuer des tâches ou des configurations pendant le processus de création de l’image ou lors du premier démarrage de l’image. L’utilisation de scripts vous permet de personnaliser vos images d’une manière qui ne peut pas être réalisée uniquement en utilisant la description d’image.

Pour inclure des scripts personnalisés dans la description de votre image, vous devez les nommer correctement en fonction du type de script et les ajouter dans le même répertoire que le fichier `appliance.kiwi`. KIWI NG détecte et exécute automatiquement les scripts s’ils sont nommés correctement et placés au bon endroit, sans qu’il soit nécessaire de les référencer explicitement dans le fichier de description d’image.

Pour plus d’informations sur les scripts pris en charge par KIWI NG, consultez la section [Scripts définis par l’utilisateur](https://osinside.github.io/kiwi/concept_and_workflow/shell_scripts.html).

# Calcul des mesures PCR pour une AMI personnalisée
<a name="create-pcr-compute"></a>

L’utilitaire `nitro-tpm-pcr-compute` vous permet de générer les mesures de référence pour une AMI vérifiable pendant la phase de construction en fonction de son image de noyau unifiée (UKI).

L’exemple de description d’image Amazon Linux 2023 installe automatiquement l’utilitaire dans l’image créée dans le répertoire `/usr/bin/`. L’exemple de description d’image inclut également un script contenant les commandes nécessaires pour exécuter l’utilitaire afin de générer les mesures de référence lors de la création de l’image. Si vous utilisez l’exemple de description d’image, vous n’avez pas besoin d’installer l’utilitaire ou de l’exécuter manuellement. Pour de plus amples informations, veuillez consulter [Création de l’exemple de description d’image Amazon Linux 2023](build-sample-ami.md).

## Installation de l’utilitaire `nitro-tpm-pcr-compute`
<a name="nitro-tpm-compute-install"></a>

Si vous utilisez Amazon Linux 2023, vous pouvez installer l’utilitaire `nitro-tpm-pcr-compute` depuis le référentiel Amazon Linux comme suit.

```
sudo yum install aws-nitro-tpm-tools
```

Les outils sont installés dans le répertoire `/usr/bin`.

## Utilisation de l’utilitaire `nitro-tpm-pcr-compute`
<a name="nitro-tpm-compute-use"></a>

L’utilitaire fournit une commande unique, `nitro-tpm-pcr-compute`, pour générer les mesures de référence.

Lorsque vous exécutez la commande, vous devez préciser les éléments suivants :
+ Image de noyau unifiée (`UKI.efi`) : requise pour le démarrage standard et l’UEFI.

**Pour générer les mesures de référence pour une AMI vérifiable :**  
Utilisez la commande et les paramètres suivants :

```
/usr/bin/nitro-tpm-pcr-compute \
--image UKI.efi
```

L’utilitaire renvoie les mesures de référence au format JSON suivant :

```
{
  "Measurements": {
    "HashAlgorithm": "SHA384 { ... }",
    "PCR4": "PCR4_measurement",
    "PCR7": "PCR7_measurement",
    "PCR12": "PCR12_measurement"
  }
}
```

Pour un exemple pratique d’utilisation de l’utilitaire `nitro-tpm-pcr-compute`, consultez le script `edit_boot_install.sh` inclus dans l’[exemple de description d’image Amazon Linux 2023](build-sample-ami.md).