Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Créer une AMI Linux avec des clés de démarrage sécurisé de l’UEFI personnalisées

Mode de mise au point
Créer une AMI Linux avec des clés de démarrage sécurisé de l’UEFI personnalisées - Amazon Elastic Compute Cloud

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.

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.

Cette procédure vous montre comment créer une AMI Linux avec un démarrage sécurisé de l’UEFI et des clés privées personnalisées. Amazon Linux prend en charge le démarrage sécurisé UEFI à partir de la version AL2 023 2023.1. Pour plus d'informations, consultez la section UEFI Secure Boot dans le guide de l'utilisateur AL2023.

Important

La procédure suivante est destinée uniquement aux utilisateurs avancés. Vous devez posséder une connaissance suffisante de SSL et du flux de démarrage de distribution Linux pour utiliser ces procédures.

Prérequis

Les instances nouvellement créées sans clés UEFI Secure Boot sont créées dans SetupMode, ce qui vous permet d’inscrire vos propres clés. Certaines AMIs sont préconfigurées avec UEFI Secure Boot et vous ne pouvez pas modifier les clés existantes. Si vous souhaitez modifier les clés, vous devez créer une nouvelle AMI basée sur l’AMI d’origine.

Vous pouvez propager les clés dans le magasin de variables de deux manières, décrites dans les options A et B suivantes. L’option A décrit comment le faire depuis l’instance, en imitant le flux de matériel réel. L’option B décrit comment créer un blob binaire, qui est ensuite transmis en tant que fichier codé en base64 lorsque vous créez l’AMI. Pour les deux options, vous devez d’abord créer les trois paires de clés utilisées pour la chaîne de confiance.

Pour créer une AMI Linux prenant en charge le démarrage sécurisé de l’UEFI, créez d’abord les trois paires de clés, puis effectuez l’option A ou l’option B, mais pas les deux :

Étape 1

UEFI Secure Boot repose sur les trois bases de données de clés suivantes, qui sont utilisées dans une chaîne de confiance : la clé de plateforme (PK), la clé d’échange de clés (KEK) et la base de données de signatures (db).¹

Vous créez chaque clé sur l’instance. Pour préparer les clés publiques dans un format valide pour la norme UEFI Secure Boot, vous créez un certificat pour chaque clé. DER définit le format SSL (codage binaire d’un format). Vous convertissez ensuite chaque certificat en liste de signatures UEFI, qui est le format binaire compris par UEFI Secure Boot. Enfin, vous signez chaque certificat avec la clé correspondante.

Préparez-vous à créer les paires de clés

Avant de créer les paires de clés, créez un identifiant unique global (GUID) à utiliser lors de la génération de clés.

  1. Connectez-vous à l’instance.

  2. Exécutez la commande suivante dans un shell.

    uuidgen --random > GUID.txt

Paire de clés 1 : créer la clé de plateforme (PK)

La PK est la fondation de la confiance pour les instances UEFI Secure Boot. La PK privée est utilisée pour mettre à jour la KEK, qui peut à son tour être utilisée pour ajouter des clés autorisées à la base de données de signatures (db).

La norme X.509 est utilisée pour créer la paire de clés. Pour plus d’informations sur la norme, veuillez consulter X.509 sur Wikipédia.

Pour créer la PK
  1. Créez la clé. Vous devez nommer la variable PK.

    openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=Platform key/" -out PK.crt

    Les paramètres suivants sont spécifiés :

    • -keyout PK.key : le fichier de clé privée.

    • -days 3650 : le nombre de jours de validité du certificat.

    • -out PK.crt : le certificat utilisé pour créer la variable UEFI.

    • CN=Platform key : le nom commun (CN) de la clé. Vous pouvez saisir le nom de votre propre organisation à la place dePlatform key.

  2. Créez le certificat.

    openssl x509 -outform DER -in PK.crt -out PK.cer
  3. Convertissez le certificat en liste de signatures UEFI.

    cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
  4. Signez la liste de signatures UEFI avec la PK privée (auto-signée).

    sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth

Paire de clés 2 : créer la clé d’échange de clés (KEK)

La KEK privée est utilisée pour ajouter des clés à la base de données, qui est la liste des signatures autorisées à démarrer sur le système.

Pour créer la KEK
  1. Créez la clé.

    openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=Key Exchange Key/" -out KEK.crt
  2. Créez le certificat.

    openssl x509 -outform DER -in KEK.crt -out KEK.cer
  3. Convertissez le certificat en liste de signatures UEFI.

    cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
  4. Signez la liste de signatures avec la PK privée.

    sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth

Paire de clés 3 : créez la base de données de signatures (db)

La liste db contient des clés autorisées qui sont habilitées à être démarrées sur le système. Pour modifier la liste, la KEK privée est nécessaire. Les images de démarrage seront signées avec la clé privée créée au cours de cette étape.

Pour créer la db
  1. Créez la clé.

    openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=Signature Database key/" -out db.crt
  2. Créez le certificat.

    openssl x509 -outform DER -in db.crt -out db.cer
  3. Convertissez le certificat en liste de signatures UEFI.

    cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
  4. Signez la liste de signatures avec la KEK privée.

    sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth

Signez l’image de démarrage (noyau) avec la clé privée

Pour Ubuntu 22.04, les images suivantes nécessitent des signatures.

/boot/efi/EFI/ubuntu/shimx64.efi /boot/efi/EFI/ubuntu/mmx64.efi /boot/efi/EFI/ubuntu/grubx64.efi /boot/vmlinuz
Pour signer une image

Utilisez la syntaxe suivante pour signer une image.

sbsign --key db.key --cert db.crt --output /boot/vmlinuz /boot/vmlinuz
Note

Vous devez signer tous les nouveaux noyaux. /boot/vmlinuz sera généralement un lien symbolique vers le dernier noyau installé.

Reportez-vous à la documentation de votre distribution pour connaître votre chaîne de démarrage et les images requises.

¹ Merci à la ArchWiki communauté pour tout le travail qu'elle a accompli. Les commandes permettant de créer le PK, de créer le KEK, de créer la base de données et de signer l'image proviennent de la section Création de clés, rédigée par l'équipe de ArchWiki maintenance et/ou les ArchWiki contributeurs.

Étape 2 (option A) : ajouter des clés au magasin de variables à partir de l’instance

Une fois que vous avez créé les trois paires de clés, vous pouvez vous connecter à votre instance et ajouter les clés au magasin de variables depuis l’instance en effectuant les étapes suivantes. Vous pouvez également suivre les étapes pourÉtape 2 (option B) : créer un blob binaire contenant un magasin de variables pré-rempli.

Étape 1 : lancer une instance qui prend en charge le démarrage sécurisé de UEFI

Lorsque vous lancez une instance avec les conditions préalables suivantes, l’instance sera alors prête à être configurée pour prendre en charge UEFI Secure Boot. Vous pouvez uniquement activer la prise en charge de UEFI Secure Boot sur une instance au lancement. Vous ne pouvez pas l’activer ultérieurement.

Prérequis
  • AMI : l’AMI Linux doit prendre en charge le mode de démarrage UEFI. Pour vérifier que l’AMI prend en charge le mode de démarrage UEFI, le paramètre du mode de démarrage de l’AMI doit être uefi. Pour de plus amples informations, veuillez consulter Déterminer le paramètre du mode de démarrage d'une Amazon EC2 AMI.

    Notez que AWS seul Linux est AMIs configuré pour prendre en charge l'UEFI pour les types d'instances basés sur Graviton. AWS ne fournit actuellement pas de système Linux x86_64 prenant en charge le mode de AMIs démarrage UEFI. Vous pouvez configurer votre propre AMI afin de prendre en charge le mode de démarrage UEFI pour toutes les architectures. Pour configurer votre propre AMI afin de prendre en charge le mode de démarrage UEFI, vous devez effectuer plusieurs étapes de configuration sur votre propre AMI Linux. Pour de plus amples informations, veuillez consulter Configurer le mode de démarrage d'une Amazon EC2 AMI.

  • Type d’instance : tous les types d’instances virtualisées prenant en charge UEFI prennent également en charge UEFI Secure Boot. Les types d’instance matériel nu ne prennent pas en charge UEFI Secure Boot. Pour connaître les types d’instances prenant en charge UEFI Secure Boot, consultez Conditions requises pour le mode de démarrage UEFI.

  • Lancez votre instance après la sortie d’UEFI Secure Boot. Seules les instances lancées après le 10 mai 2022 (lorsque UEFI Secure Boot a été publié) peuvent prendre en charge UEFI Secure Boot.

Une fois que vous avez lancé votre instance, vous pouvez vérifier qu’elle est prête à être configurée pour prendre en charge UEFI Secure Boot (en d’autres termes, vous pouvez passer à l’étape 2) en vérifiant si les données UEFI sont présentes. La présence de données UEFI indique que les données non volatiles sont persistantes.

Pour vérifier si votre instance est prête pour l’étape 2

Utilisation de la get-instance-uefi-datacommande et spécifiez l'ID de l'instance.

aws ec2 get-instance-uefi-data --instance-id i-1234567890abcdef0

L’instance est prête pour l’étape 2 si des données UEFI sont présentes dans la sortie. Si la sortie est vide, l’instance ne peut pas être configurée pour prendre en charge UEFI Secure Boot. Cela peut se produire si votre instance a été lancée avant que la prise en charge UEFI Secure Boot soit disponible. Lancez une nouvelle instance et réessayez.

Étape 2 : configurer une instance pour prendre en charge UEFI Secure Boot

Inscrivez les paires de clés dans votre magasin de variables UEFI sur l’instance

Avertissement

Vous devez signer vos images de démarrage après avoir inscrit les clés, sinon vous ne pourrez pas démarrer votre instance.

Après avoir créé les listes de signatures UEFI signées (PK, KEK et db), elles doivent être inscrites dans le microprogramme UEFI.

Écriture dans la variable PK n’est possible que si :

  • Aucune PK n’est encore inscrite, ce qui est indiqué si la variable SetupMode est 1. Pour vérifier cela, utilisez la commande suivante. La sortie est soit 1, soit 0.

    efivar -d -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-SetupMode
  • La nouvelle PK est signée par la clé privée de la PK existante.

Pour inscrire les clés dans votre magasin de variables UEFI

Les commandes suivantes doivent être exécutées sur l’instance.

Si cette option SetupMode est activée (la valeur est1), les clés peuvent être inscrites en exécutant les commandes suivantes sur l'instance :

[ec2-user ~]$ efi-updatevar -f db.auth db
[ec2-user ~]$ efi-updatevar -f KEK.auth KEK
[ec2-user ~]$ efi-updatevar -f PK.auth PK
Pour vérifier que UEFI Secure Boot est activé

Pour vérifier que le démarrage sécurisé de UEFI est activé, suivez les étapes de la section Vérifiez si une EC2 instance Amazon est activée pour le démarrage sécurisé UEFI.

Vous pouvez désormais exporter votre magasin de variables UEFI avec get-instance-uefi-dataCommande CLI, ou passez à l'étape suivante et signez vos images de démarrage pour redémarrer sur une instance compatible UEFI Secure Boot.

Étape 3 : créer une AMI à partir de l’instance

Pour créer une AMI à partir de l'instance, vous pouvez utiliser la console ou l'CreateImageAPI, la CLI ou SDKs. Pour des instructions sur l’utilisation de la console, consultez Créer une AMI basée sur Amazon EBS. Pour les instructions relatives à l'API, consultez CreateImage.

Note

L’API CreateImage copie automatiquement le magasin de variables UEFI de l’instance vers l’AMI. La console utilise l’API CreateImage. Une fois que vous lancez des instances à l’aide de cette AMI, elles auront le même magasin de variables UEFI.

Étape 2 (option B) : créer un blob binaire contenant un magasin de variables pré-rempli

Une fois que vous avez créé les trois paires de clés, vous pouvez créer un blob binaire contenant un magasin de variables prérempli contenant les clés Secure Boot UEFI. Vous pouvez également suivre les étapes pourÉtape 2 (option A) : ajouter des clés au magasin de variables à partir de l’instance.

Avertissement

Vous devez signer vos images de démarrage avant d’inscrire les clés, sinon vous ne pourrez pas démarrer votre instance.

Étape 1 : créer un nouveau magasin de variables ou mettre à jour un stockage existant

Vous pouvez créer le magasin de variables hors ligne sans instance en cours d’exécution à l’aide de l’outil python-uefivars. L’outil peut créer un nouveau magasin de variables à partir de vos clés. Le script prend actuellement en charge le EDK2 format, le AWS format et une représentation JSON qui est plus facile à modifier avec des outils de niveau supérieur.

Pour créer le magasin de variables hors ligne sans instance en cours d’exécution
  1. Téléchargez l’outil en cliquant sur le lien suivant.

    https://github.com/awslabs/python-uefivars
  2. Créez un nouveau magasin de variables à partir de vos clés en exécutant la commande suivante. Cela créera un blob binaire codé en base64 dans .bin. your_binary_blob L’outil prend également en charge la mise à jour d’un blob binaire via le paramètre -I.

    ./uefivars.py -i none -o aws -O your_binary_blob.bin -P PK.esl -K KEK.esl --db db.esl --dbx dbx.esl

Étape 2 : charger le blob binaire lors de la création d’AMI

Utiliser register-imagepour transmettre les données de votre magasin de variables UEFI. Pour le paramètre --uefi-data, spécifiez votre blob binaire et pour le paramètre --boot-mode, spécifiez uefi.

aws ec2 register-image \ --name uefi_sb_tpm_register_image_test \ --uefi-data $(cat your_binary_blob.bin) \ --block-device-mappings "DeviceName=/dev/sda1,Ebs= {SnapshotId=snap-0123456789example,DeleteOnTermination=true}" \ --architecture x86_64 \ --root-device-name /dev/sda1 \ --virtualization-type hvm \ --ena-support \ --boot-mode uefi
ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.