Ressourcen mit Cloud KMS-Schlüsseln schützen


In Compute Engine werden inaktive Kundeninhalte standardmäßig verschlüsselt. Diese Verschlüsselung wird von Compute Engine durchgeführt und verwaltet. Zusätzliche Maßnahmen Ihrerseits sind nicht erforderlich. Wenn Sie die Verschlüsselung jedoch selbst steuern und verwalten möchten, können Sie Schlüsselverschlüsselungsschlüssel verwenden. Schlüsselverschlüsselungsschlüssel verschlüsseln nicht direkt Ihre Daten, sondern die Datenverschlüsselungsschlüssel, mit denen Daten verschlüsselt werden.

Compute Engine bietet Ihnen zwei Optionen für Schlüsselverschlüsselungsschlüssel:

  • Mit Cloud Key Management Service (KMS) können Sie Schlüsselverschlüsselungsschlüssel erstellen und verwalten. Weitere Informationen finden Sie unter Schlüsselverwaltung Unter diesem Thema finden Sie detaillierte Informationen zu dieser Option. Sie wird auch als Vom Kunden verwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) bezeichnet.

  • Sie können auch Ihre eigenen Schlüsselverschlüsselungsschlüssel erstellen und verwalten. Weitere Informationen zu dieser Option, die auch als Vom Kunden bereitgestellte Verschlüsselungsschlüssel (Customer-Supplied Encryption Keys, CSEK) bezeichnet wird, finden Sie unter Laufwerke mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln verschlüsseln.

Nach dem Erstellen einer Compute Engine-Ressource, die durch Cloud KMS geschützt ist, müssen Sie den Schlüssel nicht angeben, da Compute Engine den verwendeten KMS-Schlüssel kennt. Dies unterscheidet sich von der Art, wie Compute Engine auf Ressourcen zugreift, die durch vom Kunden bereitgestellte Schlüssel geschützt sind. Für diesen Zugriff müssen Sie den vom Kunden bereitgestellten Schlüssel angeben.

Weitere Informationen finden Sie unter Inaktive Daten in Google Cloud verschlüsseln.

Vorbereitung

  1. Machen Sie sich mit den Informationen zu Laufwerken, Images, Snapshots von nichtflüchtigem Speicher und VM-Instanzen vertraut.

  2. Überlegen Sie sich, ob Sie Compute Engine und Cloud KMS im selben Google Cloud-Projekt oder in verschiedenen Projekten ausführen möchten.

    Weitere Informationen zu Google Cloud-Projekt-IDs und -Projektnummern finden Sie unter Projekte identifizieren.

  3. Richten Sie für das Google Cloud-Projekt, in dem Compute Engine ausgeführt wird, den API-Zugriff für Compute Engine ein.

  4. Gehen Sie für das Google Cloud-Projekt, in dem Cloud KMS ausgeführt wird, so vor:

    1. Aktivieren Sie die Cloud KMS API.
    2. Erstellen Sie einen Schlüsselbund und einen Schlüssel, wie unter Schlüsselbunde und Schlüssel erstellen beschrieben.
  5. Weisen Sie die Cloud KMS CryptoKey Encrypter/Decrypter-Rolle dem Compute Engine-Dienst-Agent zu. Dieses Konto hat das folgende Format:

    service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
    

    Sie können die Google Cloud CLI verwenden, um die Rolle zuzuweisen:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
        --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Dabei gilt:

    • KMS_PROJECT_ID: die ID Ihres Google Cloud-Projekts, in dem Cloud KMS ausgeführt wird (auch wenn dies dasselbe Projekt ist, in dem Compute Engine ausgeführt wird)
    • PROJECT_NUMBER: die Projektnummer (nicht die Google Cloud-Projekt-ID) des Cloud-Projekts, in dem die Compute Engine-Ressourcen ausgeführt werden

Beschränkungen

  • Regionale Ressourcen (Laufwerke) können durch Schlüssel am selben Standort oder am Standort global verschlüsselt werden. Beispielsweise kann ein Laufwerk in Zone us-west1-a mit einem Schlüssel in us-west1 oder global verschlüsselt werden. Globale Ressourcen (Images, Snapshots) können mit Schlüsseln an jedem beliebigen Standort verschlüsselt werden.

  • Die Verschlüsselung eines Laufwerks, eines Snapshots oder eines Images mit einem Schlüssel ist permanent. Sie können die Verschlüsselung nicht aus der Ressource entfernen oder den verwendeten Schlüssel ändern. Die einzige Möglichkeit zum Entfernen von Verschlüsselungs- oder Änderungsschlüsseln besteht darin, eine Kopie der Ressource zu erstellen und dabei eine neue Verschlüsselungsoption anzugeben.

Spezifikationen

In diesem Abschnitt werden die Verschlüsselungsspezifikation und die Einschränkungen beschrieben, die bei der Verwendung von Cloud KMS-Schlüsseln gelten.

Verschlüsselung

Zum Schutz Ihrer Daten in Compute Engine verwendet Cloud KMS AES-256-Schlüssel. Dabei handelt es sich um Schlüsselverschlüsselungsschlüssel zur Verschlüsselung der Datenverschlüsselungsschlüssel, die Ihre Daten verschlüsseln.

Beschränkungen

  • Sie können nur neue nichtflüchtige Speicher, Images und Snapshots mit Ihrem eigenen Schlüssel verschlüsseln. Vorhandene Ressourcen können nicht mit einem eigenen Schlüssel verschlüsselt werden.

  • Sie können Ihre eigenen Schlüssel nicht mit lokalen SSDs verwenden, da Daten auf lokalen SSDs nur so lange zugänglich sind wie die entsprechende virtuelle Maschine. Lokale SSDs erhalten Schutz durch einen sitzungsspezifischen Verschlüsselungsschlüssel, der von Google nicht aufbewahrt wird.

Neuen nichtflüchtigen Speicher mit CMEK verschlüsseln

Sie können einen neuen nichtflüchtigen Speicher verschlüsseln, wenn Sie bei der Erstellung der VM oder des Laufwerks einen Schlüssel bereitstellen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Laufwerke auf.

    Zur Seite „Laufwerke“

  2. Klicken Sie auf Laufwerk erstellen und geben Sie die Attribute für das neue Laufwerk ein.
  3. Wählen Sie unter Verschlüsselung die Option Vom Kunden verwalteter Schlüssel aus.
  4. Wählen Sie im Drop-down-Menü den Cloud KMS-Schlüssel aus, mit dem Sie dieses Laufwerk verschlüsseln möchten.
  5. Klicken Sie auf Erstellen, um das Laufwerk anzulegen.

gcloud

gcloud compute disks create encrypted-disk \
  --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

Dabei gilt:

  • REGION: die Region, in der sich das Laufwerk befindet
  • KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthält
  • KEY: der Name des Schlüssels, mit dem das Laufwerk verschlüsselt wird

API

Verwenden Sie zum Verschlüsseln eines Laufwerks das Attribut diskEncryptionKey mit dem Attribut kmsKeyName. Sie können beispielsweise während der VM-Erstellung ein neues Laufwerk mit Ihrem Cloud KMS-Schlüssel verschlüsseln. Geben Sie dazu Folgendes an:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
"machineType": "zones/ZONE/machineTypes/e2-standard-2",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-8-jessie-v20160301"
  },
  "boot": true
 }
],
...
}

Dabei gilt:

  • PROJECT_ID: die ID des Google Cloud-Projekts, in dem Compute Engine ausgeführt wird
  • ZONE ist die Zone, in der die VM erstellt werden soll.
  • REGION: die Region, in der sich das Laufwerk befindet
  • KEY_RING: der Name des Schlüsselbunds, der den Schlüssel enthält
  • KEY: der Name des Schlüssels, mit dem das Laufwerk verschlüsselt wird

Die API können Sie in ähnlicher Weise nutzen und damit auch einen neuen eigenständigen nichtflüchtigen Speicher erstellen und diesen mit Ihrem Cloud KMS-Schlüssel verschlüsseln:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2Fprojects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-8-jessie-v20160301

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
 "type": "zones/ZONE/diskTypes/pd-standard"
}

Snapshot von einem mit CMEK verschlüsselten Laufwerk erstellen

Zum Schützen eines Snapshots, den Sie von einem mit CMEK verschlüsselten Laufwerk erstellen, müssen Sie denselben Verschlüsselungsschlüssel verwenden, mit dem das Laufwerk verschlüsselt wurde.

Snapshots von Laufwerken, die mit CMEK verschlüsselt wurden, sind inkrementell.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Snapshots auf.

    Zu "Snapshots"

  2. Klicken Sie auf Snapshot erstellen.
  3. Wählen Sie unter Quelllaufwerk das Quelllaufwerk für den Snapshot aus. Der Snapshot wird automatisch mit demselben Schlüssel verschlüsselt wie das Quelllaufwerk.

gcloud

gcloud compute disks snapshot encrypted-disk --zone ZONE

Ersetzen Sie ZONE durch die Zone, in der der Snapshot erstellt werden soll.

API

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY"
 },
 "name": "snapshot-encrypted-disk"
}

Ersetzen Sie SNAPSHOT_KEY durch den Namen des Schlüssels, mit dem Sie das Quelllaufwerk verschlüsselt haben.

Ein Snapshot, der einen CMEK verwendet, kann nur erstellt werden, wenn das Quelllaufwerk ebenfalls CMEK verwendet. Darüber hinaus können verschlüsselte Laufwerke oder verschlüsselte Snapshots nur für die Standardverschlüsselung von Compute Engine konvertiert werden, wenn Sie ein vollständig neues Laufwerk-Image und einen neuen nichtflüchtigen Speicher erstellen.

Importiertes Image mit CMEK verschlüsseln

Sie können ein neues Image verschlüsseln, wenn Sie ein benutzerdefiniertes Image in Compute Engine importieren. Vor dem Importieren eines Images müssen Sie eine Speicherabbilddatei erstellen und komprimieren und diese komprimierte Datei in Cloud Storage hochladen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Images auf.

    Zur Seite „Images“

  2. Klicken Sie auf Image erstellen.
  3. Wählen Sie unter Quelllaufwerk das Laufwerk aus, von dem Sie ein Image erstellen möchten.
  4. Wählen Sie unter Verschlüsselung die Option Vom Kunden verwalteter Schlüssel aus.
  5. Wählen Sie im Drop-down-Menü den Cloud KMS-Schlüssel aus, mit dem Sie das Image verschlüsseln möchten.
  6. Fahren Sie dann mit der Erstellung des Images fort.

gcloud

gcloud compute images create [...] \
  --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

API

So können Sie ein importiertes Image verschlüsseln: Geben Sie den URI für die komprimierte Datei an, fügen Sie der Anfrage zum Erstellen des Images das Attribut imageEncryptionKey hinzu und geben Sie im Attribut kmsKeyName den Schlüssel zum Verschlüsseln des Images an:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images

{
 "rawDisk": {
  "source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
  },
 "name": "new-encrypted-image",
 "sourceType": "RAW",
 "imageEncryptionKey": {
   "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/IMAGE_KEY"
   }
}

Ersetzen Sie IMAGE_KEY durch den Namen des Schlüssels, den Sie zum Verschlüsseln des Image verwenden möchten.

Nichtflüchtigen Speicher anhand einer mit CMEK verschlüsselten Ressource erstellen

Laufwerk anhand eines mit CMEK verschlüsselten Snapshots erstellen

So erstellen Sie einen neuen eigenständigen nichtflüchtigen Speicher mit einem verschlüsselten Snapshot:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Laufwerke auf.

    Zur Seite „Laufwerke“

  2. Klicken Sie auf Laufwerk erstellen und geben Sie die Attribute für das neue Laufwerk ein.
  3. Wählen Sie unter Quelltyp den gewünschten Schnapshot oder das Image aus.
  4. Fahren Sie dann mit der Erstellung des nichtflüchtigen Speichers fort.

gcloud

gcloud compute disks create [...] --source-snapshot example-snapshot \
  --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

Wenn Sie statt eines Snapshots ein Image verwenden möchten, ersetzen Sie --source-snapshot example-snapshot durch --image example-image.

API

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks

{
  "name": "disk-from-encrypted-snapshot",
  "sourceSnapshot": "global/snapshots/encrypted-snapshot"
}

Mit CMEK verschlüsseltes Bootlaufwerk an eine neue VM anhängen

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Zur Seite „Instanz erstellen“

  2. Geben Sie die VM-Details an und klicken Sie im Abschnitt Bootlaufwerk auf Ändern. Gehen Sie anschließend so vor:

    1. Klicken Sie auf Vorhandene Laufwerke.
    2. Wählen Sie in der Liste Laufwerk ein vorhandenes Laufwerk aus, um es an die VM anzuhängen.
    3. Klicken Sie auf Auswählen.
  3. Fahren Sie mit dem VM-Erstellungsprozess fort.

gcloud

gcloud compute instances create example-instance \
  --disk name=encrypted-disk,boot=yes

API

"disks": [
  {
    "deviceName": "encrypted-disk",
    "source": "projects/PROJECT_ID/zones/ZONE/disks/encrypted-disk"
  }
]

Cloud KMS-Verschlüsselungsschlüssel aus nichtflüchtigem Speicher entfernen

Sie können den Inhalt eines verschlüsselten Laufwerks entschlüsseln und ein neues Laufwerk erstellen, das stattdessen die Standardverschlüsselung von Compute Engine verwendet. In Compute Engine werden standardmäßig alle Daten im inaktiven Zustand verschlüsselt.

  1. Erstellen Sie einen Snapshot des verschlüsselten Laufwerks.
  2. Verwenden Sie das neue Image, um einen neuen nichtflüchtigen Speicher zu erstellen.

Nachdem Sie den neuen nichtflüchtigen Speicher erstellt haben, werden die Inhalte des Laufwerks durch die Compute Engine-Standardverschlüsselung geschützt. Auch die Snapshots, die Sie von diesem Laufwerk erstellen, müssen die Standardverschlüsselung verwenden.

Cloud KMS-Verschlüsselungsschlüssel für einen nichtflüchtigen Speicher rotieren

Rotieren Sie den Schlüssel, der zum Verschlüsseln des Laufwerks verwendet wird, indem Sie ein neues Laufwerk erstellen, das eine neue Cloud KMS-Schlüsselversion verwendet. Das Rotieren von Schlüsseln ist eine Best Practice zur Einhaltung standardisierter Sicherheitsverfahren. So rotieren Sie Ihre Schlüssel:

  1. Rotieren Sie Ihre Cloud KMS-Schlüssel.
  2. Erstellen Sie einen Snapshot des verschlüsselten Laufwerks.
  3. Verwenden Sie den neuen Snapshot, um einen neuen nichtflüchtigen Speicher mit dem im vorherigen Schritt rotierten Schlüssel zu erstellen.

Beim Erstellen des neuen nichtflüchtigen Speichers wird die neue Schlüsselversion für die Verschlüsselung verwendet. Auch für Snapshots, die von diesem Laufwerk erstellt werden, wird die gleiche Schlüsselversion verwendet.

Wenn Sie einen Schlüssel rotieren, werden Daten, die mit früheren Schlüsselversionen verschlüsselt wurden, nicht automatisch neu verschlüsselt. Weitere Informationen finden Sie unter Daten neu verschlüsseln. Durch das Rotieren eines Schlüssels wird eine vorhandene Schlüsselversion nicht automatisch deaktiviert oder gelöscht.

Auswirkungen beim Deaktivieren oder Löschen von CMEKs

Wird ein Verschlüsselungsschlüssel deaktiviert oder gelöscht, hat das folgende Auswirkungen auf die folgenden Ressourcen, die durch den Schlüssel geschützt werden:

  • VMs mit angehängten Laufwerken können nicht gestartet werden. Wenn Sie die Shutdown-Funktion von VMs bei Widerrufen des Schlüssels aktiviert haben, fahren VMs mit angehängten Laufwerken, die durch den Schlüssel geschützt werden, herunter.
  • Laufwerke können nicht an VMs angehängt und es können auch keine Snapshots von ihnen erstellt werden.
  • Snapshots können nicht zum Erstellen von Laufwerken verwendet werden.
  • Images können nicht zum Erstellen von Laufwerken verwendet werden.

Wenn Sie den Schlüssel deaktivieren, können Sie die vorherigen Auswirkungen durch Aktivieren des Schlüssels umkehren. Wenn Sie den Schlüssel löschen, können Sie die vorherigen Effekte nicht umkehren.

Herunterfahren einer VM beim Widerrufen von Cloud KMS-Schlüsseln konfigurieren

Sie können ein VM so konfigurieren, dass sie automatisch heruntergefahren wird, wenn Sie den Cloud KMS-Schlüssel widerrufen, durch den der an die VM angehängte nichtflüchtige Speicher geschützt wird. Sie können einen Schlüssel widerrufen, indem Sie ihn deaktivieren oder löschen. Wenn diese Einstellung aktiviert ist, fährt die VM innerhalb von 7 Stunden nach dem Widerrufen des Schlüssels herunter.

Wenn Sie den Schlüssel wieder aktivieren, können Sie die VM mit dem angehängten Laufwerk neu starten, das durch den Schlüssel geschützt wird. Die VM wird nach der Aktivierung des Schlüssels nicht automatisch neu gestartet.

Console

So konfigurieren Sie eine VM zum Herunterfahren, wenn ein Cloud KMS-Schlüssel widerrufen wird:

  1. Beginnen Sie mit dem Erstellen einer VM, die ein Laufwerk enthält, das durch einen Cloud KMS-Schlüssel geschützt ist.
  2. Öffnen Sie das Menü Netzwerk, Laufwerke, Sicherheit, Verwaltung, einzelne Mandanten.
  3. Maximieren Sie den Bereich Verwaltung.
  4. Wählen Sie unter Widerrufsrichtlinie für vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) die Option Herunterfahren aus.

gcloud

Verwenden Sie den Befehl gcloud compute instances create, um eine VM zu erstellen, und legen Sie das Feld --key-revocation-action-type=stop fest.

gcloud compute instances create VM_NAME \
  --image IMAGE \
  --key-revocation-action-type=stop

API

Verwenden Sie die Methode instances.insert, um eine VM zu erstellen, und legen Sie das Feld "keyRevocationActionType": "STOP" fest. Im folgenden Beispiel wird die VM aus einem öffentlichen Image erstellt.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ],
  "keyRevocationActionType": "STOP"
}

Alternativ können Sie eine Instanzvorlage konfigurieren, um damit VMs zu erstellen, die beim Widerrufen des Schlüssels heruntergefahren werden. Dazu verwenden Sie die gcloud CLI oder die Compute Engine API.

Console

So konfigurieren Sie VMs, die aus einer Instanzvorlage erstellt werden, wenn ein Cloud KMS-Schlüssel widerrufen wird:

  1. Erstellen Sie eine neue Instanzvorlage, die ein Laufwerk enthält, das durch einen Cloud KMS-Schlüssel geschützt ist.
  2. Öffnen Sie das Menü Netzwerk, Laufwerke, Sicherheit, Verwaltung, einzelne Mandanten.
  3. Maximieren Sie den Bereich Verwaltung.
  4. Wählen Sie unter Widerrufsrichtlinie für vom Kunden verwalteten Verschlüsselungsschlüssel (CMEK) die Option Herunterfahren aus.

gcloud

Erstellen Sie mit dem Befehl gcloud compute instance-templates create eine Instanzvorlage und legen Sie das Feld --key-revocation-action-type=stop fest.

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
  --key-revocation-action-type=stop

API

Erstellen Sie mithilfe der Methode instanceTemplates.insert eine Instanzvorlage. In der API für Instanzvorlagen müssen alle erforderlichen Konfigurationsfelder explizit definiert werden. Wenn Sie möchten, dass VMs, die aus dieser Vorlage erstellt werden, bei Widerrufen des Schlüssels heruntergefahren werden, geben Sie "keyRevocationActionType": "STOP" an. Eine Instanzvorlage mit den minimal erforderlichen Feldangaben zum Erstellen von VMs, die beim Widerrufen des Schlüssels heruntergefahren werden, sieht beispielsweise so aus:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceTemplates

{
  "name": "example-template",
  "properties": {
  "machineType": "e2-standard-4",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs": [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
      }
    }
  ],
  "keyRevocationActionType": "STOP"
  }
}

Nachdem Sie eine VM erstellt haben, die für das Herunterfahren bei einem Cloud KMS-Widerruf konfiguriert ist, erstellen Sie einen nichtflüchtigen Speicher, der mit einem Cloud KMS-Schlüssel verschlüsselt ist, und hängen Sie ihn an.