VM sicher booten

In diesem Dokument wird beschrieben, wie Sie Secure Boot oder ein virtualisiertes Trusted Platform Module (vTPM) auf einer VM-Instanz in einer Air-Gap-Appliance von Google Distributed Cloud (GDC) aktivieren.

Dieses Dokument richtet sich an Entwickler in Plattformadministrator- oder Anwendungsoperatorgruppen, die Secure Boot und vTPMs auf VMs in einer GDC-Appliance-Umgebung mit Air Gap konfigurieren.

Secure Boot

Secure Boot ist eine Funktion, die dafür sorgt, dass das System nur authentische Software ausführt. Dazu wird die digitale Signatur aller Bootkomponenten überprüft und der Vorgang angehalten, wenn die Überprüfung fehlschlägt. Sie verwendet die Unified Extensible Firmware Interface (UEFI)-Firmware, um Zertifikate und Schlüssel zu verwalten, die Hersteller zum Signieren von Systemfirmware, Bootloadern und geladenen Binärdateien verwenden.

Bei jedem Start überprüft die UEFI-Firmware die digitale Signatur jeder Komponente anhand der gespeicherten genehmigten Schlüssel und blockiert alle nicht signierten oder falsch signierten Komponenten. Wenn Sie Secure Boot auf Ihrer VM-Instanz aktivieren möchten, müssen Sie den bootloader-Typ der VM auf uefi festlegen.

Die offizielle UEFI-Dokumentation finden Sie unter https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf.

Virtual Trusted Platform Modules

Ein vTPM ist ein spezieller virtueller Computerchip, der die Schlüssel und Zertifikate schützt, die zur Authentifizierung des Systemzugriffs verwendet werden. Weitere Informationen zu vTPMs finden Sie unter https://trustedcomputinggroup.org/trusted-platform-module-tpm-summary/.

Sie können auch ein vTPM verwenden, um Secrets durch Abschirmung oder Versiegelung zu schützen. Weitere Informationen zum versiegelten Speicher finden Sie unter https://en.wikipedia.org/wiki/Trusted_Computing#SEALED-STORAGE. Auf GitHub finden Sie im Projekt Go-TPM (https://github.com/google/go-tpm) Beispiele dafür, wie Sie in der Sprache Go ein vTPM für diesen Zweck verwenden.

Hinweis

Wenn Sie die Befehlszeilenbefehle (Command-Line Interface, CLI) von gdcloud verwenden möchten, müssen Sie die gdcloud-CLI heruntergeladen, installiert und konfiguriert haben. Für alle Befehle für die GDC-Air-Gap-Appliance wird die gdcloud- oder kubectl-Befehlszeile verwendet. Außerdem ist eine Betriebssystemumgebung erforderlich.

Pfad der kubeconfig-Datei abrufen

Damit Sie Befehle für den Management API-Server ausführen können, benötigen Sie die folgenden Ressourcen:

  1. Suchen Sie den Namen des Management API-Servers oder fragen Sie Ihren Plattformadministrator danach.

  2. Melden Sie sich an und generieren Sie die kubeconfig-Datei für den Management API-Server, falls Sie noch keine haben.

  3. Verwenden Sie den Pfad, um MANAGEMENT_API_SERVER{"</var>"}} in dieser Anleitung zu ersetzen.

IAM-Rollen anfordern

Wenn Sie Secure Boot oder vTPM auf Ihrer VM aktivieren möchten, wenden Sie sich an Ihren Projekt-IAM-Administrator, um die Rolle Project VirtualMachine Admin (project-vm-admin) anzufordern.

Alle VM-Rollen müssen an den Namespace des Projekts gebunden sein, in dem sich die VM befindet. Folgen Sie der Anleitung, um Ihren Zugriff zu bestätigen.

Secure Boot aktivieren

Secure Boot für eine VM aktivieren. Verwenden Sie die folgende Anleitung für eine VM mit dem Namen VM_NAME im Namespace des Projekts (PROJECT_NAMESPACE).

  1. Benutzerdefinierte VM-Ressource aktualisieren, um Secure Boot zu aktivieren:

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
     shieldConfig:
       bootType: uefi
       enableSecureBoot: true
    '
    
  2. Wenn die VM ausgeführt wird, starten Sie sie neu. Folgen Sie dazu der Anleitung zum Neustarten einer VM.

  3. Prüfen Sie, ob Sie Secure Boot aktiviert haben. Stellen Sie eine SSH-Verbindung zu Ihrer VM her und führen Sie den folgenden Befehl aus:

    mokutil --sb-state
    

    Wenn Sie Secure Boot erfolgreich aktiviert haben, gibt der Befehl SecureBoot enabled zurück.

    Wenn das Tool mokutil meldet, dass Sie Secure Boot nicht aktiviert haben, folgen Sie der Anleitung im Abschnitt Fehlerbehebung bei der Secure Boot-Konfiguration.

Fehlerbehebung bei der Konfiguration von Secure Boot

  1. Öffnen Sie die benutzerdefinierte VM-Ressource in einem Editor:

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. Suchen Sie nach fehlenden Feldern oder Werten, wie im Feld spec unter „Führen Sie den folgenden Befehl aus“ beschrieben. Diese sind erforderlich.

  3. Wenn Felder fehlen oder falsch sind, bearbeiten Sie spec, um die fehlenden Felder hinzuzufügen und falsche Werte zu korrigieren.

  4. Speichern Sie die Datei.

  5. Folgen Sie der Anleitung unter VM neu starten.

Wenn das Problem durch die vorherigen Schritte nicht behoben wird, prüfen Sie in der Dokumentation für das Betriebssystem der VM, ob die Betriebssystemversion Secure Boot unterstützt.

Virtual Trusted Platform Module (vTPM) aktivieren

vTPM für eine VM aktivieren Folgen Sie der Anleitung für eine VM mit dem Namen VM_NAME im Namespace des Projekts (PROJECT_NAMESPACE).

  1. Benutzerdefinierte VM-Ressource aktualisieren, um vTPM zu aktivieren:

    kubectl --kubeconfig MANAGEMENT_API_SERVER patch virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE --type merge --patch $'
    spec:
       shieldConfig:
          enableVtpm: true
    '
    
  2. Wenn die VM ausgeführt wird, starten Sie sie neu. Folgen Sie dazu der Anleitung zum Neustarten einer VM.

  3. Prüfen Sie, ob Sie vTPM aktiviert haben. Stellen Sie eine SSH-Verbindung zu Ihrer VM her und führen Sie den folgenden Befehl aus:

    dmesg | grep -i tpm
    

    Wenn Sie vTPM erfolgreich aktiviert haben, gibt der Befehl das TPM-Modul als Teil der ACPI-Tabellen zurück. Die Ausgabe sieht dann ungefähr so aus:

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

    Wenn das TPM-Modul nicht angezeigt wird, folgen Sie der Anleitung im Abschnitt Fehlerbehebung bei der vTPM-Konfiguration.ACPI tables

Fehlerbehebung bei der vTPM-Konfiguration

  1. Öffnen Sie die benutzerdefinierte VM-Ressource in einem Editor:

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog VM_NAME -n PROJECT_NAMESPACE
    
  2. Suchen Sie nach fehlenden Feldern oder Werten, wie im Feld spec unter Führen Sie den folgenden Befehl aus beschrieben. Diese sind erforderlich.

  3. Wenn Felder fehlen oder falsch sind, bearbeiten Sie spec, um die fehlenden Felder hinzuzufügen und falsche Werte zu korrigieren.

  4. Speichern Sie die Datei.

  5. Folgen Sie der Anleitung unter VM neu starten.

Wenn das Problem durch die vorherigen Schritte nicht behoben wird, prüfen Sie in der Dokumentation für das Betriebssystem der VM, ob die Betriebssystemversion vTPM unterstützt.