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

Wenn Sie die Verschlüsselung selbst steuern möchten, können Sie Kundenverwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) für BigQuery verwenden. Statt den Besitz und die Verwaltung 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. In diesem Dokument finden Sie Details zum manuellen Erstellen von Cloud KMS-Schlüsseln für BigQuery.

Weitere Informationen zu Verschlüsselungsoptionen Google Cloud Weitere Informationen zu CMEK einschließlich der Vorteile und Einschränkungen finden Sie unter Kundenverwaltete Verschlüsselungsschlüssel.

Hinweis

  • Alle Datenassets, die sich im verwalteten BigQuery-Speicher befinden, unterstützen CMEK. Wenn Sie jedoch auch Daten abfragen, die in einer externen Datenquelle wie Cloud Storage mit CMEK-verschlüsselten Daten gespeichert sind, wird die Datenverschlüsselung durch Cloud Storage verwaltet. BigLake-Tabellen unterstützen beispielsweise mit CMEK verschlüsselte Daten in Cloud Storage.

    BigQuery- und BigLake-Tabellen unterstützen keine CSEKs (Customer-Supplied Encryption Keys, vom Kunden bereitgestellte Verschlüsselungsschlüssel).

  • Überlegen Sie sich, ob Sie BigQuery und Cloud KMS im selben Google Cloud -Projekt oder in verschiedenen Projekten ausführen möchten. Zu Beispielzwecken wird in diesem Dokument die folgende Konvention verwendet:

    • PROJECT_ID: die Projekt-ID des Projekts, in dem BigQuery ausgeführt wird
    • PROJECT_NUMBER: die Projektnummer des Projekts, in dem BigQuery ausgeführt wird
    • KMS_PROJECT_ID: die Projekt-ID des Projekts, in dem Cloud KMS ausgeführt wird (auch wenn es sich um dasselbe Projekt handelt, in dem BigQuery ausgeführt wird).
    Informationen zu Google Cloud Projekt-IDs und Projektnummern finden Sie unter Projektnamen, -nummer und -ID ermitteln.

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

  • Aktivieren Sie die Cloud Key Management Service API für das Google Cloud -Projekt, in dem Cloud KMS ausgeführt wird.

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.

Manuelle oder automatische Schlüsselerstellung

Sie können Ihre CMEK-Schlüssel entweder manuell erstellen oder Cloud KMS Autokey (Vorschau) verwenden. Autokey vereinfacht das Erstellen und Verwalten von CMEK-Schlüsseln durch die Automatisierung der Bereitstellung und Zuweisung. Mit Autokey müssen Sie keine Schlüsselbunde, Schlüssel und Dienstkonten im Voraus bereitstellen. Stattdessen werden sie bei der Erstellung von BigQuery-Ressourcen auf Anfrage generiert. Weitere Informationen finden Sie in der Übersicht über Autokey.

Schlüsselbund und Schlüssel manuell erstellen

Erstellen Sie für das Google Cloud -Projekt, in dem Cloud KMS ausgeführt wird, einen Schlüsselbund und einen Schlüssel, wie in 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 an einem übereinstimmenden Speicherort verwendet werden. Beispiel: Ein Dataset in der Region US sollte mit einem Schlüsselbund aus der Region us und ein Dataset in der Region EU mit einem Schlüsselbund aus der Region europe 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 Region asia-northeast1 geschützt werden.

  • Sie können die Region global nicht verwenden, wenn Sie CMEK für BigQuery in der Google Cloud Console konfigurieren. Sie können jedoch die Region global verwenden, wenn Sie CMEK für BigQuery mit dem bq-Befehlszeilentool oder GoogleSQL konfigurieren.

Weitere Informationen zu den unterstützten Standorten für BigQuery und Cloud KMS finden Sie unter Cloud-Standorte.

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 derGoogle Cloud -Konsole 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

  1. Öffnen Sie in der Google Cloud Console die Seite Dashboard.

    Zur Seite "Dashboard"

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

  3. Die Projekt-ID und die Projektnummer werden auf der Dashboardkarte Projektinformationen des Projekts angezeigt:

    Grafik: Projekt-Infokarte

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

  1. Öffnen Sie in der Google Cloud Console die Seite Kryptografische Schlüssel.

    Zur Seite "Kryptografische Schlüssel"

  2. Klicken Sie auf den Namen des Schlüsselbunds, der den Schlüssel enthält.

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

  4. Klicken Sie auf Mitglied hinzufügen.

  5. 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.
  6. 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.

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

Ersetzen Sie Folgendes:

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

Die Ressourcen-ID für den Cloud KMS-Schlüssel ist für die CMEK-Nutzung erforderlich, wie in den Beispielen gezeigt. Bei diesem Wert muss die Groß-/Kleinschreibung beachtet werden und er muss die folgende Form haben:

projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY

Schlüsselressourcen-ID abrufen

  1. Öffnen Sie in der Google Cloud Console die Seite Kryptografische Schlüssel.

    Zur Seite "Kryptografische Schlüssel"

  2. Klicken Sie auf den Namen des Schlüsselbunds, der den Schlüssel enthält.

  3. Klicken Sie für den Schlüssel, dessen Ressourcen-ID Sie abrufen, auf Mehr .

  4. Klicken Sie auf Ressourcennamen kopieren. Die Ressourcen-ID für den Schlüssel wird in die Zwischenablage kopiert. Die Ressourcen-ID wird auch als Ressourcenname bezeichnet.

Durch Cloud KMS geschützte Tabelle erstellen

So erstellen Sie eine Tabelle, die durch Cloud KMS geschützt ist:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite BigQuery.

    BigQuery aufrufen

  2. Klicken Sie im linken Bereich auf  Explorer:

    Hervorgehobener Button für den Explorer-Bereich.

    Wenn das linke Steuerfeld nicht angezeigt wird, klicken Sie auf  Linkes Steuerfeld maximieren, um es zu öffnen.

  3. Maximieren Sie im Bereich Explorer Ihr Projekt, klicken Sie auf Datasets und dann auf ein Dataset. Das Dataset wird auf einem Tab geöffnet.

  4. Klicken Sie im Detailbereich auf Tabelle erstellen.

  5. 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:

    1. Klicken Sie auf Erweiterte Optionen.
    2. Klicken Sie auf Vom Kunden verwalteter Schlüssel.
    3. 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.
  6. Klicken Sie auf Tabelle erstellen.

SQL

Verwenden Sie die Anweisung CREATE TABLE mit der Option kms_key_name:

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

    BigQuery aufrufen

  2. 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');

  3. Klicken Sie auf Ausführen.

Informationen zum Ausführen von Abfragen finden Sie unter Interaktive Abfrage ausführen.

bq

Sie können das 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.

Terraform

Verwenden Sie die Ressource google_bigquery_table:

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

Im folgenden Beispiel wird eine Tabelle mit dem Namen mytable erstellt. Außerdem werden die Ressourcen google_kms_crypto_key und google_kms_key_ring verwendet, um einen Cloud Key Management Service-Schlüssel für die Tabelle anzugeben.

Um dieses Beispiel auszuführen, müssen Sie die Cloud Resource Manager API und die Cloud Key Management Service API aktivieren.

resource "google_bigquery_dataset" "default" {
  dataset_id                      = "mydataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days

  labels = {
    billing_group = "accounting",
    pii           = "sensitive"
  }
}

resource "google_bigquery_table" "default" {
  dataset_id = google_bigquery_dataset.default.dataset_id
  table_id   = "mytable"

  schema = <<EOF
[
  {
    "name": "ID",
    "type": "INT64",
    "mode": "NULLABLE",
    "description": "Item ID"
  },
  {
    "name": "Item",
    "type": "STRING",
    "mode": "NULLABLE"
  }
]
EOF

  encryption_configuration {
    kms_key_name = google_kms_crypto_key.crypto_key.id
  }

  depends_on = [google_project_iam_member.service_account_access]
}

resource "google_kms_crypto_key" "crypto_key" {
  name     = "example-key"
  key_ring = google_kms_key_ring.key_ring.id
}

resource "random_id" "default" {
  byte_length = 8
}

resource "google_kms_key_ring" "key_ring" {
  name     = "${random_id.default.hex}-example-keyring"
  location = "us"
}

# Enable the BigQuery service account to encrypt/decrypt Cloud KMS keys
data "google_project" "project" {
}

resource "google_project_iam_member" "service_account_access" {
  project = data.google_project.project.project_id
  role    = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
  member  = "serviceAccount:bq-${data.google_project.project.number}@bigquery-encryption.iam.gserviceaccount.com"
}

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud -Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Standardprojekt Google Cloud fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

Verzeichnis vorbereiten

Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

  1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

    Kopieren Sie den Beispielcode in das neu erstellte main.tf.

    Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade

Änderungen anwenden

  1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

  3. Öffnen Sie Ihr Google Cloud Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

Go

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

import (
	"context"
	"fmt"