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

Standardmäßig werden von Google Compute Engine im Ruhezustand alle Daten 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 bereitstellen.

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 über den korrekten Schlüssel verfügen, 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 sichern.

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.

  • Von Compute Engine werden keine Verschlüsselungsschlüssel mit Instanzvorlagen gespeichert. 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 Platform-Diensten bekannt. Durch die Verpackung Ihres Schlüssels mit dem RSA-Zertifikat wird sichergestellt, dass Ihr Schlüssel nur von Google Cloud Platform-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 dafür, 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 verwenden 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.

gcloud herunterladen und installieren.

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 Tool gcloud 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 Requests verwenden, sucht das Tool nach passenden Ressourcen und verwendet die entsprechenden Schlüssel. Werden keine passenden Ressourcen gefunden, scheitert der Request.

Ein Beispiel für eine Schlüsseldatei:

[
  {
  "uri": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/example-disk",
  "key": "acXTX3rxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY-c=",
  "key-type": "raw"
  },
  {
  "uri": "https://www.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 für die Verwaltung Ihrer Schlüsseldatei

Wenn Sie eine Schlüsseldatei verwenden, sollten Sie den Zugriff auf Ihre Datei auf die Nutzer beschränken, die sie 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, indem Sie bei der Erstellung der Instanz oder des Laufwerks einen Schlüssel bereitstellen.

Console

  1. Gehen Sie zur Seite "Laufwerke".

    Zur Seite "Laufwerke"

  2. Klicken Sie auf Neues Laufwerk und geben Sie die Attribute für das neue Laufwerk ein.
  3. Wählen Sie unter Verschlüsselung im Drop-down-Menü Vom Kunden bereitgestellt 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 der Property 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 Ihrem Request eine der folgenden Properties 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://www.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://www.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 aus einem verschlüsselten Laufwerk erstellen

Wenn Sie aus 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.

Sehen Sie sich die Best Practices für Snapshots von nichtflüchtigem Speicher an, bevor Sie Ihren Snapshot erstellen.

Console

  1. Gehen Sie zur Seite "Snapshots".

    Zur Seite "Snapshots"

  2. Klicken Sie auf Neuer Snapshot.
  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 die Property sourceDiskEncryptionKey bereit, um auf die persistente Quellfestplatte zuzugreifen. Sie können den neuen Snapshot auch optional mit der Property snapshotEncryptionKey verschlüsseln.

Senden Sie einen Request 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://www.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"
}

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

Mit dem optionalen snapshotEncryptionKey können Sie einen Schlüssel bereitstellen, um den Snapshot zu verschlüsseln. Wird der Snapshot für die Erstellung neuer nichtflüchtiger Speicher verwendet, muss dann ein übereinstimmender 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 aus verschlüsselten persistenten Festplatten erstellen oder verschlüsselte Images kopieren. Sie können die Konsole nicht dazu verwenden, Images zu kopieren. Verwenden Sie stattdessen das gcloud-Befehlszeilentool oder die API.

Console

  1. Gehen Sie in der Google Cloud Platform Console auf die Seite "Image erstellen".
    Zur Seite "Image erstellen"
  2. Klicken Sie auf Neues Image.
  3. Wählen Sie unter Quelllaufwerk das verschlüsselte Laufwerk aus, von dem Sie ein Image 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. Optional können Sie das neue Image ebenfalls verschlüsseln. Geben Sie hierfür im Abschnitt Verschlüsselung einen Verschlüsselungsschlüssel an.

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. Verwenden Sie die Komponente gcloud beta, wenn Sie einen mit RSA verpackten Schlüssel nutzen:

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://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/source-disk",
  "key": "acX3RqzxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY-c=",
  "key-type": "raw"
  },
  {
  "uri": "https://www.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 die Verschlüsselungsschlüssel-Property für Ihr Quellobjekt enthalten. Fügen Sie abhängig vom Typ des Quellobjekts beispielsweise eine der folgenden Properties ein:

  • Nichtflüchtiger Speicher: sourceDiskEncryptionKey
  • Image: sourceImageEncryptionKey

Fügen Sie je nach Schlüsseltyp außerdem die Properties rawKey oder rsaEncryptedKey ein. Senden Sie einen Request 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://www.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 der optionalen Property imageEncryptionKey können Sie einen Schlüssel bereitstellen, um das Image zu verschlüsseln. Wenn das Image also für die Erstellung neuer persistenter Festplatten 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 dieser Property 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 ein benutzerdefiniertes Image in Compute Engine importieren. Vor dem Import eines Images müssen Sie eine Laufwerk-Image-Datei erstellen und komprimieren und diese komprimierte Datei in Google 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. Gehen Sie zur Seite "Images".

    Weiter zur Seite "Images"

  2. Klicken Sie auf Neues Image.
  3. Wählen Sie unter Quelltyp die Option Cloud Storage-Objekt aus.
  4. Wählen Sie unter Verschlüsselung die Option "Vom Kunden bereitgestellt" aus und stellen Sie im Textfeld den Verschlüsselungsschlüssel bereit, um das Image zu verschlüsseln.
  5. Geben Sie im Abschnitt Pfad des Cloud Storage-Objekts den Cloud Storage-URI ein.

gcloud

Verwenden Sie den Befehl compute images create, um ein neues Image zu erstellen, 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 Folgendes:

  • [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 Image zu verschlüsseln, das aus einer RAW-Datei erstellt wurde, fügen Sie dem Request zur Image-Erstellung die neue Property imageEncryptionKey gefolgt von rawKey oder rsaEncryptedKey hinzu. Senden Sie einen Request 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://www.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 aus einer verschlüsselten Ressource erstellen

Laufwerk aus einem verschlüsselten Snapshot erstellen

Console

  1. Gehen Sie zur Seite "Laufwerke".

    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

Stellen Sie im Tool gcloud compute mit dem Flag --csek-key-file den Verschlüsselungsschlüssel für den Snapshot bereit, wenn Sie das Laufwerk erstellen. 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 Ihrem Request den sourceSnapshotEncryptionKey gefolgt von rawKey oder rsaEncryptedKey an. Senden Sie eine Anfrage an die v1 API, um einen Standardschlüssel (nicht mit RSA verpackt) zu erhalten bzw. an die Beta API, um einen mit RSA verpackten Schlüssel zu erhalten. Beispiel eines Requests für einen neuen nichtflüchtigen Speicher mit einem verschlüsselten Snapshot:

POST https://www.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 aus einem verschlüsselten Image erstellen

Console

  1. Gehen Sie zur Seite "Laufwerke".

    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 im Tool gcloud compute mit dem Flag --csek-key-file den Verschlüsselungsschlüssel für das Image bereit, wenn Sie das Laufwerk erstellen. 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

Geben Sie sourceImageEncryptionKey gefolgt von rawKey oder rsaEncryptedKey an, um ein verschlüsseltes Image zu verwenden. Senden Sie eine Anfrage an die v1 API, um einen Standardschlüssel (nicht mit RSA verpackt) zu erhalten bzw. an die Beta API, um einen mit RSA verpackten Schlüssel zu erhalten.

POST https://www.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. Gehen Sie zur Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Neue Instanz.
  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

Wenn Sie mit der Compute Engine API eine Instanz erstellen, geben Sie in der Laufwerkspezifikation entweder den rawKey oder den rsaEncryptedKey an. Senden Sie eine Anfrage an die v1 API, um einen Standardschlüssel (nicht mit RSA verpackt) zu erhalten bzw. an die Beta API, um einen mit RSA verpackten Schlüssel zu erhalten.

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 Instanz mit einem verschlüsselten Laufwerk neu starten (nur auf Englisch verfügbar).

Mit der Befehlszeile gemischte Ressourcen erstellen

Wenn Sie mit dem Befehlszeilentool gcloud in einer einzelnen Anfrage vom Kunden verschlüsselte und standardmäßig verschlüsselte Ressourcen erstellen möchten, können Sie in Ihrer Anfrage das Flag --csek-key-file mit einer Schlüsseldatei und das Flag --no-require-csek-key-create verwenden. Durch Angabe der beiden Flags werden mit dem Tool gcloud 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://www.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 verschlüsseltes mit der Schlüsseldatei und ein weiteres verschlüsseltes mit der Google-Verschlüsselung.

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. Für Snapshots, die Sie von diesem Laufwerk erstellen, müssen Sie ebenfalls die Standardverschlüsselung verwenden.

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Compute Engine-Dokumentation