Vom Kunden verwaltete Cloud KMS-Schlüssel
Standardmäßig verschlüsselt BigQuery inaktive Daten. Diese Standardverschlüsselung wird von BigQuery vorgenommen und verwaltet. Zusätzliche Maßnahmen Ihrerseits sind nicht erforderlich. Zuerst werden Daten in einer BigQuery-Tabelle mit einem Datenverschlüsselungsschlüssel verschlüsselt. Dann werden diese Datenverschlüsselungsschlüssel mit Schlüsselverschlüsselungsschlüsseln verschlüsselt, was als Umschlagverschlüsselung bezeichnet wird. Schlüsselverschlüsselungsschlüssel verschlüsseln nicht direkt Ihre Daten, sondern die Datenverschlüsselungsschlüssel, mit denen Google Ihre Daten verschlüsselt. Weitere Informationen finden Sie unter Cloud Key Management Service (KMS).
Wenn Sie die Verschlüsselung selbst steuern möchten, können Sie von Kunden verwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) für BigQuery verwenden. Statt es Google zu überlassen, können Sie so auch selbst über Cloud KMS die Schlüsselverschlüsselungsschlüssel, die Ihre Daten schützen, steuern und verwalten. Hier werden Details zum entsprechenden Verfahren beschrieben.
Weitere Informationen finden Sie unter Verschlüsselung inaktiver Daten. Weitere Informationen zu CMEK einschließlich der Vorteile und Einschränkungen finden Sie unter Vom Kunden verwaltete Verschlüsselungsschlüssel.
Hinweis
CMEK gilt nur für verwalteten BigQuery-Speicher, der Datasets, Tabellen und Abfragen enthält.
Überlegen Sie sich, ob Sie BigQuery und Cloud KMS im selben Google Cloud-Projekt oder in unterschiedlichen Projekten ausführen möchten. Für die Beispiele gelten diese Konventionen:
PROJECT_ID
ist die ID des Projekts, in dem BigQuery ausgeführt wirdPROJECT_NUMBER
ist die Projektnummer des Projekts, in dem BigQuery ausgeführt wirdKMS_PROJECT_ID
ist die ID des Projekts, in dem Cloud KMS ausgeführt wird (auch wenn dies dasselbe Projekt ist, in dem BigQuery ausgeführt wird)
BigQuery ist in neuen Projekten automatisch aktiviert. Wenn Sie ein bereits bestehendes Projekt verwenden, um BigQuery auszuführen, müssen Sie die BigQuery-API aktivieren.
Für das Cloud-Projekt, in dem Cloud KMS ausgeführt wird:
- Cloud Key Management Service API aktivieren
- Erstellen Sie einen Schlüsselbund und einen Schlüssel, wie unter Schlüsselbunde und Schlüssel erstellen beschrieben. Erstellen Sie den Schlüsselbund an einem Standort, der dem Standort Ihres BigQuery-Datasets entspricht:
-
Für jedes multiregionale Dataset sollte ein multiregionaler Schlüsselbund aus einem übereinstimmenden Standort verwendet werden. Beispiel: Ein Dataset in der Region
US
sollte mit einem Schlüsselbund aus der Regionus
und ein Dataset in der RegionEU
mit einem Schlüsselbund aus der Regioneurope
geschützt werden. -
Für regionale Datasets sollten übereinstimmende regionale Schlüssel verwendet werden. Beispiel: Ein Dataset in der Region
asia-northeast1
sollte mit einem Schlüsselbund aus der Regionasia-northeast1
geschützt werden. - Die Region
global
wird für die Verwendung mit BigQuery nicht unterstützt.
-
Für jedes multiregionale Dataset sollte ein multiregionaler Schlüsselbund aus einem übereinstimmenden Standort verwendet werden. Beispiel: Ein Dataset in der Region
Ein Entschlüsselungsaufruf wird mit Cloud KMS einmal pro Abfrage an eine CMEK-verschlüsselte Tabelle durchgeführt. Weitere Informationen finden Sie unter Cloud KMS – Preise.
Verschlüsselungsvorgabe
Zum Schutz Ihrer Daten in BigQuery verwendet Cloud KMS AES-256-Schlüssel. Diese Schlüssel dienen in BigQuery als Schlüsselverschlüsselungsschlüssel, mit denen die Datenverschlüsselungsschlüssel verschlüsselt werden, die wiederum Ihre Daten verschlüsseln.
Berechtigungen zum Verschlüsseln und Entschlüsseln erteilen
Gewähren Sie dem BigQuery-Dienstkonto die Berechtigung zum Verschlüsseln und Entschlüsseln mit diesem Schlüssel, um Ihre BigQuery-Daten mit einem CMEK-Schlüssel zu schützen. Die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler gewährt diese Berechtigung.
Prüfen Sie, ob Ihr Dienstkonto erstellt wurde, und ermitteln Sie dann mithilfe der Google Cloud Console die BigQuery-Dienstkonto-ID. Als Nächstes gewähren Sie dem Dienstkonto die entsprechende Rolle zum Verschlüsseln und Entschlüsseln mithilfe von Cloud KMS.
Erstellen eines Dienstkontos auslösen
Ihr BigQuery-Dienstkonto wird nicht automatisch erstellt, wenn Sie ein Projekt erstellen. Um das Erstellen Ihres Dienstkontos auszulösen, geben Sie einen Befehl ein, der das Konto verwendet, z. B. den Befehl bq show --encryption_service_account
, oder rufen Sie die API-Methode projects.getServiceAccount auf. Beispiel:
bq show --encryption_service_account --project_id=PROJECT_ID
Dienstkonto-ID ermitteln
Die BigQuery-Dienstkonto-ID hat die folgende Form:
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
Die folgenden Methoden zeigen, wie Sie die BigQuery-Dienstkonto-ID für Ihr Projekt ermitteln.
Console
Öffnen Sie in der Console die Seite Dashboard.
Klicken Sie oben auf der Seite auf die Drop-down-Liste Auswählen aus. Wählen Sie im angezeigten Fenster Auswählen aus Ihr Projekt aus.
Die Projekt-ID und die Projektnummer werden auf der Dashboardkarte Projektinformationen des Projekts angezeigt:
Ersetzen Sie im folgenden String PROJECT_NUMBER durch Ihre Projektnummer. Der neue String identifiziert Ihre BigQuery-Dienstkonto-ID.
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
bq
Verwenden Sie den Befehl bq show
mit dem Flag --encryption_service_account
, um die Dienstkonto-ID zu ermitteln:
bq show --encryption_service_account
Der Befehl zeigt die Dienstkonto-ID an:
ServiceAccountID ------------------------------------------------------------- bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
Verschlüsseler-/Entschlüsselerrolle zuweisen
Weisen Sie dem BigQuery-Systemdienstkonto, das Sie in die Zwischenablage kopiert haben, die Rolle Cloud KMS CryptoKey Encrypter/Decrypter zu. Dieses Konto hat das folgende Format:
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
Console
Öffnen Sie in der Console die Seite Kryptografische Schlüssel.
Klicken Sie auf den Namen des Schlüsselbunds, der den Schlüssel enthält.
Klicken Sie auf das Kästchen für den Verschlüsselungsschlüssel, dem Sie die Rolle hinzufügen möchten. Der Tab Berechtigungen wird geöffnet.
Klicken Sie auf Mitglied hinzufügen.
Geben Sie die E-Mail-Adresse des Dienstkontos,
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
, ein.- Wenn sich das Dienstkonto bereits in der Mitgliederliste befindet, enthält es Rollen. Klicken Sie auf die Drop-down-Liste der aktuellen Rollen des Dienstkontos
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
.
- Wenn sich das Dienstkonto bereits in der Mitgliederliste befindet, enthält es Rollen. Klicken Sie auf die Drop-down-Liste der aktuellen Rollen des Dienstkontos
Klicken Sie auf die Drop-down-Liste für Rolle auswählen, dann auf Cloud KMS und anschließend auf die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler.
Klicken Sie zum Anwenden dieser Rolle auf das Dienstkonto
bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com
auf Speichern.
gcloud
Sie können die Google Cloud CLI verwenden, um die Rolle zuzuweisen:
gcloud kms keys add-iam-policy-binding \ --project=KMS_PROJECT_ID \ --member serviceAccount:bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING \ KMS_KEY
Dabei gilt:
KMS_PROJECT_ID
ist die ID Ihres Google Cloud-Projekts, in dem Cloud KMS ausgeführt wird.PROJECT_NUMBER
ist die Projektnummer (nicht die Projekt-ID) des Cloud-Projekts, in dem BigQuery ausgeführt wird.KMS_KEY_LOCATION
ist der Standortname Ihres Cloud KMS-Schlüssels.KMS_KEY_RING
ist der Schlüsselbundname Ihres Cloud KMS-Schlüssels.KMS_KEY
ist der Schlüsselname Ihres Cloud KMS-Schlüssels.
Schlüsselressourcen-ID
Wenn vom Kunden verwaltete Verschlüsselungsschlüssel verwendet werden, ist die Ressourcen-ID für den Cloud KMS-Schlüssel erforderlich, wie in den Beispielen veranschaulicht. Bei diesem Schlüssel ist die Groß-/Kleinschreibung zu beachten. Er hat das folgende Format:
projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY
Schlüsselressourcen-ID abrufen
Öffnen Sie in der Console die Seite Kryptografische Schlüssel.
Klicken Sie auf den Namen des Schlüsselbunds, der den Schlüssel enthält.
Klicken Sie für den Schlüssel, dessen Ressourcen-ID Sie abrufen, auf Mehr more_vert.
Klicken Sie auf Ressourcen-ID kopieren. Die Ressourcen-ID für den Schlüssel wird in die Zwischenablage kopiert.
Durch Cloud KMS geschützte Tabelle erstellen
So erstellen Sie eine Tabelle, die durch Cloud KMS geschützt ist:
Console
Öffnen Sie in der Console die Seite „BigQuery“.
Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.
Maximieren Sie die Option
Aktionen und klicken Sie auf Öffnen.Klicken Sie im Detailfeld auf Tabelle erstellen.
Geben Sie auf der Seite Tabelle erstellen die erforderlichen Informationen ein, um eine leere Tabelle mit einer Schemadefinition zu erstellen. Bevor Sie auf Tabelle erstellen klicken, müssen Sie den Verschlüsselungstyp festlegen und den Cloud KMS-Schlüssel zur Verwendung mit der Tabelle angeben:
- Klicken Sie auf Erweiterte Optionen.
- Klicken Sie auf Vom Kunden verwalteter Schlüssel.
- Wählen Sie den Schlüssel aus. Wenn der Schlüssel, den Sie verwenden möchten, nicht aufgeführt ist, geben Sie die Ressourcen-ID für den Schlüssel ein.
Klicken Sie auf Tabelle erstellen.
SQL
Verwenden Sie die Anweisung CREATE TABLE
mit der Option kms_key_name
:
Rufen Sie in der Console die BigQuery-Seite auf.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
CREATE TABLE DATASET_ID.TABLE_ID ( name STRING, value INT64 ) OPTIONS ( kms_key_name = 'projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY');
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfragen ausführen.
bq
Sie können das bq
-Befehlszeilentool mit dem Flag --destination_kms_key
verwenden, um die Tabelle zu erstellen. Das Flag --destination_kms_key
gibt die Ressourcen-ID des Schlüssels an, der mit der Tabelle verwendet werden soll.
So erstellen Sie eine leere Tabelle mit einem Schema:
bq mk --schema name:string,value:integer -t \ --destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ DATASET_ID.TABLE_ID
So erstellen Sie eine Tabelle aus einer Abfrage:
bq query --destination_table=DATASET_ID.TABLE_ID \ --destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ "SELECT name,count FROM DATASET_ID.TABLE_ID WHERE gender = 'M' ORDER BY count DESC LIMIT 6"
Weitere Informationen zum bq
-Befehlszeilentool finden Sie unter bq
-Befehlszeilentool verwenden.
Go
Java
Python
Schützen Sie eine neue Tabelle mit einem vom Kunden verwalteten Verschlüsselungsschlüssel. Legen Sie dazu das Attribut Table.encryption_configuration auf ein EncryptionConfiguration-Objekt fest, bevor Sie die Tabelle erstellen.
Durch Cloud KMS-Schlüssel geschützte Tabelle abfragen
Für die Abfrage einer durch Cloud KMS geschützten Tabelle sind keine besonderen Vorkehrungen erforderlich. BigQuery speichert den Namen des Schlüssels, mit dem der Tabelleninhalt verschlüsselt wurde, und verwendet diesen Schlüssel bei der Abfrage einer durch Cloud KMS geschützten Tabelle.
Alle vorhandenen Tools, die BigQuery-Konsole und das bq
-Befehlszeilentool werden genauso wie mit standardmäßig verschlüsselten Tabellen ausgeführt, sofern BigQuery Zugriff auf den Cloud KMS-Schlüssel hat, mit dem der Tabelleninhalt verschlüsselt wurde.
Abfrageergebnisse mit Cloud KMS-Schlüssel schützen
Console
Öffnen Sie in der Console die Seite „BigQuery“.
Klicken Sie auf Neue Abfrage erstellen.
Geben Sie im Abfragetextbereich eine gültige BigQuery-SQL-Abfrage ein.
Klicken Sie auf Mehr, dann auf Abfrageeinstellungen und dann auf Erweiterte Optionen.
Wählen Sie Vom Kunden verwaltete Verschlüsselung aus.
Wählen Sie den Schlüssel aus. Wenn der Schlüssel, den Sie verwenden möchten, nicht aufgeführt ist, geben Sie die Ressourcen-ID für den Schlüssel ein.
Klicken Sie auf Speichern.
Klicken Sie auf Ausführen.
bq
Geben Sie das Flag --destination_kms_key
an, um die Zieltabelle oder bei Verwendung einer temporären Tabelle die Abfrageergebnisse mit Ihrem Cloud KMS-Schlüssel zu schützen.
Das Flag --destination_kms_key
gibt die Ressourcen-ID des Schlüssels an, der mit der Ziel- oder Ergebnistabelle verwendet werden soll.
Sie können optional mit dem Flag --destination_table
die Zieltabelle für die Abfrageergebnisse angeben. Ohne Angabe von --destination_table
werden die Abfrageergebnisse in eine temporäre Tabelle geschrieben.
So fragen Sie eine Tabelle ab:
bq query \ --destination_table=DATASET_ID.TABLE_ID \ --destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ "SELECT name,count FROM DATASET_ID.TABLE_ID WHERE gender = 'M' ORDER BY count DESC LIMIT 6"
Weitere Informationen zum bq
-Befehlszeilentool finden Sie unter bq
-Befehlszeilentool verwenden.
Go
Java
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Java API.
Python
Durch Cloud KMS geschützte Tabelle laden
So laden Sie eine Datendatei in eine Tabelle, die durch Cloud KMS geschützt ist:
Console
Schützen Sie eine Zieltabelle für Ladejobs mit einem vom Kunden verwalteten Verschlüsselungsschlüssel. Geben Sie dazu den Schlüssel beim Laden der Tabelle an.
Öffnen Sie in der Console die Seite „BigQuery“.
Maximieren Sie im Bereich Explorer Ihr Projekt und wählen Sie ein Dataset aus.
Klicken Sie im Detailfeld auf Tabelle erstellen.
Geben Sie die gewünschten Optionen an, die zum Laden der Tabelle zu verwenden sind. Klicken Sie aber vor dem Klicken auf Tabelle erstellen noch auf Erweiterte Optionen.
Wählen Sie unter Verschlüsselung die Option Vom Kunden verwalteter Schlüssel aus.
Klicken Sie auf die Drop-down-Liste Wählen Sie einen vom Kunden verwalteten Schlüssel aus und wählen Sie den zu verwendenden Schlüssel aus. Wenn Sie keine verfügbaren Schlüssel sehen, geben Sie eine Schlüsselressourcen-ID ein.
Klicken Sie auf Tabelle erstellen.
bq
Schützen Sie eine Zieltabelle für Ladejobs mit einem vom Kunden verwalteten Verschlüsselungsschlüssel. Legen Sie dazu das Flag --destination_kms_key
fest.
bq --location=LOCATION load \ --autodetect \ --source_format=FORMAT \ --destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ DATASET.TABLE \ path_to_sourceBeispiel:
bq load \ --autodetect \ --source_format=NEWLINE_DELIMITED_JSON \ --destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ test2.table4 \ gs://cloud-samples-data/bigquery/us-states/us-states.json
Go
Java
Python
Schützen Sie eine Zieltabelle für Ladejobs mit einem vom Kunden verwalteten Verschlüsselungsschlüssel. Legen Sie dazu das Attribut LoadJobConfig.destination_encryption_configuration auf ein EncryptionConfiguration-Objekt fest und laden Sie die Tabelle.
In eine von Cloud KMS geschützte Tabelle streamen
Sie können Daten in Ihre von CMEK geschützte BigQuery-Tabelle streamen, ohne zusätzliche Parameter anzugeben. Diese Daten werden mit Ihrem Cloud KMS-Schlüssel sowohl im Zwischenspeicher als auch am endgültigen Speicherort verschlüsselt. Überprüfen Sie vor dem Streamen in eine CMEK-Tabelle die Anforderungen an die Verfügbarkeit und Zugänglichkeit von Schlüsseln.
Weitere Informationen zum Streamen finden Sie unter Daten in BigQuery streamen.
Tabelle mit Standardverschlüsselung in Tabelle mit Cloud KMS-Schutz umwandeln
bq
Sie können den Befehl bq cp
mit dem Flag --destination_kms_key
verwenden, um eine durch Standardverschlüsselung geschützte Tabelle in eine neue Tabelle oder in die durch Cloud KMS geschützte Originaltabelle zu kopieren. Das Flag --destination_kms_key
gibt die Ressourcen-ID des Schlüssels an, der mit der Zieltabelle verwendet werden soll.
So kopieren Sie eine Tabelle mit Standardverschlüsselung in eine neue Tabelle mit Cloud KMS-Schutz:
bq cp \ --destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ SOURCE_DATASET_ID.SOURCE_TABLE_ID DESTINATION_DATASET_ID.DESTINATION_TABLE_ID
Wenn Sie eine Tabelle mit Standardverschlüsselung in dieselbe Tabelle mit Cloud KMS-Schutz kopieren möchten:
bq cp -f \ --destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ DATASET_ID.TABLE_ID DATASET_ID.TABLE_ID
Wenn Sie eine Tabelle mit Cloud KMS-Schutz auf Standardverschlüsselung ändern möchten, kopieren Sie die Datei in sich selbst, indem Sie bq cp
ohne das Flag --destination_kms_key
ausführen.
Weitere Informationen zum bq
-Befehlszeilentool finden Sie unter bq
-Befehlszeilentool verwenden.
Go
Java
Python
Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.
Schützen Sie das Ziel einer Tabellenkopie mit einem vom Kunden verwalteten Verschlüsselungsschlüssel. Legen Sie dazu das Attribut QueryJobConfig.destination_encryption_configuration auf ein EncryptionConfiguration-Objekt fest und kopieren Sie die Tabelle.
Ermitteln, ob eine Tabelle durch Cloud KMS geschützt ist
Klicken Sie in der Console auf den blauen Pfeil links neben dem Dataset, um die Ansicht zu maximieren, oder doppelklicken Sie auf den Dataset-Namen. Hierdurch werden die Tabellen und Ansichten im Dataset angezeigt.
Klicken Sie auf den Namen der Tabelle.
Klicken Sie auf Details. Auf der Seite Tabellendetails werden die Beschreibung und die Informationen der Tabelle angezeigt.
Wenn die Tabelle durch Cloud KMS geschützt ist, wird im Feld Vom Kunden verwalteter Verschlüsselungsschlüssel die Schlüsselressourcen-ID angezeigt.
Cloud KMS-Schlüssel für eine BigQuery-Tabelle ändern
Sie können eine ALTER TABLE
-Abfrage ausführen, die API oder das bq
-Befehlszeilentool verwenden, um den Cloud KMS-Schlüssel einer vorhandenen durch einen CMEK geschützten Tabelle zu ändern.
Es gibt zwei Möglichkeiten, den Cloud KMS-Schlüssel mithilfe der API und des bq
-Befehlszeilentools zu ändern: update
oder cp
.
Wenn Sie update
verwenden, können Sie den für eine CMEK-geschützte Tabelle genutzten Cloud KMS-Schlüssel ändern.
Mit cp
haben Sie die Möglichkeit, den für eine CMEK-geschützte Tabelle genutzten Cloud KMS-Schlüssel zu ändern. Sie können auch eine Tabelle von der Standardverschlüsselung in den CMEK-Schutz oder eine Tabelle vom CMEK-Schutz in die Standardverschlüsselung umwandeln.
Ein Vorteil von update
ist, dass es schneller als cp
verarbeitet wird und die Verwendung von Tabellen-Decorators ermöglicht.
SQL
Mit der Anweisung ALTER TABLE SET OPTIONS
können Sie das Feld kms_key_name
für eine Tabelle aktualisieren:
Rufen Sie in der Console die BigQuery-Seite auf.
Geben Sie im Abfrageeditor die folgende Anweisung ein:
ALTER TABLE DATASET_ID.mytable SET OPTIONS ( kms_key_name = 'projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY');
Klicken Sie auf
Ausführen.
Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfragen ausführen.
bq
Sie können den Schlüssel für eine Cloud KMS-geschützte Tabelle mit dem Befehl bq cp
und dem Flag --destination_kms_key
ändern. Das Flag --destination_kms_key
gibt die Ressourcen-ID des Schlüssels an, der mit der Tabelle verwendet werden soll.
bq update \ --destination_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ -t DATASET_ID.TABLE_ID
Go
Java
Python
Ändern Sie den vom Kunden verwalteten Verschlüsselungsschlüssel für eine Tabelle. Legen Sie dazu das Attribut Table.encryption_configuration auf ein neues EncryptionConfiguration-Objekt fest und aktualisieren Sie die Tabelle.
Standardschlüssel für Dataset festlegen
Sie können einen Dataset-weiten Cloud KMS-Standardschlüssel festlegen, der für alle neu erstellten Tabellen im Dataset gilt, sofern beim Erstellen der Tabelle kein anderer Cloud KMS-Schlüssel angegeben wird. Der Standardschlüssel gilt nicht für vorhandene Tabellen. Das Ändern des Standardschlüssels wirkt sich nicht auf vorhandene Tabellen aus und betrifft nur neue Tabellen, die nach der Änderung erstellt werden.
Sie können den Standardschlüssel für ein Dataset mit den folgenden Methoden anwenden, ändern oder entfernen:
Standardschlüssel beim Aufrufen der Methode
datasets.insert
oderdatasets.patch
im FeldEncryptionConfiguration.kmsKeyName
angebenStandardschlüssel beim Ausführen des Befehls
bq mk --dataset
im Flag--default_kms_key
angebenbq mk \ --default_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ --dataset DATASET_ID
bq update \ --default_kms_key projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY \ --dataset DATASET_ID
Zugriff von BigQuery auf den Cloud KMS-Schlüssel sperren
Sie können den Zugriff von BigQuery auf den Cloud KMS-Schlüssel jederzeit sperren. Dazu widerrufen Sie die IAM-Berechtigung für diesen Schlüssel.
Wenn BigQuery keinen Zugriff mehr auf den Cloud KMS-Schlüssel erhält, kann die Benutzerfreundlichkeit erheblich leiden und Datenverluste können auftreten:
Auf Daten in diesen durch einen CMEK geschützten Tabellen kann nicht mehr zugegriffen werden. Die Befehle
query
,cp
,extract
undtabledata.list
schlagen fehl.Diesen CMEK-geschützten Tabellen können keine neuen Daten hinzugefügt werden.
Nachdem der Zugriff wieder gewährt wird, können für diese Tabellen ausgeführte Abfragen mehrere Tage lang beeinträchtigt werden.
Auswirkung der Cloud KMS-Schlüsselrotation
In BigQuery wird ein Tabellenverschlüsselungsschlüssel nicht automatisch rotiert, wenn der mit der Tabelle verknüpfte Cloud KMS-Schlüssel rotiert wird. Alle Daten in den vorhandenen Tabellen sind weiterhin durch die Schlüsselversion geschützt, mit der sie erstellt wurden.
Alle neu erstellten Tabellen verwenden die Primärschlüsselversion zum Zeitpunkt der Erstellung.
Wenn Sie eine Tabelle mit der neuesten Schlüsselversion aktualisieren möchten, ändern Sie die Tabelle in einen anderen Cloud KMS-Schlüssel und wechseln Sie dann zum ursprünglichen zurück.
Auswirkungen auf die Cloud KMS-Abrechnung
Wenn Sie eine CMEK-geschützte Tabelle erstellen oder kürzen, generiert BigQuery einen Zwischenschlüsselverschlüsselungsschlüssel, der dann mit dem angegebenen Cloud KMS-Schlüssel verschlüsselt wird.
Zu Abrechnungszwecken bedeutet dies, dass weder Ihre Cloud KMS-Aufrufe noch die zugehörigen Kosten mit der Tabellengröße skaliert werden. Bei CMEK-geschützten Tabellen können Sie einen Aufruf von Cloud KMS cryptoKeys.encrypt
für jede Tabellenerstellung oder -kürzung und einen Aufruf von Cloud KMS cryptoKeys.decrypt
für jede an einer Abfrage beteiligte Tabelle erwarten. Beide Methoden gehören zur Kategorie Schlüsselvorgänge: Kryptografisch, die unter Cloud KMS-Preise aufgeführt sind.
Liest oder schreibt in eine vorhandene CMEK-geschützte Tabelle Cloud KMS cryptoKeys.decrypt
, da der Zwischenschlüssel entschlüsselt werden muss.
Beschränkungen
BigQuery-Zugriff auf den Cloud KMS-Schlüssel
Ein Cloud KMS-Schlüssel gilt in BigQuery unter folgenden Voraussetzungen als verfügbar und zugänglich:
- Wenn der Schlüssel aktiviert ist
- Wenn das BigQuery-Dienstkonto Berechtigungen zum Verschlüsseln und Entschlüsseln des Schlüssels hat
In den folgenden Abschnitten werden Auswirkungen auf das Streaming von Insert-Anweisungen und langfristig nicht zugänglichen Daten beschrieben, wenn ein Schlüssel nicht zugänglich ist.
Auswirkungen auf Streaming-Insert-Anweisungen
Der Cloud KMS-Schlüssel muss innerhalb von 48 Stunden nach einer Streaming-Insert-Anweisung für mindestens 24 aufeinanderfolgende Stunden verfügbar und zugänglich sein. Ist das nicht der Fall, werden die gestreamten Daten unter Umständen nicht vollständig beibehalten und können verloren gehen. Weitere Informationen zu Streaming-Insert-Anweisungen finden Sie unter Daten in BigQuery streamen.
Auswirkungen auf langfristig nicht zugängliche Daten
Da BigQuery verwalteten Speicher bereitstellt, sind langfristig nicht zugängliche Daten mit der BigQuery-Architektur nicht kompatibel. Wenn der Cloud KMS-Schlüssel einer bestimmten BigQuery-Tabelle nicht zur Verfügung steht und 60 Tage lang nicht zugänglich ist, löscht BigQuery die Tabelle und die zugehörigen Daten unter Umständen. BigQuery sendet mindestens sieben Tage vor dem Löschen der Daten eine E-Mail an die mit dem Rechnungskonto verknüpfte E-Mail-Adresse.
Externe Datenquellen verwenden
CMEK kann nicht auf externe Datenquellen wie externe Tabellen oder föderierte Abfragen angewendet werden.
Zwischen CMEK-geschützten und Standardverschlüsselung wechseln
Sie können eine Tabelle nicht zwischen Standardverschlüsselungen und CMEK-Verschlüsselung wechseln. Um die Verschlüsselung zu wechseln, kopieren Sie die Tabelle mit den Informationen zur Zielverschlüsselung oder verwenden Sie eine SELECT *
-Abfrage, um die Tabelle selbst mit WRITE_TRUNCATE
-Anordnung auszuwählen.
Tabellen-Decorators verwenden
Wenn Sie eine Tabelle mit Cloud KMS schützen und die Daten in der Tabelle durch den Wert WRITE_TRUNCATE
für einen load
-, cp
- oder query
-Vorgang ersetzen, dann gilt: Bereichs-Decorators funktionieren nicht über die Grenze für die Verschlüsselungsänderung. Sie können weiterhin Tabellen-Decorators (einschließlich Bereichs-Decorators) verwenden, um die Daten vor oder nach der Grenze abzufragen oder den Snapshot zu einem bestimmten Zeitpunkt abzufragen.
Platzhaltertabellenabfragen
CMEK-geschützte Tabellen können nicht mit einem Platzhaltersuffix abgefragt werden.
FAQ
Wer benötigt eine Berechtigung für den Cloud KMS-Schlüssel?
Bei vom Kunden verwalteten Verschlüsselungsschlüsseln (CMEK – Customer-Managed Encryption Keys) müssen Berechtigungen nicht wiederholt festgelegt werden. Solange das BigQuery-Dienstkonto berechtigt ist, den Cloud KMS-Schlüssel zum Verschlüsseln und Entschlüsseln zu verwenden, können alle Personen mit Berechtigung für die BigQuery-Tabelle auf die Daten zugreifen. Das gilt auch, wenn sie keinen direkten Zugriff auf den Cloud KMS-Schlüssel haben.
Welches Dienstkonto wird verwendet?
Das BigQuery-Dienstkonto, das dem Cloud-Projekt der Tabelle zugeordnet ist, wird zum Entschlüsseln der Daten dieser Tabelle verwendet. Die BigQuery-Dienstkonten sind für jedes Projekt eindeutig. Bei einem Job, der Daten in eine Cloud KMS-geschützte, anonyme Tabelle schreibt, wird das Dienstkonto des Projekts verwendet.
Sehen Sie sich als Beispiel drei CMEK-geschützte Tabellen an: table1
, table2
und table3
. So fragen Sie Daten von {project1.table1, project2.table2}
mit der Zieltabelle {project3.table3}
ab:
project1
-Dienstkonto fürproject1.table1
verwendenproject2
-Dienstkonto fürproject2.table2
verwendenproject3
-Dienstkonto fürproject3.table3
verwenden
Wie kann BigQuery meinen Cloud KMS-Schlüssel verwenden?
BigQuery verwendet den Cloud KMS-Schlüssel zum Entschlüsseln von Daten als Antwort auf eine Nutzerabfrage, z. B. tabledata.list
oder jobs.insert
.
BigQuery kann den Schlüssel auch für die Datenpflege und die Speicheroptimierung verwenden, z. B. um Daten in ein für Lesevorgänge optimiertes Format umzuwandeln.
Welche Kryptografiebibliotheken werden verwendet?
BigQuery setzt für CMEK-Funktionen auf Cloud KMS. Cloud KMS verwendet zur Verschlüsselung Tink.
Wo finde ich weitere Hilfe?
Wenn Sie Fragen haben, die hier nicht beantwortet werden, wenden Sie sich an den BigQuery-Support oder den Cloud KMS-Support.
Fehlerbehebung
Im Folgenden werden häufige Fehler und empfohlene Maßnahmen beschrieben.
Fehler | Empfehlung |
---|---|
Gewähren Sie Cloud KMS CryptoKey die Verschlüsseler-/Entschlüsselerrolle. | Das mit Ihrem Projekt verknüpfte BigQuery-Dienstkonto hat keine ausreichenden IAM-Berechtigungen für den angegebenen Cloud KMS-Schlüssel. Folgen Sie der Anleitung, die in der Fehlermeldung oder in dieser Dokumentation beschrieben ist, um die entsprechende Cloud IAM-Berechtigung zu erteilen. |
Vorhandene Tabellenverschlüsselungseinstellungen stimmen nicht mit den in der Anforderung angegebenen Verschlüsselungseinstellungen überein. | Dies kann auftreten, wenn die Verschlüsselungseinstellungen für die Zieltabelle von den Verschlüsselungseinstellungen in Ihrer Abfrage abweichen. Ersetzen Sie zur Behebung des Problems die Tabelle mit der Schreibanordnung TRUNCATE oder geben Sie eine andere Zieltabelle an. |
Diese Region wird nicht unterstützt. | Die Region des Cloud KMS-Schlüssels stimmt nicht mit der Region des BigQuery-Datasets der Zieltabelle überein. Sie beheben das Problem, indem Sie einen Schlüssel aus einer Region wählen, der mit Ihrem Dataset übereinstimmt, oder in ein Dataset laden, das mit der Schlüsselregion übereinstimmt. |