Démarrer une VM de manière sécurisée

Ce document explique comment activer le démarrage sécurisé ou un module de plate-forme sécurisée virtualisé (vTPM) sur une instance de machine virtuelle (VM) dans Google Distributed Cloud (GDC) air-gapped.

Ce document s'adresse aux développeurs des groupes d'administrateurs de plate-forme ou d'opérateurs d'applications qui configurent le démarrage sécurisé et les vTPM sur les VM dans un environnement GDC. Pour en savoir plus, consultez la documentation sur les audiences pour GDC sous air gap.

À propos du démarrage sécurisé

Le démarrage sécurisé est une fonctionnalité qui garantit que le système n'exécute que des logiciels authentiques en vérifiant la signature numérique de tous les composants de démarrage et qui interrompt le processus si la vérification échoue. Il utilise le micrologiciel UEFI (Unified Extensible Firmware Interface) pour gérer les certificats et les clés que les fabricants utilisent pour signer le micrologiciel système, les bootloaders et les binaires chargés.

À chaque démarrage, le micrologiciel UEFI vérifie la signature numérique de chaque composant par rapport aux clés approuvées stockées et bloque tout composant non signé ou mal signé. Pour activer le démarrage sécurisé sur votre instance de VM, vous devez définir le champ shieldConfig.bootType de la VM sur uefi et shieldConfig.enableSecureBoot sur true.

Pour consulter la documentation officielle sur l'UEFI, accédez à la page https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf.

À propos des modules vTPM (Virtual Trusted Platform Module)

Un vTPM est une puce informatique virtuelle spécialisée qui protège les clés et les certificats utilisés pour authentifier l'accès au système. Pour en savoir plus sur les vTPM, consultez https://trustedcomputinggroup.org/trusted-platform-module-tpm-summary/.

Vous pouvez également utiliser un vTPM pour protéger les secrets par masquage ou scellement. Pour en savoir plus sur le stockage scellé, consultez https://en.wikipedia.org/wiki/Trusted_Computing#SEALED-STORAGE. Consultez le projet Go-TPM sur GitHub (https://github.com/google/go-tpm) pour obtenir des exemples en langage Go illustrant comment utiliser un vTPM à cette fin.

Avant de commencer

Pour utiliser les commandes de l'interface de ligne de commande (CLI) gdcloud, assurez-vous d'avoir téléchargé, installé et configuré la CLI gdcloud. Toutes les commandes pour Distributed Cloud utilisent la CLI gdcloud ou kubectl et nécessitent un environnement de système d'exploitation (OS).

Obtenir le chemin d'accès au fichier kubeconfig

Pour exécuter des commandes sur le serveur de l'API Management, assurez-vous de disposer des ressources suivantes :

  1. Connectez-vous et générez le fichier kubeconfig pour le serveur d'API Management si vous n'en avez pas.

  2. Utilisez le chemin d'accès au fichier kubeconfig du serveur d'API Management pour remplacer MANAGEMENT_API_SERVER dans ces instructions.

Demander des rôles IAM

Pour obtenir les autorisations nécessaires pour activer le démarrage sécurisé ou vTPM sur votre VM, demandez à l'administrateur de projet IAM de vous accorder le rôle d'administrateur de projet de machine virtuelle (project-vm-admin).

Tous les rôles de VM doivent être liés à l'espace de noms du projet dans lequel se trouve la VM. Suivez la procédure pour valider votre accès.

Activer le démarrage sécurisé

Activez le démarrage sécurisé pour une VM. Suivez les instructions ci-dessous pour une VM appelée VM_NAME dans l'espace de noms du projet (PROJECT_NAMESPACE).

  1. Arrêtez votre VM si elle est en cours d'exécution avant d'appliquer le correctif. Si vous essayez de corriger shieldConfig pendant que la VM est en cours d'exécution, l'API renvoie une erreur Forbidden : Changes to shieldConfig are not allowed while the VM is running. Pour obtenir des instructions, consultez Arrêter une VM.

  2. Mettez à jour la ressource personnalisée de votre VM pour activer le démarrage sécurisé :

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      patch virtualmachines.virtualmachine.gdc.goog VM_NAME \
      --type merge --patch $'
    spec:
      shieldConfig:
        bootType: uefi
        enableSecureBoot: true
    '
    

    Remplacez les variables suivantes :

    • MANAGEMENT_API_SERVER : fichier kubeconfig du serveur d'API de gestion.
    • PROJECT_NAMESPACE : espace de noms du projet dans lequel se trouve la VM.
    • VM_NAME : Nom de la VM.
  3. Une fois le correctif appliqué, démarrez votre VM en suivant les instructions pour démarrer une VM.

  4. Vérifiez que vous avez activé le démarrage sécurisé. Établissez une connexion SSH avec votre VM et exécutez la commande suivante :

    mokutil --sb-state
    

    Si vous avez activé le démarrage sécurisé, la commande renvoie SecureBoot enabled.

    Si l'outil mokutil indique que vous n'avez pas activé le démarrage sécurisé, suivez les étapes de la section Résoudre les problèmes de configuration du démarrage sécurisé.

Résoudre les problèmes de configuration du démarrage sécurisé

  1. Ouvrez votre ressource personnalisée de VM dans un éditeur :

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    

    Remplacez les variables suivantes :

    • MANAGEMENT_API_SERVER : fichier kubeconfig du serveur d'API de gestion.
    • PROJECT_NAMESPACE : espace de noms du projet dans lequel se trouve la VM.
    • VM_NAME : Nom de la VM.
  2. Recherchez les champs ou les valeurs manquants, comme indiqué dans le champ spec de la section Activer le démarrage sécurisé. Elles sont obligatoires.

  3. S'il en manque ou si elles sont incorrectes, modifiez spec pour ajouter les champs manquants et corriger les valeurs erronées.

  4. Enregistrez le fichier.

  5. Suivez la procédure décrite dans Redémarrer la VM.

Si les étapes précédentes ne permettent pas de résoudre votre problème, consultez la documentation correspondant au système d'exploitation (OS) de la VM pour vérifier que la version de l'OS est compatible avec le démarrage sécurisé.

Activer vTPM

Activez vTPM pour une VM. Suivez les instructions ci-dessous pour une VM appelée VM_NAME dans l'espace de noms du projet (PROJECT_NAMESPACE).

  1. Arrêtez votre VM si elle est en cours d'exécution avant d'appliquer le correctif. Si vous essayez de corriger shieldConfig pendant que la VM est en cours d'exécution, l'API renvoie une erreur Forbidden : Changes to shieldConfig are not allowed while the VM is running. Pour obtenir des instructions, consultez Arrêter une VM.

  2. Mettez à jour votre ressource personnalisée de VM pour activer vTPM :

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      patch virtualmachines.virtualmachine.gdc.goog VM_NAME \
      --type merge --patch $'
    spec:
      shieldConfig:
        enableVtpm: true
    '
    

    Remplacez les variables suivantes :

    • MANAGEMENT_API_SERVER : fichier kubeconfig du serveur d'API de gestion.
    • PROJECT_NAMESPACE : espace de noms du projet dans lequel se trouve la VM.
    • VM_NAME : Nom de la VM.
  3. Une fois le correctif appliqué, démarrez votre VM en suivant les instructions pour démarrer une VM.

  4. Vérifiez que vous avez activé vTPM. Établissez une connexion SSH avec votre VM et exécutez la commande suivante :

    dmesg | grep -i tpm
    

    Si vous avez activé le vTPM, la commande renvoie le module TPM dans les tables ACPI. Le résultat ressemble à ce qui suit :

    [    7.620985] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1, rev-id 1)
    

    Si le ACPI tables n'affiche pas le module TPM, suivez les étapes de la section Résoudre les problèmes de configuration du vTPM.

Résoudre les problèmes de configuration du vTPM

  1. Ouvrez votre ressource personnalisée de VM dans un éditeur :

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    

    Remplacez les variables suivantes :

    • MANAGEMENT_API_SERVER : fichier kubeconfig du serveur d'API de gestion.
    • PROJECT_NAMESPACE : espace de noms du projet dans lequel se trouve la VM.
    • VM_NAME : Nom de la VM.
  2. Recherchez les champs ou les valeurs manquants, comme indiqué dans le champ spec de la section Activer vTPM. Elles sont obligatoires.

  3. S'il en manque ou si elles sont incorrectes, modifiez spec pour ajouter les champs manquants et corriger les valeurs erronées.

  4. Enregistrez le fichier.

  5. Suivez la procédure décrite dans Redémarrer la VM.

Si les étapes précédentes ne permettent pas de résoudre votre problème, consultez la documentation correspondant au système d'exploitation (OS) de la VM pour vérifier que la version de l'OS est compatible avec vTPM.