Vom Kunden bereitgestellte Verschlüsselungsschlüssel

Zu den Beispielen

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

Übersicht

Zusätzlich zu von Google verwalteten Verschlüsselungsschlüsseln können Sie Ihren eigenen AES-256-Schlü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 Google-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 Google-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

Cloud Storage nutzt standardmäßige serverseitige Schlüssel zum Verschlüsseln der verbleibenden Metadaten für das Objekt, einschließlich des Objektnamens. Auf diese Weise können Sie allgemeine Metadaten lesen und aktualisieren sowie Objekte auflisten und löschen, ohne auf den vom Kunden bereitgestellten Verschlüsselungsschlüssel angewiesen zu sein. Sie benötigen jedoch ausreichende Berechtigungen für diese Aktionen.

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.

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:

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

  • 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.

  • 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.

Verschlüsselungsschlüssel mit REST APIs

Wenn Sie einen vom Kunden bereitgestellten Verschlüsselungsschlüssel verwenden und direkt mit der JSON API oder der XML API 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. Google speichert den SHA256-Hash Ihres Schlüssels in den Metadaten des Objekts, wo Sie ihn später abrufen können. Ihre Daten lassen sich mit diesem SHA256-Hash weder von Google noch von Dritten entschlüsseln. Er dient lediglich zur eindeutigen Identifizierung des zum Verschlüsseln eines bestimmten Objekts verwendeten AES-256-Schlüssels.

Anfrage-Header

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

Name des Headers 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 Umschreibung durchführen, wird das Zielobjekt mit den oben aufgeführten Headern verschlüsselt. Zur Verschlüsselung des Quellobjekts werden die folgenden Header verwendet:

Name des Headers 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:

Property-Name 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:

Name des Headers 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 gsutil

Damit Sie einen vom Kunden bereitgestellten Verschlüsselungsschlüssel mit gsutil verwenden können, fügen Sie im Abschnitt [GSUtil] Ihrer Boto-Konfigurationsdatei die folgende Option hinzu:

Option Wert Beschreibung
encryption_key String Ein gemäß RFC 4648 mit Base64 codierter String Ihres AES-256-Verschlüsselungsschlüssels.

Sie können optional einen oder bis zu 100 Entschlüsselungsschlüssel angeben. Während gsutil die Option encryption_key als Verschlüsselungs- und Entschlüsselungsschlüssel verwendet, werden jegliche von Ihnen angegebenen decryption_key-Optionen nur zum Entschlüsseln von Objekten genutzt. In der Boto-Konfigurationsdatei müssen mehrere Entschlüsselungsschlüssel so aufgeführt werden:

decryption_key1 = ...
decryption_key2 = ...
decryption_key3 = ...

Wenn Ihre Boto-Konfiguration Verschlüsselungs- oder Entschlüsselungsschlüssel enthält, werden diese für alle gsutil-Befehle verwendet. Beim Entschlüsseln berechnet gsutil den SHA256-Hash der bereitgestellten Verschlüsselungs- und Entschlüsselungsschlüssel. Der richtige Schlüssel für das jeweilige Objekt wird durch Abgleich des SHA256-Hashs in den Objektmetadaten ausgewählt.

Für Objekte, die mit vom Kunden bereitgestellten Verschlüsselungsschlüsseln verschlüsselt wurden, ist während der folgenden Vorgänge der entsprechende Entschlüsselungsschlüssel erforderlich:

  • Downloads oder Kopien Verwenden Sie beispielsweise die Befehle gsutil cat, cp, mv oder rsync.

  • CRC32C- oder MD5-Hashes verschlüsselter Objekte ansehen Verwenden Sie beispielsweise die Befehle ls -L oder stat.

Wenn Sie ein Objekt überschreiben oder neu schreiben, das mit einem vom Kunden bereitgestellten oder vom Kunden verwalteten Verschlüsselungsschlüssel verschlüsselt ist, ohne das Feld encryption_key anzugeben, geschieht Folgendes:

  • Wenn Sie in Ihren Befehl einen geeigneten Entschlüsselungsschlüssel einfügen, verschlüsselt gsutil das Objekt mit dem Standardverschlüsselungsschlüssel des Buckets oder mit einer von Google verwalteter Verschlüsselung, wenn kein Standardverschlüsselungsschlüssel vorhanden ist.

  • Wenn Sie in einen Befehl einen entsprechenden Entschlüsselungsschlüssel einfügen, wird beim Umschreiben ein Fehler angezeigt.

In Situationen, in denen sich encryption_key während eines teilweise abgeschlossenen Schreib- oder Kopiervorgangs ändern kann, z. B. wenn Sie einen gsutil cp-Objektupload nach einem erzwungenen Beenden oder einem Auftreten eines Netzwerkzeitlimits noch einmal ausführen, startet gsutil den teilweise abgeschlossenen Vorgang neu, 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