Benutzerdefinierte Shielded Images erstellen

In diesem Thema wird beschrieben, wie Sie das Laufwerk vorbereiten, Sicherheitszertifikate generieren und alle erforderlichen Betriebssystemfeatures aktivieren, um ein benutzerdefiniertes Shielded Image zu erstellen.

Standardmäßig unterstützt Shielded VM Container-Optimized OS, verschiedene Linux-Distributionen und mehrere Versionen von Windows Server. Wenn Sie jedoch benutzerdefinierte Images für Ihre Anwendung benötigen, können Sie trotzdem die Vorteile von Shielded VM nutzen.

Laufwerk vorbereiten

Shielded VM benötigt zur Unterstützung von Funktionen wie Secure Boot eine Unified Extensible Firmware Interface (UEFI)-konforme Firmware. Shielded VM erfordert ein GPT-Schema (GUID Partition Table). Master Boot Record (MBR) wird nicht unterstützt.

Das Laufwerk muss mindestens zwei Partitionen haben:

  • DFI-Systempartition (ESP): 100 Megabyte (MB) sind für diese Partition ausreichend und nur ein Vorschlag. Bei Bedarf können Sie eine größere Partition erstellen. Die einzige Voraussetzung für den ESP ist, dass er mit einem FAT-Dateisystem (File Allocation Table) formatiert werden muss.
  • Betriebssystempartition:Der Rest des Laufwerks. Diese Partition enthält das Bootbetriebssystem (Linux oder Windows). Die Größe dieser Partition ist nicht beschränkt.

Sie können bei Bedarf weitere Datenpartitionen erstellen.

Betriebssystem in die Betriebssystempartition kopieren

Sobald das Laufwerk korrekt formatiert und partitioniert ist, kopieren Sie die Betriebssystemdateien in die Betriebssystempartition. Das Betriebssystem verfügt über einen Bootloader, der sich in einem gültigen Pfad auf dem ESP befinden muss, wie in der Android-Spezifikation angegeben: \EFI\Boot\bootx64.efi. Beachten Sie, dass der Bootloader des Betriebssystems möglicherweise an den angegebenen Speicherort kopiert werden muss.

Unter Windows gibt es den Befehl bcdboot, mit dem der Bootloader des Betriebssystems an den richtigen Speicherort kopiert werden kann, sowie andere Aktionen, die Windows benötigt (z. B. den BCD-Speicher kopieren). Weitere Informationen finden Sie im Microsoft Hardware Dev Center unter BCDBoot-Befehlszeilenoptionen.

Wenn Sie Shielded VM-Images verwenden, können Sie auch zwei zusätzliche Sicherheitsfunktionen nutzen: Virtual Trusted Platform Module (vTPM) und Integritätsüberwachung. In den folgenden Abschnitten werden die Vorteile dieser Funktionen und die Betriebssystemanforderungen beschrieben.

Virtual Trusted Platform Module (vTPM)

Ein Trusted Platform Module ist ein spezielles Gerät zum Schutz von Objekten wie Schlüsseln und Zertifikaten, mit denen Sie den Zugriff auf Ihr System authentifizieren. Auf Shielded VM-Images werden virtualisierte Versionen von TPM-Geräten verwendet, um den gemessenen Start zu aktivieren. Kurz gesagt: Measured Boot gewährleistet die Integrität des kritischen Ladepfads von Boot- und Kerneltreibern. Weitere Informationen zu vTPM und Gemessenem Start finden Sie in der Dokumentation zu Shielded VM.

Zur Nutzung von vTPM und Measured Boot ist ein Treiber erforderlich. Folgende Betriebssystemversionen müssen mindestens TPM 2.0 unterstützen:

  • Windows Server 2012
  • Linux-Version 3.20
  • Red Hat Enterprise Linux 7.3

Integritätsmonitoring

Da Integritätsmonitoring hilft Ihnen, den Zustand Ihrer VM-Instanzen zu verstehen und entsprechende Entscheidungen zu treffen. Monitoring verwendet die von Measured Boot generierten Daten, um Berichte über die VM-Instanz zu erstellen. Die Shielded VM-Dokumentation enthält weitere Informationen zum Integritätsmonitoring und zur Automatisierung von Antworten auf Fehler bei der Integritätsprüfung.

Zur Unterstützung des Integritätsmonitoring von Shielded VM muss das Image Integritätssignale erzeugen:

  • Windows generiert standardmäßig Integritätssignale.
  • Unter Linux muss das IMA-Modul installiert und aktiviert sein. Für das Modul muss CONFIG_IMA_MEASURE_PCR_IDX auf 10 gesetzt sein. Dies ist der Standardwert für das IMA-Modul.

Laufwerk-Images in Compute Engine importieren

Sobald das Image vorbereitet ist, müssen Sie es in Compute Engine hochladen. Die erforderlichen Schritte zum Hochladen des Images inGoogle Cloudfinden Sie unter Bootlaufwerk-Images in Compute Engine importieren.

Zertifikate für Secure Boot einrichten

Wenn Sie ein Shielded VM-Image hinzufügen, werden eine Reihe öffentlicher Secure Boot-Zertifikate und -Datenbanken an Compute Engine übergeben. Diese Dateien werden in den entsprechenden UEFI-Variablen gespeichert und verwendet, um Vertrauensstellungen zwischen Plattform, Firmware und Betriebssystem herzustellen. Zertifikate sind X.509-Zertifikate, die mit Distinguished Encoding-Regeln (DER) codiert sind. Die Datenbanken können entweder ein Zertifikat oder eine binäre Binärdatei sein. Es gibt insgesamt vier Werte:

  • Platform Key (pk): Ein Schlüssel, mit dem die Vertrauensstellung zwischen dem Plattforminhaber und der Firmware hergestellt wird. Sie können nur einen Plattformschlüssel angeben. Dabei muss es sich um ein gültiges X.509-Zertifikat handeln.
  • Schlüsselaustauschschlüssel (kek): Ein Schlüssel, mit dem eine Vertrauensstellung zwischen der Firmware und dem Betriebssystem hergestellt wird. Sie können mehrere Schlüssel für diesen Wert angeben.
  • Forbidden Key Database (dbx): Eine Datenbank mit Zertifikaten, die widerrufen wurden und das System nicht mehr startet, wenn eine Bootdatei mit einem dieser signiert ist. Sie können einen oder mehrere Werte für diesen Wert angeben.
  • Key Database (db): Eine Datenbank mit vertrauenswürdigen Zertifikaten, die zum Signieren von Bootdateien verwendet werden können. Sie können einen oder mehrere Werte für diesen Wert angeben.

Weitere Informationen zu diesen Werten und ihrer Funktionsweise finden Sie in der UEFI-Spezifikation.

Im folgenden Beispiel wird OpenSSL verwendet, um die Secure Boot-Schlüssel und -Zertifikate zu erstellen.

  • Generieren Sie ein 2048-Bit-RSA-Schlüsselpaar.

    openssl genrsa -out secure-boot-key.rsa 2048
    
  • Generieren Sie ein selbstsigniertes X.509-Zertifikat aus dem Schlüssel im DER-Format

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

Schutzschild in Google Cloudhinzufügen

Mithilfe des hochgeladenen Images und der Zertifikate können Sie das Image jetzt Compute Engine hinzufügen. Das Image kann über das Google Cloud CLI oder die Compute Engine API hinzugefügt werden.

gcloud

Fügen Sie Compute Engine das benutzerdefinierte Image hinzu:

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

Dabei gilt:

  • [IMAGE_NAME] ist der Name für das neue Image.
  • [SOURCE_DISK] ist das Laufwerk, von dem Sie das neue Image erstellen möchten.
  • [ZONE] ist die Zone, in der sich das Laufwerk befindet.

Die Option WINDOWS für guest-os-features ist nur erforderlich, wenn Sie ein Windows-Image verwenden. Weitere Informationen zum Erstellen eines Images finden Sie in der gcloud create-Referenz.

REST

Folgen Sie der Anleitung zum Erstellen eines Images von einem nichtflüchtigen Speicher. Geben Sie dabei aber initial_state_config im Anfragetext an.

...
"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]
        },
        ...
    ]
}

Standardzertifikate

Beachten Sie, dass pk, keks, dbxs und dbs optionale Felder sind. Wenn Sie eine anfängliche Statuskonfiguration angeben, sind einige oder alle dieser Felder möglicherweise nicht festgelegt. Wenn eine neue Instanz aus dem Image erstellt wird,stellt Google Cloud einen Standardwert für PK, KEK, db und dbx bereit, sofern für kein nicht festgelegtes Feld ein benutzerdefinierter Wert festgelegt wurde. Wenn Sie keine anfängliche Statuskonfiguration angeben (d. h. die Konfiguration fehlt oder ist nicht nur leer), hat das Image die ursprüngliche Statuskonfiguration des Quell-Images.

Die Standardwerte dieser Felder sind:

  • PK: Das Zertifikat, das dem von Google erstellten privaten Standardschlüssel zugeordnet ist.
  • KEK: Die standardmäßigen Microsoft KEK-Zertifikate.

    • MicCorKEKCA2011_2011-06-24.crt: Download von Microsoft oder GitHub.

      SHA-1: 31590bfd89c9d74ed087dfac66334b3931254b30

    • microsoft corporation kek 2k ca 2023.der: Download von Microsoft oder GitHub.

      SHA-1: 459ab6fb5e284d272d5e3e6abc8ed663829d632b

  • dbx: Die standardmäßige Microsoft DBX-Sperrliste. Download aus dem Forum der Unified Extensible Firmware Interface: Datei der UEFI-Sperrliste

  • db: Die folgenden vier Zertifikate:

    • MicWinProPCA2011_2011-10-19.der: Download von Microsoft oder GitHub.

      SHA-1: 580a6f4cc4e4b669b9ebdc1b2b3e087b80d0678d

    • MicCorUEFCA2011_2011-06-27.der: Download von Microsoft oder GitHub.

      SHA-1: 46def63b5ce61cf8ba0de2e6639c1019d0ed14f3

    • microsoft uefi ca 2023.der: Download von Microsoft oder GitHub.

      SHA-1: b5eeb4a6706048073f0ed296e7f580a790b59eaa

    • windows uefi ca 2023.der: Download von Microsoft oder GitHub.

      SHA-1: 45a0fa32604773c82433c3b7d59e7466b3ac0c67

Seien Sie dabei vorsichtig, denn wenn Sie Ihre eigenen Zertifikate hinzufügen, werden die Standardzertifikate überschrieben, anstatt sie mit den von Ihnen angegebenen Zertifikaten zusammenzuführen.