Créer des images protégées personnalisées

Cette section explique comment préparer le disque, générer des certificats de sécurité et activer toutes les fonctionnalités requises au niveau du système d'exploitation pour créer une image protégée personnalisée.

Par défaut, la fonctionnalité de VM protégée est compatible avec Container-Optimized OS ainsi qu'avec diverses versions de Linux et plusieurs versions de Windows Server. Toutefois, si vous avez besoin d'images personnalisées pour votre application, vous pouvez toujours retirer des bénéfices des VM protégées.

Préparer le disque

La fonctionnalité de VM protégée s'appuie sur la capacité des micrologiciels compatibles avec le standard Unified Extensible Firmware Interface (UEFI) à prendre en charge des fonctionnalités telles que le démarrage sécurisé. Les VM protégées nécessitent un schéma de table de partition GUID (GPT - GUID Partition Table). Le secteur de démarrage "master boot record" (MBR) n'est pas compatible.

Le disque doit comporter au moins deux partitions :

  • Une partition système EFI ("EFI system partition" ou ESP) : 100 mégaoctets (Mo) suffisent pour cette partition. Il s'agit d'une simple suggestion. Si nécessaire, vous pouvez créer une partition plus importante. La seule exigence concernant la partition ESP est qu'elle doit être formatée avec un système de fichiers FAT (File Allocation Table).
  • Une partition pour le système d'exploitation : le reste du disque. Cette partition héberge le système d'exploitation de démarrage (Linux ou Windows). La taille de cette partition n'est soumise à aucune limite.

Vous pouvez créer d'autres partitions de données si nécessaire.

Copier le système d'exploitation sur la partition d'OS

Une fois le disque formaté et partitionné, copiez les fichiers du système d'exploitation sur la partition d'OS. Le système d'exploitation dispose d'un chargeur de démarrage qui doit se trouver sur un chemin valide dans la partition ESP, comme spécifié dans la spécification UEFI : \EFI\Boot\bootx64.efi. Notez qu'il peut être nécessaire de copier le chargeur de démarrage du système d'exploitation à l'emplacement indiqué.

Sous Windows, vous pouvez utiliser une commande appelée bcdboot pour copier le chargeur de démarrage du système d'exploitation à l'emplacement approprié, en plus des autres actions requises par Windows (telles que la copie du magasin BCD). Pour en savoir plus, consultez la section BCDBoot Command-Line Options (Options de ligne de commande BCDBoot) dans le centre de développement matériel Microsoft.

Lorsque vous utilisez des images de VM protégées, vous pouvez également tirer parti de deux fonctionnalités de sécurité supplémentaires : le module vTPM (Virtual Trusted Platform Module) et la surveillance de l'intégrité. Les sections suivantes décrivent les avantages de ces fonctionnalités ainsi que la configuration requise pour le système d'exploitation.

Module vTPM (Virtual Trusted Platform Module)

Un module de plate-forme sécurisée est un périphérique spécialisé permettant de protéger les objets, tels que les clés et les certificats servant à authentifier l'accès à votre système. Sur les images de VM protégées, des versions virtualisées de périphériques TPM permettent d'activer le démarrage mesuré. Pour résumer, le démarrage mesuré garantit l'intégrité du chemin de chargement critique des pilotes de démarrage et du noyau. vTPM et le démarrage mesuré sont décrits plus en détail dans la documentation sur les VM protégées.

Pour tirer parti du module vTPM et du démarrage mesuré, un pilote est nécessaire. Les versions minimales de système d'exploitation compatibles avec TPM 2.0 sont les suivantes :

  • Windows Server 2012
  • Linux version 3.20
  • Red Hat Enterprise Linux 7.3

Surveillance de l'intégrité

La surveillance de l'intégrité vous aide à comprendre l'état de vos instances de VM et à prendre des décisions les concernant. Monitoring utilise les données générées par le démarrage mesuré pour générer des rapports sur l'instance de VM. La documentation sur les VM protégées fournit davantage d'informations sur la surveillance de l'intégrité et l'automatisation des réponses aux échecs de validation d'intégrité.

Pour la prise en charge de la fonctionnalité de surveillance de l'intégrité des VM protégées, l'image doit générer des signaux d'intégrité :

  • Windows génère des signaux d'intégrité par défaut.
  • Sous Linux, le module IMA (Integrity Measurement Architecture) doit être installé et activé. Le module doit voir sa valeur CONFIG_IMA_MEASURE_PCR_IDX définie sur 10. Il s'agit de la valeur par défaut du module IMA.

Importer l'image disque dans Compute Engine

Une fois l'image préparée, vous devez l'importer dans Compute Engine. Pour connaître les étapes nécessaires à l'importation de l'image dans Google Cloud, consultez la page Importer des images de disque de démarrage dans Compute Engine.

Configurer des certificats pour le démarrage sécurisé

Lorsque vous ajoutez une image de VM protégée, un ensemble de certificats et de bases de données publics de démarrage sécurisé est transmis à Compute Engine. Ces fichiers sont stockés dans les variables UEFI correspondantes et sont utilisés pour établir des relations d'approbation entre la plate-forme, le micrologiciel et le système d'exploitation. Les certificats sont des certificats X.509 encodés DER (Distinguished Encoding Rules). Les bases de données peuvent être un certificat ou un fichier binaire brut. Il existe au total quatre valeurs :

  • Clé de plate-forme (pk) : clé utilisée pour établir la relation de confiance entre le propriétaire de la plate-forme et le micrologiciel. Vous ne pouvez spécifier qu'une seule clé de plate-forme. Il doit s'agir d'un certificat X.509 valide.
  • Clé d'échange de clés (kek) : clé utilisée pour établir une relation de confiance entre le micrologiciel et le système d'exploitation. Vous pouvez spécifier plusieurs clés pour cette valeur.
  • Base de données de clés interdites (dbx) : base de données de certificats révoqués. Si le fichier de démarrage est signé avec l'un de ces certificats, cela entraîne l'arrêt du système. Vous pouvez spécifier une ou plusieurs valeurs pour cette valeur.
  • Base de données de clés (db) : base de données de certificats approuvés et pouvant être utilisés pour signer les fichiers de démarrage. Vous pouvez spécifier une ou plusieurs valeurs pour cette valeur.

La spécification UEFI contient davantage d'informations sur ces valeurs et leur fonctionnement.

Dans l'exemple suivant, OpenSSL est utilisé pour créer les clés et certificats associés au démarrage sécurisé.

  • Générez une paire de clés RSA de 2 048 bits.

      $ openssl genrsa -out secure-boot-key.rsa 2048
    
  • Générez un certificat X.509 autosigné à partir de la clé au format DER.

      $ openssl req -new -x509 -sha256 -subj '/CN=secure-boot' -key secure-boot-key.rsa
      -outform DER -out secure-boot-cert.pem
    

Ajouter l'image protégée à Google Cloud

Vous pouvez maintenant ajouter l'image à Compute Engine en utilisant l'image et les certificats importés. L'image peut être ajoutée à l'aide de Google Cloud CLI ou de l'API Compute Engine.

gcloud

Ajoutez l'image personnalisée à Compute Engine :

gcloud compute images create [IMAGE_NAME] \
--source-disk [SOURCE_DISK] \
--source-disk-zone [ZONE] \
--platform-key-file=<file.der> \
--key-exchange-key-file=<file.der> \
--signature-database-file=<file.bin>,<file.der> \
--forbidden-database-file=<file.bin> \
--guest-os-features="UEFI_COMPATIBLE[,WINDOWS]"

où :

  • [IMAGE_NAME] est le nom de la nouvelle image.
  • [SOURCE_DISK] est le disque à partir duquel vous souhaitez créer l'image.
  • [ZONE] est la zone où se trouve le disque ;

L'option WINDOWS pour guest-os-features n'est requise que si vous utilisez une image Windows. Pour en savoir plus sur la création d'une image, consultez la documentation de référence sur gcloud create.

API

Suivez les instructions pour créer une image à partir d'un disque persistant, mais en spécifiant initial_state_config dans le corps de la requête.

...
"sourceDisk": "/zones/[ZONE]/disks/[SOURCE_DISK]",

"initial_state_config": {
    "pk": {
        "content": [KEY],
        "fileType": [BIN,X509]
    },
    "keks": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ],
    "dbxs": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ],
    "dbs": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ]
}

Certificats par défaut

Notez que pk, keks, dbxs et dbs sont des champs facultatifs. Si vous fournissez une configuration d'état initiale, il est possible qu'une partie ou que la totalité de ces champs ne soit pas définie. Lorsqu'une instance est créée à partir de l'image, Google Cloud fournit une valeur par défaut pour PK, KEK, db et dbx, à moins qu'une valeur personnalisée n'ait été fixée pour tout champ non défini. Si vous ne fournissez aucune configuration d'état initiale (en d'autres termes, la configuration est manquante, pas simplement vide), l'image présentera la configuration d'état initiale de l'image source.

Les valeurs par défaut de ces champs sont les suivantes :

  • PK : certificat associé à la clé privée par défaut créée par Google.
  • KEK : certificat KEK Microsoft par défaut. Télécharger à partir du site Microsoft : MicCorKEKCA2011_2011-06-24.crt.
  • dbx : liste de révocation DBX Microsoft par défaut. Télécharger depuis le forum Unified Extensible Firmware Interface (UEFI) : fichier de liste de révocation UEFI
  • db : les deux certificats suivants :
    • Certificat Microsoft Windows Production PCA 2011, dont le hachage de certificat SHA-1 a pour valeur 58 0a 6f 4c c4 e4 b6 69 b9 eb dc 1b 2b 3e 08 7b 80 d0 67 8d Télécharger à partir du site Microsoft : MicWinProPCA2011_2011-10-19.crt.
    • Certificat Microsoft Corporation UEFI CA 2011, dont le hachage de certificat SHA-1 a pour valeur 46 de f6 3b 5c e6 1c f8 ba 0d e2 e6 63 9c 10 19 d0 ed 14 f3. Télécharger à partir du site Microsoft : MicCorUEFCA2011_2011-06-27.crt.

Restez toutefois prudent, car ajouter vos propres certificats écrase les certificats par défaut plutôt que de les fusionner avec ceux que vous fournissez.