Laufwerke mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln verschlüsseln

In Compute Engine werden standardmäßig alle Daten im inaktiven Zustand verschlüsselt. Diese Verschlüsselung wird von Compute Engine durchgeführt und verwaltet. Zusätzliche Maßnahmen Ihrerseits sind nicht erforderlich. Sollten Sie diese Verschlüsselung allerdings selbst durchführen und verwalten wollen, können Sie Ihre eigenen Verschlüsselungsschlüssel angeben.

Wenn Sie Ihre eigenen Verschlüsselungsschlüssel bereitstellen, sichert Compute Engine die von Google generierten Schlüssel, die für die Ver- und Entschlüsselung Ihrer Daten verwendet werden, mithilfe Ihres Schlüssels. Nur Nutzer, die den korrekten Schlüssel angeben können, haben die Möglichkeit, Ressourcen zu verwenden, die durch einen vom Kunden bereitgestellten Verschlüsselungsschlüssel gesichert werden.

Google speichert Ihre Schlüssel nicht auf seinen Servern und kann nicht auf Ihre gesicherten Daten zugreifen – es sei denn, Sie stellen den Schlüssel zur Verfügung. Sollten Sie Ihren Schlüssel also vergessen oder verlieren, kann Google ihn unter keinen Umständen wiederherstellen. Das gilt auch für die Daten, die mit dem verlorenen Schlüssel verschlüsselt wurden.

Wenn Sie einen nichtflüchtigen Speicher löschen, verwirft Google die Codierschlüssel und die Daten werden unwiederbringlich gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden.

Hinweise

Spezifikationen

Verschlüsselung

Compute Engine verwendet Ihren Verschlüsselungsschlüssel, um die Verschlüsselungsschlüssel von Google mit AES-256-Verschlüsselung zu schützen.

Einschränkungen

Die Nutzung dieser Funktion unterliegt einigen Einschränkungen:

Allgemeine Einschränkungen

Vom Kunden bereitgestellte Verschlüsselungsschlüssel sind in folgenden Ländern nicht verfügbar.

  • Brasilien
  • Indien

Technische Einschränkungen

  • Sie können nur neue nichtflüchtige Speicher mit einem eigenen Schlüssel verschlüsseln. Vorhandene nichtflüchtige Speicher 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 sind bereits durch einen sitzungsspezifischen Verschlüsselungsschlüssel gesichert, der von Google nicht aufbewahrt wird.

  • Compute Engine speichert keine Verschlüsselungsschlüssel mit Instanzvorlagen. Sie können also keine eigenen Schlüssel verwenden, um Laufwerke in einer verwalteten Instanzgruppe zu verschlüsseln.

Erforderliches Schlüsselformat

Sie selbst generieren und verwalten Ihre Schlüssel. Sie müssen Compute Engine einen Schlüssel bereitstellen, der ein 256 Bit langer String und mit base64 (RFC 4648) codiert ist.

Das folgende Beispiel zeigt einen base64-codierten Schlüssel, der mit dem String "Hello from Google Cloud Platform" generiert wurde:

SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=

Er kann auch mit dem folgenden Skript generiert werden:

read -sp "String:" ; [[ ${#REPLY} == 32 ]] && echo "$(echo -n "$REPLY" | base64)" || (>&2 echo -e "\nERROR:Wrong Size"; false)

RSA-Key-Wrapping

Sie haben zusätzlich zur base64-Codierung Ihres Schlüssels die Möglichkeit, Ihren Schlüssel mit einem von Google bereitgestellten RSA-Public-Key-Zertifikat zu verpacken. Anschließend können Sie ihn in base64 codieren und in Ihren Anfragen verwenden.

Beim RSA-Wrapping verwenden Sie einen öffentlichen Schlüssel für die Verschlüsselung Ihrer Daten. Nachdem diese Daten mit dem öffentlichen Schlüssel verschlüsselt wurden, können sie nur mit dem entsprechenden privaten Schlüssel entschlüsselt werden. In diesem Fall ist der private Schlüssel nur den Google Cloud-Diensten bekannt. Durch die Verpackung Ihres Schlüssels mit dem RSA-Zertifikat wird sichergestellt, dass Ihr Schlüssel nur von Google Cloud-Diensten entpackt und für den Schutz Ihrer Daten verwendet werden kann.

Mehr hierzu erfahren Sie unter RSA-Verschlüsselung.

Für die Erstellung eines mit RSA verpackten Schlüssels für Compute Engine ist Folgendes erforderlich:

  1. Verpacken Sie Ihren Schlüssel mit dem öffentlichen Schlüssel, der in einem von Compute Engine verwalteten Zertifikat bereitgestellt wird. Achten Sie darauf, Ihren Schlüssel mit OAEP-Padding und nicht mit PKCS-#1-Padding (Version 1.5) zu verpacken.
  2. Codieren Sie Ihren mit RSA verpackten Schlüssel mit standardmäßiger base64-Codierung.

Laden Sie das öffentliche und von Compute Engine gewartete Zertifikat hier herunter:

https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem

Es gibt zahlreiche Möglichkeiten, Ihren Schlüssel zu generieren und mit RSA zu verpacken. Entscheiden Sie sich für eine Methode, mit der Sie vertraut sind. Im Folgenden sehen Sie zwei Beispiele, wie Sie Ihren Schlüssel mit RSA verpacken können.

Beispiel 1

In der folgenden Anleitung wird das Befehlszeilendienstprogramm openssl verwendet, um einen Schlüssel mit RSA zu verpacken und zu verschlüsseln.

  1. (Optional) Generieren Sie einen zufälligen 256-Bit-Schlüssel (32 Byte). Wenn Sie bereits einen Schlüssel haben, den Sie verwenden möchten, können Sie diesen Schritt überspringen. Es gibt zahlreiche Möglichkeiten, einen Schlüssel zu generieren. Das folgende Beispiel ist also nur eine Option:

    $ head -c 32 /dev/urandom | LC_CTYPE=C tr '\n' = > mykey.txt
    
  2. Laden Sie das Public-Key-Zertifikat herunter:

    $  curl -s -O -L https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem
  3. Extrahieren Sie den öffentlichen Schlüssel aus dem Zertifikat:

    $ openssl x509 -pubkey -noout -in google-cloud-csek-ingress.pem > pubkey.pem
    
  4. Verpacken Sie Ihren Schlüssel mit RSA und achten Sie dabei darauf, mykey.txt durch Ihre eigene Schlüsseldatei zu ersetzen.

    $ openssl rsautl -oaep -encrypt -pubin -inkey pubkey.pem -in mykey.txt -out rsawrappedkey.txt
    
  5. Codieren Sie Ihren mit RSA verpackten Schlüssel in base64.

    $ openssl enc -base64 -in rsawrappedkey.txt | tr -d '\n' | sed -e '$a\' > rsawrapencodedkey.txt
    

Beispiel 2

Mit dem folgenden Beispielskript in Python wird mithilfe der Kryptografie-Bibliothek ein zufälliger 256-Bit-String (32 Byte) generiert und ein base64-codierter, mit RSA verpackter Schlüssel erstellt:


import argparse
import base64
import os

from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
import requests

GOOGLE_PUBLIC_CERT_URL = (
    'https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem')

def get_google_public_cert_key():
    r = requests.get(GOOGLE_PUBLIC_CERT_URL)
    r.raise_for_status()

    # Load the certificate.
    certificate = x509.load_pem_x509_certificate(
        r.text.encode('utf-8'), default_backend())

    # Get the certicate's public key.
    public_key = certificate.public_key()

    return public_key

def wrap_rsa_key(public_key, private_key_bytes):
    # Use the Google public key to encrypt the customer private key.
    # This means that only the Google private key is capable of decrypting
    # the customer private key.
    wrapped_key = public_key.encrypt(
        private_key_bytes,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA1()),
            algorithm=hashes.SHA1(),
            label=None))
    encoded_wrapped_key = base64.b64encode(wrapped_key)
    return encoded_wrapped_key

def main(key_file):
    # Generate a new 256-bit private key if no key is specified.
    if not key_file:
        customer_key_bytes = os.urandom(32)
    else:
        with open(key_file, 'rb') as f:
            customer_key_bytes = f.read()

    google_public_key = get_google_public_cert_key()
    wrapped_rsa_key = wrap_rsa_key(google_public_key, customer_key_bytes)

    print('Base-64 encoded private key: {}'.format(
        base64.b64encode(customer_key_bytes).decode('utf-8')))
    print('Wrapped RSA key: {}'.format(wrapped_rsa_key.decode('utf-8')))

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument(
        '--key_file', help='File containing your binary private key.')

    args = parser.parse_args()

    main(args.key_file)

Ihr Schlüssel ist jetzt einsatzbereit.

Mit RSA verpackten Schlüssel verwenden

Mit dem gcloud-Befehlszeilentool können Sie einen normalen und einen mit RSA verpackten Schlüssel auf dieselbe Weise angeben.

Wenn Sie einen mit RSA verpackten Schlüssel nutzen möchten, verwenden Sie in der API das Attribut sha256 statt rawKey.

Ressourcen mit dem Befehlszeilentool verschlüsseln

Einrichtung

Verschlüsselungsschlüssel können über das gcloud-Befehlszeilentool verwendet werden.

Laden Sie gcloud herunter und installieren Sie es.

Schlüsseldatei

Wenn Sie Ihre Schlüssel mit dem Befehlszeilentool gcloud compute einrichten, stellen Sie codierte Schlüssel mit einer Schlüsseldatei bereit, die Ihre codierten Schlüssel als JSON-Liste enthält. Eine Schlüsseldatei kann mehrere Schlüssel enthalten. So haben Sie die Möglichkeit, mehrere Schlüssel zentral an einem Ort zu verwalten. Sie können aber auch einzelne Schlüsseldateien erstellen, um jeden Schlüssel separat zu handhaben. Eine Schlüsseldatei kann nur mit dem gcloud-Tool verwendet werden. Wenn Sie die API verwenden, müssen Sie den Schlüssel direkt in Ihrer Anfrage angeben.

Jeder Eintrag in Ihrer Schlüsseldatei muss Folgendes enthalten:

  • Den voll qualifizierten URI zu der Ressource, die durch den Schlüssel gesichert wird
  • Den entsprechenden Schlüssel
  • Den Typ des Schlüssels, entweder raw oder rsa-encrypted

Wenn Sie die Schlüsseldatei in Ihren Anfragen verwenden, sucht das Tool nach passenden Ressourcen und verwendet die entsprechenden Schlüssel. Wenn keine übereinstimmenden Ressourcen gefunden werden, schlägt die Anfrage fehl.

Ein Beispiel für eine Schlüsseldatei:

[
  {
  "uri": "https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/example-disk",
  "key": "acXTX3rxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY-c=",
  "key-type": "raw"
  },
  {
  "uri": "https://compute.googleapis.com/compute/v1/projects/myproject/global/snapshots/my-private-snapshot",
  "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  "key-type": "rsa-encrypted"
  }
]

Best Practices zum Verwalten Ihrer Schlüsseldatei

Beim Verwenden einer Schlüsseldatei beschränken Sie den Zugriff auf Ihre Datei auf diejenigen Nutzer, die Zugriff benötigen. Achten Sie darauf, die Berechtigungen für diese Dateien einzurichten, und ziehen Sie in Erwägung, diese Dateien mit weiteren Tools zu verschlüsseln:

Neuen nichtflüchtigen Speicher mit eigenen Schlüsseln verschlüsseln

Sie können einen neuen nichtflüchtigen Speicher verschlüsseln, wenn Sie bei der Erstellung der Instanz 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 bereitgestellter Schlüssel aus.
  4. Geben Sie im Textfeld den Verschlüsselungsschlüssel für das Laufwerk an und wählen Sie Verpackter Schlüssel aus, wenn der Schlüssel mit einem öffentlichen RSA-Schlüssel verpackt wurde.

gcloud

Verschlüsseln Sie im Tool gcloud compute während der Instanzerstellung ein Laufwerk mit dem Flag --csek-key-file. Wenn Sie einen mit RSA verpackten Schlüssel verwenden, nutzen Sie die Komponente gcloud beta:

gcloud (beta) compute instances create example-instance --csek-key-file example-file.json

So verschlüsseln Sie einen eigenständigen nichtflüchtigen Speicher:

gcloud (beta) compute disks create example-disk --csek-key-file example-file.json

API

Verschlüsseln Sie in der API ein Laufwerk mit dem Attribut diskEncryptionKey und beantragen Sie bei der v1 API einen Standardschlüssel (nicht RSA-verpackt) oder bei der Beta API einen mit RSA verpackten Schlüssel. Stellen Sie in Ihrer Anfrage eines der folgenden Attribute bereit:

  • rawKey – wenn Ihr Schlüssel nur base64-codiert ist
  • rsaEncryptedKey – wenn Ihr Schlüssel mit RSA verpackt und base64-codiert ist

Sie können beispielsweise während der Instanzerstellung ein neues Laufwerk mit einem mit RSA verpackten Schlüssel verschlüsseln:

POST
https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/instances

{
"machineType": "zones/us-central1-a/machineTypes/n1-standard-1",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-9-stretch-v20170619"
  },
  "boot": true
 }
],
...
}

Ähnlich können Sie die API verwenden, um einen neuen nichtflüchtigen Speicher zu erstellen und mit Ihrem eigenen Schlüssel zu verschlüsseln:

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/
us-central1-a/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2F
alpha%2Fprojects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-9-stretch-v20170619

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
 "type": "zones/us-central1-a/diskTypes/pd-standard"
}

Snapshot von einem verschlüsselten Laufwerk erstellen

Wenn Sie von einem verschlüsselten Laufwerk einen Snapshot erstellen, muss auch der Snapshot verschlüsselt werden. Sie müssen einen Schlüssel angeben, um den Snapshot zu verschlüsseln. Sie können verschlüsselte Laufwerke oder verschlüsselte Snapshots nicht zur Verwendung mit der Compute Engine-Standardverschlüsselung konvertieren – es sei denn, Sie erstellen ein komplett neues Laufwerk-Image und einen neuen nichtflüchtigen Speicher.

Snapshots verschlüsselter Laufwerke sind immer vollständige Snapshots, deren Speicherung mehr kostet als das Speichern von inkrementellen Snapshots.

Wenn Sie einen Snapshot von einem nichtflüchtigen Speicher eines verschlüsselten Laufwerks erstellen möchten, muss Ihre Anfrage für eine Snapshot-Erstellung den Verschlüsselungsschlüssel enthalten, den Sie verwendet haben, um den nichtflüchtigen Speicher zu verschlüsseln.

Lesen Sie die Best Practices für Snapshots von nichtflüchtigem Speicher, bevor Sie den Snapshot erstellen.

Console

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

    Zur Seite "Snapshots"

  2. Klicken Sie auf Snapshot erstellen.
  3. Wählen Sie unter Quelllaufwerk das verschlüsselte Laufwerk aus, von dem Sie einen Snapshot erstellen möchten.
  4. Geben Sie im Textfeld den Verschlüsselungsschlüssel für das Laufwerk an und wählen Sie Verpackter Schlüssel aus, wenn der Schlüssel mit einem öffentlichen RSA-Schlüssel verpackt wurde.
  5. Verschlüsseln Sie den neuen Snapshot. Geben Sie dazu unter dem Abschnitt Verschlüsselung einen weiteren Verschlüsselungsschlüssel an.

API

Stellen Sie in der API das Attribut sourceDiskEncryptionKey bereit, um auf den nichtflüchtigen Quellspeicher zuzugreifen. Sie können den neuen Snapshot auch optional mit dem Attribut snapshotEncryptionKey verschlüsseln.

Senden Sie eine Anfrage an die v1 API, um einen Standardschlüssel (nicht RSA-verpackt) zu erhalten bzw. an die Beta API, um einen mit RSA verpackten Schlüssel zu erhalten.

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
 },
 "sourceDiskEncryptionKey": {
   "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
 "name": "snapshot-encrypted-disk"
}

Das Attribut sourceDiskEncryptionKey muss mit dem Schlüssel übereinstimmen, der für die Verschlüsselung des nichtflüchtigen Speichers verwendet wurde. Andernfalls scheitert die Anfrage.

Mit dem optionalen Attribut snapshotEncryptionKey können Sie einen Schlüssel zum Verschlüsseln des Snapshots bereitstellen. Wenn der Snapshot zum Erstellen neuer nichtflüchtiger Speicher verwendet wird, muss ein passender Schlüssel bereitgestellt werden. Dieser Schlüssel muss im oben beschriebenen Format vorliegen. Sie können auch auf die Definition dieser Eigenschaft verzichten. Der Snapshot kann dann verwendet werden, um neue nichtflüchtige Speicher zu erstellen, ohne dass ein Schlüssel erforderlich ist.

Neues Image aus einem verschlüsselten Laufwerk oder einem verschlüsselten, benutzerdefinierten Image erstellen

Sie können benutzerdefinierte Images von verschlüsselten nichtflüchtigen Speichern erstellen oder verschlüsselte Images kopieren. Zum Kopieren von Images können Sie nicht die Konsole verwenden. Verwenden Sie zum Kopieren von Images das gcloud-Befehlszeilentool oder die API.

Console

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

    Weiter zur Seite „Images“

  2. Klicken Sie auf Image erstellen.
  3. Wählen Sie unter Quelllaufwerk das verschlüsselte Laufwerk aus, von dem Sie ein Image erstellen möchten.
  4. Wählen Sie unter Verschlüsselung eine Schlüsselverwaltungslösung für die Verschlüsselung aus.
  5. Wenn der Schlüssel mit einem öffentlichen RSA-Schlüssel verpackt wurde, wählen Sie Verpackter Schlüssel aus.

gcloud

Folgen Sie der Anleitung zum Erstellen eines Images und fügen Sie das Flag --csek-key-file mit einem Pfad zur Verschlüsselungsschlüsseldatei für das verschlüsselte Quellobjekt hinzu. Wenn Sie einen mit RSA verpackten Schlüssel verwenden, nutzen Sie die Komponente gcloud beta:

gcloud (beta) compute images create .... --csek-key-file example-file.json

Wenn Sie das neue Image ebenfalls mit Ihrem Schlüssel verschlüsseln möchten, fügen Sie der Schlüsseldatei den Schlüssel hinzu. Beispiel:

[
  {
  "uri": "https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/source-disk",
  "key": "acX3RqzxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY-c=",
  "key-type": "raw"
  },
  {
  "uri": "https://compute.googleapis.com/compute/v1/projects/myproject/global/snapshots/the-new-image",
  "key": "TF0t-cSfl7CT7xRF1LTbAgi7U6XXUNC4zU_dNgx0nQc=",
  "key-type": "raw"
  }
]

API

Ihre Anfrage zur API-Erstellung muss das Verschlüsselungsschlüssel-Attribut für Ihr Quellobjekt enthalten. Fügen Sie abhängig vom Typ des Quellobjekts beispielsweise eines der folgenden Attribute ein:

  • Nichtflüchtiger Speicher: sourceDiskEncryptionKey
  • Image: sourceImageEncryptionKey

Fügen Sie je nach Schlüsseltyp auch das Attribut rawKey oder rsaEncryptedKey ein. Senden Sie eine Anfrage an die v1 API, um einen Standardschlüssel (nicht RSA-verpackt) zu erhalten bzw. an die Beta API, um einen mit RSA verpackten Schlüssel zu erhalten. Im folgenden Beispiel wird eine verschlüsselte und ein mit RSA verpackter nichtflüchtiger Speicher in ein Image umgewandelt, das denselben Verschlüsselungsschlüssel verwendet.

POST https://compute.googleapis.com/compute/beta/projects/myproject/global/images

{
 "name": "image-encrypted-disk",
 "sourceDiskEncryptionKey": {
    "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
 "imageEncryptionKey": {
    "rsaEncryptedKey":  "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
    },
 "sourceDisk": "projects/myproject/zones/us-central1-a/disks/source-disks"
}

Mit dem optionalen Attribut imageEncryptionKey können Sie einen Schlüssel bereitstellen, um das Image zu verschlüsseln. Wenn das Image also für die Erstellung neuer nichtflüchtiger Speicher verwendet wird, muss ein übereinstimmender Schlüssel angegeben werden. Dieser Schlüssel muss im oben beschriebenen Format vorliegen. Sie können auch auf die Definition dieses Attributs verzichten. Das Image kann dann verwendet werden, um neue nichtflüchtige Speicher zu erstellen, ohne dass ein Schlüssel erforderlich ist.

Importiertes Image verschlüsseln

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

Importieren Sie das benutzerdefinierte Compute Engine-Image, das Sie verschlüsseln möchten. Geben Sie den URI für die komprimierte Datei und einen Pfad zu Ihrer Verschlüsselungsschlüsseldatei an.

Console

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

    Weiter zur Seite „Images“

  2. Klicken Sie auf Image erstellen.
  3. Wählen Sie unter Quelle die Option Cloud Storage-Datei aus.
  4. Geben Sie unter Cloud Storage-Datei den Cloud Storage-URI ein.
  5. Wählen Sie unter Verschlüsselung die Option Vom Kunden verwalteter Schlüssel aus und stellen Sie im Textfeld den Verschlüsselungsschlüssel bereit, um das Image zu verschlüsseln.

gcloud

Erstellen Sie mit dem Befehl compute images create ein neues Image und geben Sie das Flag --csek-key-file mit einer Verschlüsselungsschlüsseldatei an. Wenn Sie einen mit RSA verpackten Schlüssel verwenden, nutzen Sie die Komponente gcloud beta:

gcloud (beta) compute images create [IMAGE_NAME] \
  --source-uri gs://[BUCKET_NAME]/[COMPRESSED_FILE] \
  --csek-key-file [KEY_FILE]

Dabei gilt:

  • [IMAGE_NAME] ist ein Name für das neue benutzerdefinierte Image.
  • [BUCKET_NAME] ist der Name des Cloud Storage-Buckets, in dem sich Ihre komprimierte Image-Datei befindet.
  • [COMPRESSED_FILE] ist der Name der komprimierten Image-Datei.
  • [KEY_FILE] ist der Pfad zu einer Verschlüsselungsschlüsseldatei auf Ihrer lokalen Workstation.

API

Um ein neues Bild zu verschlüsseln, das aus einer RAW-Datei erstellt wurde, fügen Sie der Anfrage zur Image-Erstellung das neue Attribut imageEncryptionKey gefolgt von rawKey oder rsaEncryptedKey hinzu. Senden Sie eine Anfrage an die v1 API, um einen Standardschlüssel (nicht RSA-verpackt) zu erhalten bzw. an die Beta API, um einen mit RSA verpackten Schlüssel zu erhalten.

POST https://compute.googleapis.com/compute/beta/projects/myproject/global/images

{
"rawDisk": {
 "source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
},
"name": "new-encrypted-image",
"sourceType": "RAW",
"imageEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
}

Nichtflüchtigen Speicher von einer verschlüsselten Ressource erstellen

Laufwerk von einem verschlüsselten Snapshot erstellen

Console

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

    Zur Seite "Laufwerke"

  2. Klicken Sie auf Neues Laufwerk.
  3. Wählen Sie unter Quelltyp die Option Snapshot aus.
  4. Geben Sie in dem Textfeld den Verschlüsselungsschlüssel für den Snapshot an und wählen Sie Verpackter Schlüssel aus, wenn der Schlüssel mit dem RSA-Public-Key verpackt wurde.

gcloud

Geben Sie bei der Laufwerkserstellung im gcloud compute-Tool den Verschlüsselungsschlüssel für den Snapshot mithilfe des Flags --csek-key-file an. Wenn Sie einen mit RSA verpackten Schlüssel verwenden, nutzen Sie die Komponente gcloud beta:

gcloud (beta) compute disks create ... --source-snapshot example-snapshot --csek-key-file example-file.json

API

Um einen verschlüsselten Snapshot zu verwenden, geben Sie in Ihrer Anfrage sourceSnapshotEncryptionKey gefolgt von rawKey oder rsaEncryptedKey an. Beantragen Sie bei der v1 API einen Standardschlüssel (nicht RSA-verpackt) oder bei der Beta API einen mit RSA verpackten Schlüssel. Beispiel einer Anfrage für einen neuen nichtflüchtigen Speicher mit einem verschlüsselten Snapshot:

POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks

{
"name": "disk-from-encrypted-snapshot",
"sourceSnapshot": "global/snapshots/encrypted-snapshot",
"sourceSnapshotEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  }
}

Laufwerk von einem verschlüsselten Image erstellen

Console

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

    Zur Seite "Laufwerke"

  2. Klicken Sie auf Neues Laufwerk.
  3. Wählen Sie unter Quelltyp die Option Image aus.
  4. Geben Sie im Textfeld den Verschlüsselungsschlüssel für das Image an und wählen Sie Verpackter Schlüssel aus, wenn der Schlüssel mit einem öffentlichen RSA-Schlüssel verpackt wurde.

gcloud

Stellen Sie bei der Laufwerkserstellung im gcloud compute-Tool den Verschlüsselungsschlüssel für das Image mithilfe des Flags --csek-key-file bereit. Wenn Sie einen mit RSA verpackten Schlüssel verwenden, nutzen Sie die Komponente gcloud beta:

gcloud (beta) compute disks create ... --image example-image --csek-key-file example-file.json

API

Um ein verschlüsseltes Image zu verwenden, geben Sie sourceImageEncryptionKey gefolgt von entweder rawKey oder rsaEncryptedKey an. Beantragen Sie bei der v1 API einen Standardschlüssel (nicht RSA-verpackt) oder bei der Beta API einen mit RSA verpackten Schlüssel.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks

{
"name": "disk-from-encrypted-image",
"sourceImageEncryptionKey": {
  "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
"sourceImage": "global/images/encrypted-image"
}

Einer neuen Instanz ein verschlüsseltes Laufwerk hinzufügen

Console

  1. Öffnen Sie in der Google Cloud Console die Seite VM-Instanzen.

    Die Seite VM-Instanzen aufrufen

  2. Klicken Sie auf Instanz erstellen.
  3. Klicken Sie unter Bootlaufwerk auf die Option Ändern.
  4. Wählen Sie Vorhandenes Laufwerk aus.
  5. Wählen Sie ein vorhandenes Laufwerk aus, um es der Instanz hinzuzufügen.
  6. Geben Sie in dem Textfeld den Verschlüsselungsschlüssel an und wählen Sie Verpackter Schlüssel aus, wenn der Schlüssel mit dem öffentlichen RSA-Schlüssel verpackt wurde.
  7. Fahren Sie mit der Erstellung der Instanz fort.

gcloud

Wenn Sie eine Instanz erstellen und dieser ein verschlüsseltes Laufwerk hinzufügen möchten, erstellen Sie eine Schlüsseldatei und geben Sie bei der Instanzerstellung den Schlüssel mit dem Flag --csek-key-file an. Wenn Sie einen mit RSA verpackten Schlüssel verwenden, nutzen Sie die Komponente gcloud beta:

gcloud (beta) compute instances create example-instance \
  --disk name=example-disk,boot=yes \
  --csek-key-file example-file.json

API

Verwenden Sie die Compute Engine API zum Erstellen einer Instanz und geben Sie in der Laufwerkspezifikation entweder den rawKey oder den rsaEncryptedKey an. Beantragen Sie bei der v1 API einen Standardschlüssel (nicht RSA-verpackt) oder bei der Beta API einen mit RSA verpackten Schlüssel.

Dies ist ein Snippet aus einer Beispielspezifikation eines Laufwerks:

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/myproject/zones/us-central1-f/disks/encrypted-disk",
  "diskEncryptionKey": {
    "rawKey": "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0="
  }
 }
]

Instanzen mit verschlüsselten Laufwerken starten oder neu starten

Weitere Informationen zum Stoppen oder Starten einer Instanz mit verschlüsselten Laufwerken finden Sie unter Instanzen mit verschlüsselten Laufwerken neu starten.

Mit der Befehlszeile gemischte Ressourcen erstellen

Wenn Sie mit dem gcloud-Befehlszeilentool eine Mischung aus vom Kunden verschlüsselten und standardverschlüsselten Ressourcen in einer einzigen Anfrage erstellen möchten, können Sie das Flag --csek-key-file mit einer Schlüsseldatei und das Flag --no-require-csek-key-create in Ihrer Anfrage verwenden. Durch Angabe der beiden Flags werden mit dem gcloud-Tool alle vom Kunden verschlüsselten Ressourcen, die in Ihrer Schlüsseldatei explizit definiert wurden, und ebenso alle von Ihnen angegebenen Standardressourcen erstellt.

Angenommen, eine Schlüsseldatei enthält Folgendes:

[
  {
  "uri": "https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks/example-disk",
  "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==",
  "key-type": "rsa-encrypted"
  }
]

Wenn Sie in derselben Anfrage eine Instanz mit einem vom Kunden verschlüsselten Laufwerk mithilfe der Schlüsseldatei und eine Instanz mit einem standardmäßig verschlüsselten Laufwerk erstellen möchten, können Sie so vorgehen:

gcloud beta compute instances create example-disk example-disk-2 \
    --csek-key-file mykeyfile.json --no-require-csek-key-create

Normalerweise wäre es nicht möglich, example-disk-2 zu erstellen, wenn Sie vorher nur das Flag --csek-key-file angegeben haben, weil das Laufwerk nicht explizit in der Schlüsseldatei definiert wurde. Durch Hinzufügen von --no-require-csek-key-create werden beide Laufwerke erstellt – ein mit der Schlüsseldatei verschlüsseltes Laufwerk und ein mit der Google-Verschlüsselung verschlüsseltes Laufwerk.

Vom Kunden bereitgestellte Verschlüsselungsschlüssel von einem nichtflüchtigen Speicher entfernen

Sie können die Inhalte eines vom Kunden verschlüsselten Laufwerks entschlüsseln und ein neues Laufwerk erstellen, das stattdessen die Compute Engine-Standardverschlüsselung verwendet.

  1. Erstellen Sie ein Image des verschlüsselten Laufwerks und legen Sie für das neue Image die automatische Verschlüsselung fest.
  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 gesichert. Auch die Snapshots, die Sie von diesem Laufwerk erstellen, müssen die Standardverschlüsselung verwenden.