Vom Kunden bereitgestellte Verschlüsselungsschlüssel

Einrichtung

Auf dieser Seite werden vom Kunden bereitgestellte Verschlüsselungsschlüssel erläutert. Weitere Verschlüsselungsoptionen finden Sie unter Datenverschlüsselungsoptionen.

Übersicht

Zusätzlich zur standardmäßigen Cloud Storage-Verschlüsselung können Sie Ihren eigenen AES-256-Verschlüsselungsschlüssel mit standardmäßiger Base64-Codierung bereitstellen. Dieser Schlüssel wird als vom Kunden bereitgestellter Verschlüsselungsschlüssel bezeichnet. Wenn Sie einen vom Kunden bereitgestellten Verschlüsselungsschlüssel verwenden, wird dieser Schlüssel nicht dauerhaft von Cloud Storage auf seinen Servern gespeichert und auch nicht anderweitig verwaltet.

Stattdessen stellen Sie für jeden Cloud Storage-Vorgang Ihren Schlüssel bereit. Nach Abschluss des Vorgangs wird er dann von den Cloud Storage-Servern gelöscht. In Cloud Storage bleibt lediglich ein kryptografischer Hash-Wert des Schlüssels gespeichert. Dieser dient zur Validierung zukünftiger Anfragen. Mit dem Hash kann weder Ihr Schlüssel wiederhergestellt noch können Ihre Daten entschlüsselt werden.

Wir empfehlen, jeden Schlüssel an einem sicheren Ort zu sichern und Vorkehrungen zu treffen, um sicherzustellen, dass Ihre Schlüssel nicht mit nicht vertrauenswürdigen Parteien geteilt werden. Wenn eine Datei oder ein Rechner mit Ihrem Verschlüsselungsschlüssel gehackt wurde, sollten Sie sofort die Schlüsselrotation für alle Objekte ausführen, die mit dem gehackten Schlüssel verschlüsselt wurden.

Wann wird der Schlüssel verwendet?

Wenn Sie einen vom Kunden bereitgestellten Verschlüsselungsschlüssel auf ein Objekt anwenden, verwendet Cloud Storage den Schlüssel, um Folgendes zu verschlüsseln:

  • Die Daten des Objekts
  • Die CRC32C-Prüfsumme des Objekts
  • Den MD5-Hash des Objekts

Die standardmäßige Cloud Storage-Verschlüsselung wird verwendet, um die verbleibenden Metadaten für das Objekt zu verschlüsseln, einschließlich des Objektnamens. Damit können Sie allgemeine Metadaten lesen und aktualisieren sowie Objekte auflisten, überschreiben und löschen, ohne auf den vom Kunden bereitgestellten Verschlüsselungsschlüssel angewiesen zu sein. Sie brauchen aber ausreichende Berechtigungen dafür.

Wenn ein Objekt z. B. mit einem vom Kunden bereitgestellten Verschlüsselungsschlüssel verschlüsselt wird, benötigen Sie den Schlüssel für Vorgänge wie das Herunterladen oder Verschieben des Objekts. Wenn Sie versuchen, die Metadaten des Objekts ohne Angabe des Schlüssels zu lesen, erhalten Sie beispielsweise den Objektnamen und den Content-Type, aber nicht die CRC32C-Prüfsumme oder den MD5-Hash des Objekts. Wenn Sie Ihren Schlüssel in der Anfrage für die Objektmetadaten angeben, werden auch die CRC32C-Prüfsumme und der MD5-Hash des Objekts in den Metadaten zurückgegeben.

Verhalten beim Umschreiben

Wenn Sie ein Objekt, das mit einem vom Kunden bereitgestellten Verschlüsselungsschlüssel verschlüsselt wurde, rewrite, ohne einen Schlüssel zum Verschlüsseln des umgeschriebenen Objekts bereitzustellen, geschieht Folgendes:

HTTPS-Prüfung

Es empfiehlt sich, Ihre Daten bei Schreib- und Lesevorgängen während der Übertragung über das Internet mit TLS (Transport Layer Security) oder HTTPS zu schützen. TLS ist erforderlich, wenn Sie den Verschlüsselungsschlüssel selbst bereitstellen. Wenn Sie Ihren Verschlüsselungsschlüssel versehentlich über eine unverschlüsselte (HTTP-)Verbindung verwenden, kann der Schlüssel von einem Angreifer abgefangen werden. Die Cloud Storage API gibt daher eine Fehlermeldung mit einer Warnung zurück, dass Ihr Schlüssel möglicherweise manipuliert wurde. In diesem Fall sollten Sie Ihre Schlüssel sofort rotieren.

Beschränkungen

Vom Kunden bereitgestellte Verschlüsselungsschlüssel unterliegen den folgenden Beschränkungen:

  • Sie können mit der Google Cloud Console keine Objekte herunterladen, die mit einem vom Kunden bereitgestellten Verschlüsselungsschlüssel verschlüsselt sind. Genauso können Sie das Objekt nicht mit einem vom Kunden bereitgestellten Verschlüsselungsschlüssel verschlüsseln, wenn Sie das Objekt mit der Google Cloud Console hochladen.

  • Storage Transfer Service und Cloud Dataflow unterstützen keine Objekte, die mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln verschlüsselt wurden.

  • Sie können die vom Kunden bereitgestellten Verschlüsselungsschlüssel nur für einzelne Objekte festlegen. Sie können keinen standardmäßigen vom Kunden bereitgestellten Verschlüsselungsschlüssel für einen Bucket festlegen.

  • Wenn Sie an Objekten, die mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln verschlüsselt wurden, einen compose-Vorgang ausführen, müssen die Komponentenobjekte mit demselben Schlüssel verschlüsselt werden. Außerdem müssen Sie den Schlüssel in der Zusammensetzungsanfrage angeben. Das resultierende zusammengesetzte Objekt wird mit demselben Schlüssel verschlüsselt.

  • Wenn ein Objekt mit einem vom Kunden bereitgestellten Verschlüsselungsschlüssel verschlüsselt wird, ignoriert Cloud Storage mit dem Objekt verknüpfte Cache-Control-Metadaten und stellt das Objekt mit Cache-Control auf private, max-age=0 bereit.

Verschlüsselungsschlüssel mit REST APIs

Wenn Sie einen vom Kunden bereitgestellten Verschlüsselungsschlüssel verwenden und direkt mit der JSON oder der XML arbeiten, müssen Sie sowohl den AES-256-Schlüssel als auch einen SHA256-Hash des Schlüssels angeben. Sie sollten sowohl den AES-256-Schlüssel als auch den SHA256-Hash des Schlüssels sicher speichern. Cloud Storage speichert den SHA256-Hash Ihres Schlüssels in den Metadaten des Objekts, wo Sie ihn später abrufen können. Dieser SHA256-Hash kann von Cloud Storage (oder anderen Nutzern) nicht zum Entschlüsseln Ihrer Daten verwendet werden. Er dient lediglich zur eindeutigen Identifizierung des zum Verschlüsseln eines bestimmten Objekts verwendeten AES-256-Schlüssels.

Anfrageheader

Fügen Sie Ihrer JSON- oder XML-Anfrage die folgenden HTTP-Header hinzu:

Headername Wert Beschreibung
x-goog-encryption-algorithm String Der zu verwendende Verschlüsselungsalgorithmus. Erfordert den Wert AES256.
x-goog-encryption-key String Ein gemäß RFC 4648 mit Base64 codierter String Ihres AES-256-Verschlüsselungsschlüssels.
x-goog-encryption-key-sha256 String Ein gemäß RFC 4648 mit Base64 codierter String des SHA256-Hashs Ihres Verschlüsselungsschlüssels.

Wenn Sie in der JSON API eine rewrite durchführen, wird das Zielobjekt mit den oben aufgeführten Headern verschlüsselt. Zur Verschlüsselung des Quellobjekts werden die folgenden Header verwendet:

Headername Wert Beschreibung
x-goog-copy-source-encryption-algorithm String Der zu verwendende Verschlüsselungsalgorithmus. Erfordert den Wert AES256.
x-goog-copy-source-encryption-key String Ein gemäß RFC 4648 mit Base64 codierter String des AES-256-Verschlüsselungsschlüssels für das Quellobjekt.
x-goog-copy-source-encryption-key-sha256 String Ein gemäß RFC 4648 mit Base64 codierter String des SHA256-Hashs des Verschlüsselungsschlüssels für das Quellobjekt.

Antwort

JSON

Bei Verwendung der JSON API werden die Metadaten für einen vom Kunden bereitgestellten Verschlüsselungsschlüssel im Antworttext zurückgegeben. Dieser enthält die folgenden Properties:

Attributname Wert Beschreibung
customerEncryption Objekt Informationen über die für die Anfrage verwendete Verschlüsselung.
customerEncryption.encryptionAlgorithm String Der verwendete Verschlüsselungsalgorithmus. Enthält immer den Wert AES256.
customerEncryption.keySha256 String Ein gemäß RFC 4648 mit Base64 codierter String des SHA256-Hashs Ihres Verschlüsselungsschlüssels. Sie können mit diesem SHA256-Hash den für die Objektentschlüsselung erforderlichen AES-256-Verschlüsselungsschlüssel eindeutig identifizieren. Es ist wichtig, den Schlüssel sicher zu speichern.

XML

Bei Verwendung der XML API enthält die Antwort die folgenden Header:

Headername Wert Beschreibung
x-goog-encryption-algorithm String Der verwendete Verschlüsselungsalgorithmus. Enthält immer den Wert AES256.
x-goog-encryption-key-sha256 String Ein gemäß RFC 4648 mit Base64 codierter String des SHA256-Hashs Ihres Verschlüsselungsschlüssels. Sie können mit diesem SHA256-Hash den für die Objektentschlüsselung erforderlichen AES-256-Verschlüsselungsschlüssel eindeutig identifizieren. Es ist wichtig, den Schlüssel sicher zu speichern.

In folgenden Fällen wird ein HTTP 400-Fehler zurückgegeben:

  • Sie laden ein Objekt mithilfe eines vom Kunden bereitgestellten Verschlüsselungsschlüssels hoch und versuchen, ohne Angabe des Schlüssels einen weiteren Vorgang an dem Objekt auszuführen. Ausgenommen davon sind Anfragen und Aktualisierungen der meisten Metadaten sowie das Löschen des Objekts.
  • Sie laden ein Objekt mithilfe eines vom Kunden bereitgestellten Verschlüsselungsschlüssels hoch und versuchen, unter Angabe eines falschen Schlüssels einen weiteren Vorgang an dem Objekt auszuführen.
  • Sie laden ein Objekt ohne Angabe eines vom Kunden bereitgestellten Verschlüsselungsschlüssels hoch und versuchen, unter Angabe eines vom Kunden bereitgestellten Verschlüsselungsschlüssels einen weiteren Vorgang an dem Objekt auszuführen.
  • Sie geben einen ungültigen Verschlüsselungsalgorithmus, Schlüssel oder SHA256-Hash an.

Verschlüsselungsschlüssel mit gcloud storage

Die Google Cloud CLI unterstützt die Verwendung von vom Kunden bereitgestellten Verschlüsselungsschlüsseln. Beachten Sie bei der Verwendung der gcloud CLI mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln Folgendes:

  • Der als Verschlüsselungsschlüssel angegebene Schlüssel wird in Befehlen sowohl als Verschlüsselungsschlüssel als auch bei Bedarf als Entschlüsselungsschlüssel verwendet.

  • Sie können optional bis zu 100 Entschlüsselungsschlüssel angeben, die nur zum Entschlüsseln von Objekten verwendet werden.

  • Beim Entschlüsseln wird der SHA256-Hash aller bereitgestellten Verschlüsselungs- und Entschlüsselungsschlüssel berechnet. Der richtige Schlüssel für das jeweilige Objekt wird durch Abgleich des SHA256-Hashs in den Objektmetadaten ausgewählt.

  • Wenn Sie einen vom Kunden bereitgestellten Verschlüsselungsschlüssel für ein vorhandenes Objekt hinzufügen oder rotieren, wird das Objekt im Rahmen der Anfrage umgeschrieben. Dies gilt auch für den Befehl gcloud storage objects update.

  • Auflistungsbefehle, die den MD5- oder CRC32C-Hash für Objekte zurückgeben können, die mit einem vom Kunden bereitgestellten Schlüssel verschlüsselt sind, führen für jedes dieser Objekte eine zusätzliche GET-Metadatenanfrage aus. Diese zusätzliche Anfragen können die Auflistung wesentlich langsamer machen als die Auflistung von Objekten, die mit der standardmäßigen Cloud Storage-Verschlüsselung verschlüsselt sind.

  • In Situationen, in denen sich der Verschlüsselungsschlüssel während eines teilweise abgeschlossenen Schreib- oder Kopiervorgangs ändern kann oder tatsächlich ändert, z. B. wenn Sie einen cp-Upload nach dem erzwungenen Beenden oder beim Auftreten einer Netzwerkzeitüberschreitung noch einmal ausführen, wird der Vorgang neu gestartet, um sicherzustellen, dass das Zielobjekt mit dem neuen Schlüssel geschrieben wird.

Rotation von Verschlüsselungsschlüsseln

Wenn Sie ein Objekt mit einem vom Kunden bereitgestellten Verschlüsselungsschlüssel verschlüsseln, können Sie den Objektschlüssel rotieren, indem Sie das Objekt umschreiben. Das Umschreiben von Objekten wird nur in der JSON API, nicht in der XML API unterstützt. Beispiele für Schlüsselrotationen finden Sie unter Verschlüsselungsschlüssel rotieren.

Weitere Informationen