Vom Kunden verwaltete Verschlüsselungsschlüssel verwenden

Auf dieser Seite erfahren Sie, wie Sie einen Verschlüsselungsschlüssel von Cloud Key Management Service (Cloud KMS) mit Dataflow verwenden. Ein vom Kunden verwalteter Verschlüsselungsschlüssel (Customer-Managed Encryption Key, CMEK) ermöglicht die Verschlüsselung inaktiver Daten mit einem Schlüssel, den Sie über Cloud KMS verwalten können. Sie können eine Batch- oder Streamingpipeline erstellen, die durch einen CMEK geschützt ist, oder auf CMEK-geschützte Daten in Quellen und Senken zugreifen.

Sie können auch Cloud HSM verwenden, ein in der Cloud gehosteter HSM-Dienst (Hardwaresicherheitsmodul), mit dem Sie in einem Cluster von nach FIPS 140-2 Level 3 zertifizierten HSM Verschlüsselungsschlüssel hosten und kryptografische Vorgänge durchführen können. Weitere Informationen zum Erweitern der Kontingente für Cloud HSM finden Sie unter Kontingente für Cloud HSM.

Weitere Informationen finden Sie unter Verschlüsselungsoptionen in Google Cloud.

Hinweis

  1. Prüfen Sie, ob Sie das Apache Beam SDK für Java 2.13.0 oder höher oder das Apache Beam SDK für Python 2.13.0 oder höher haben.

    Weitere Informationen finden Sie unter Apache Beam SDK installieren.

  2. Überlegen Sie sich, ob Sie Dataflow und Cloud KMS im selben Google Cloud-Projekt oder in unterschiedlichen Projekten ausführen möchten. Auf dieser Seite wird die folgende Konvention verwendet:

    • PROJECT_ID ist die Projekt-ID des Projekts, in dem Dataflow ausgeführt wird.
    • PROJECT_NUMBER ist die Projektnummer des Projekts, in dem Dataflow ausgeführt wird.
    • KMS_PROJECT_ID ist die Projekt-ID des Projekts, in dem Cloud KMS ausgeführt wird.

    Weitere Informationen zu Google Cloud-Projekt-IDs und -Projektnummern finden Sie unter Projekte identifizieren.

  3. Im Google Cloud-Projekt, in dem Sie Cloud KMS ausführen möchten:

    1. Aktivieren Sie die Cloud KMS API.
    2. Erstellen Sie einen Schlüsselbund und einen Schlüssel, wie unter Symmetrische Schlüssel erstellen beschrieben. Sowohl Cloud KMS als auch Dataflow sind regionale Dienste. Die Region für Ihren CMEK und den regionalen Endpunkt für Ihren Dataflow-Job muss identisch sein.

Verschlüsseler/Entschlüsseler-Berechtigungen erteilen

  1. Weisen Sie dem Dataflow-Dienstkonto die Rolle Cloud KMS CryptoKey Encrypter/Decrypter zu. Damit ist Ihr Dataflow-Dienstkonto berechtigt, den von Ihnen angegebenen CMEK zum Ver- und Entschlüsseln zu verwenden. Wenn Sie die Google Cloud Console und die Seite Job aus Vorlage erstellen verwenden, wird diese Berechtigung automatisch erteilt und Sie können diesen Schritt überspringen.

    Verwenden Sie das gcloud-Befehlszeilentool, um die Rolle zuzuweisen:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@dataflow-service-producer-prod.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Ersetzen Sie KMS_PROJECT_ID durch die ID Ihres Google Cloud-Projekts, auf dem Cloud KMS ausgeführt wird, und ersetzen Sie PROJECT_NUMBER durch die Projektnummer (nicht die Projekt-ID) Ihres Google Cloud-Projekts, auf dem die Dataflow-Ressourcen ausgeführt werden.

  2. Weisen Sie dem Compute Engine-Dienstkonto die Rolle Cloud KMS CryptoKey Encrypter/Decrypter zu. Damit ist Ihr Compute Engine-Dienstkonto berechtigt, den von Ihnen angegebenen CMEK zum Ver- und Entschlüsseln zu verwenden.

    Verwenden Sie das gcloud-Befehlszeilentool, um die Rolle zuzuweisen:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Ersetzen Sie KMS_PROJECT_ID durch die ID Ihres Google Cloud-Projekts, auf dem Cloud KMS ausgeführt wird, und PROJECT_NUMBER durch die Projektnummer (nicht die Projekt-ID) Ihres Google Cloud-Projekts, auf dem die Compute Engine-Ressourcen ausgeführt werden.

Durch Cloud KMS geschützte Pipeline erstellen

Wenn Sie eine Batch- oder Streamingpipeline erstellen, können Sie einen Cloud KMS-Schlüssel auswählen, mit dem der Pipelinestatus verschlüsselt wird. Der Pipelinestatus ist die Datenmenge, die von Dataflow im temporären Speicher gespeichert wird.

Befehlszeile

Um eine neue Pipeline mit einem Pipelinestatus zu erstellen, der durch einen Cloud KMS-Schlüssel geschützt ist, fügen Sie den Pipelineparametern das entsprechende Flag hinzu. Das folgende Beispiel zeigt, wie eine Pipeline zum Zählen von Wörtern mit Cloud KMS ausgeführt wird.

Java

Dataflow unterstützt das Erstellen von Standard-Cloud Storage-Pfaden für temporäre Dateien bei Verwendung eines Cloud KMS-Schlüssels nicht. Sie müssen gcpTempLocation angeben.

mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  -Dexec.args="--inputFile=gs://dataflow-samples/shakespeare/kinglear.txt \
               --output=gs://STORAGE_BUCKET/counts \
               --runner=DataflowRunner --project=PROJECT_ID \
               --gcpTempLocation=gs://STORAGE_BUCKET/tmp \
               --dataflowKmsKey=KMS_KEY"
  -Pdataflow-runner

Python

Dataflow unterstützt das Erstellen von Standard-Cloud Storage-Pfaden für temporäre Dateien bei Verwendung eines Cloud KMS-Schlüssels nicht. Sie müssen temp_location angeben.

python -m apache_beam.examples.wordcount \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/counts \
  --runner DataflowRunner \
  --project PROJECT_ID \
  --temp_location gs://STORAGE_BUCKET/tmp/ \
  --dataflow_kms_key=KMS_KEY

Cloud Console

  1. Öffnen Sie die Dataflow-Monitoring-UI.
    Zur Dataflow-Web-UI
  2. Wählen Sie Job aus Vorlage erstellen aus.
  3. Wählen Sie im Abschnitt Encryption (Verschlüsselung) die Option Customer-managed key (Vom Kunden verwalteter Schlüssel) aus.
Verschlüsselungsoptionen auf der Seite „Job aus Vorlage erstellen” zum Verwenden eines von Google verwalteten oder vom Kunden verwalteten Schlüssels

Wenn Sie zum ersten Mal einen Job mit einem bestimmten Cloud KMS-Schlüssel ausführen, werden dem Compute Engine-Dienstkonto und/oder dem Dataflow-Dienstkonto möglicherweise nicht die Berechtigungen erteilt, diesen Schlüssel zum Verschlüsseln und Entschlüsseln zu verwenden. In diesem Fall werden Sie durch eine Warnmeldung aufgefordert, Ihrem Dienstkonto die Berechtigung zu erteilen.

Aufforderungen zum Gewähren von Berechtigungen für Compute Engine- und Cloud Dataflow-Dienstkonten zum Verschlüsseln und Entschlüsseln mithilfe eines bestimmten CMEK

Verschlüsselung von Pipelinestatus-Artefakten

Daten, die durch eine Dataflow-Pipeline aus vom Nutzer bereitgestellten Datenquellen gelesen werden, sind verschlüsselt. Dies gilt jedoch nicht für Datenschlüssel, die der Nutzer für schlüsselbasierte Transformationen bereitgestellt hat.

Datenschlüssel, die für schlüsselbasierte Vorgänge wie Windowing, Gruppierung und Zusammenführung verwendet werden, sind nicht durch eine CMEK-Verschlüsselung geschützt. Enthalten diese Schlüssel personenidentifizierbare Informationen (PII), müssen Sie die Schlüssel hashen oder anderweitig transformieren, bevor sie in die Dataflow-Pipeline gelangen. Die Werte der Schlüssel/Wert-Paare werden mit dem CMEK verschlüsselt.

Metadaten des Jobs werden nicht mit Cloud KMS-Schlüsseln verschlüsselt. Metadaten des Jobs umfassen folgende Daten:

  • Vom Nutzer bereitgestellte Daten wie Jobnamen, Jobparameterwerte und die Pipelinegrafik
  • Vom System bereitgestellte Daten wie Job-IDs und IP-Adressen der Worker

Verschlüsselung von Pipelinestatus-Speicherorten

Die folgenden Speicherorte werden durch Cloud KMS-Schlüssel geschützt:

  • Nichtflüchtige Speicher, die Dataflow-Workern zugeordnet sind und zum Speichern von Shuffle- und Streamingstatus verwendet werden.
  • Dataflow Shuffle-Zustand für Batch-Pipelines.
  • Cloud Storage-Buckets, die temporäre Export- oder Importdaten speichern. Dataflow unterstützt nur Standardschlüssel, die vom Nutzer auf Bucket-Ebene festgelegt wurden.
  • Cloud Storage-Buckets zum Speichern von Binärdateien, die Pipelinecode enthalten. Dataflow unterstützt nur Standardschlüssel, die vom Nutzer auf Bucket-Ebene festgelegt wurden.
  • Dataflow Streaming Engine-Status für Streamingpipelines.

Schlüssel deaktivieren oder löschen

Wenn Sie den Schlüssel aus irgendeinem Grund deaktivieren oder löschen müssen, können Sie dies mithilfe der Pantheon-UI tun. Durch Deaktivierungs- und Löschvorgänge werden die Jobs mit diesem Schlüssel abgebrochen. Dies ist ein dauerhafter Vorgang.

Wenn Sie die Streaming-Engine-Option verwenden, wird empfohlen, einen Snapshot des Jobs zu erstellen, bevor Sie den Schlüssel deaktivieren.

Cloud KMS-Schlüsselverwendung prüfen

Mithilfe der Cloud Console oder des gcloud-Befehlszeilentools können Sie prüfen, ob Ihre Pipeline einen Cloud KMS-Schlüssel verwendet.

Console

  1. Öffnen Sie die Dataflow-Monitoring-UI.
    Zur Dataflow-Web-UI
  2. Wählen Sie Ihren Dataflow-Job aus, um die Jobdetails aufzurufen.
  3. In der Seitenleiste Jobinfo können Sie den Schlüsseltyp im Feld Verschlüsselungstyp einsehen.
    Seitenleiste mit Jobinformationen, in der die Details eines Cloud Dataflow-Jobs aufgelistet werden.
          der vom Job verwendete Schlüsseltyp ist im Feld "Encryption type" (Verschlüsselungstyp) aufgeführt.

CLI

Führen Sie den Befehl describe des gcloud-Tools aus:

gcloud dataflow jobs describe JOB_ID

Suchen Sie die Zeile, die serviceKmsKeyName enthält. Diese Information zeigt an, dass ein Cloud KMS-Schlüssel zur Verschlüsselung eines Pipelinestatus von Dataflow verwendet wurde.

Sie können die Verwendung von Cloud KMS-Schlüsseln für die Verschlüsselung von Quellen und Senken prüfen. Verwenden Sie dazu die Cloud Console-Seiten und -Tools dieser Quellen und Senken, einschließlich Pub/Sub, Cloud Storage und BigQuery. Sie können auch die Verwendung von Cloud KMS-Schlüsseln kontrollieren. Rufen Sie dafür die Audit-Logs von Cloud KMS auf.

Audit-Logging für die Cloud KMS-Schlüsselverwendung

Dataflow ermöglicht es Cloud KMS, Cloud-Audit-Logs für das Logging von Schlüsselvorgängen wie Verschlüsselung und Entschlüsselung zu verwenden. Dataflow stellt einem Cloud KMS-Aufrufer die Job-ID als Kontext bereit. So lässt sich für Sie jeder Fall verfolgen, bei dem es zur Verwendung eines bestimmten Cloud KMS-Schlüssels für einen Dataflow-Job kommt.

Cloud-Audit-Logging legt für jedes Google Cloud-Projekt, jeden Ordner und jede Organisation drei Audit-Logs an: Sie haben mehrere Möglichkeiten, Ihre Cloud KMS-Audit-Logs aufzurufen.

Cloud KMS schreibt Audit-Logs zur Administratoraktivität für Ihre Dataflow-Jobs mit CMEK-Verschlüsselung. Diese Logs zeichnen Vorgänge auf, die zu Änderungen an der Konfiguration oder der Metadaten einer Ressource führen. Sie können Audit-Logs für Administratoraktivitäten nicht deaktivieren.

Bei expliziter Aktivierung schreibt Cloud KMS Audit-Logs zum Datenzugriff für Ihre Dataflow-Jobs mit CMEK-Verschlüsselung. Audit-Logs zum Datenzugriff enthalten API-Aufrufe, die die Konfiguration oder Metadaten von Ressourcen lesen, sowie nutzergesteuerte API-Aufrufe, die von Nutzern bereitgestellte Ressourcendaten erstellen, ändern oder lesen. Eine Anleitung zum Aktivieren einiger oder aller Audit-Logs zum Datenzugriff finden Sie unter Datenzugriffslogs konfigurieren.

Dataflow-Zugriff auf den Cloud KMS-Schlüssel entfernen

So entfernen Sie den Zugriff von Dataflow auf den Cloud KMS-Schlüssel:

  1. Widerrufen Sie die Rolle Cloud KMS CryptoKey Encrypter/Decrypter für das Dataflow-Dienstkonto mithilfe der Cloud Console oder des gcloud-Tools.
  2. Widerrufen Sie die Rolle Cloud KMS CryptoKey Encrypter/Decrypter für das Compute Engine-Dienstkonto mithilfe der Cloud Console oder des gcloud-Tools.
  3. Optional können Sie auch das Schlüsselversionsmaterial vernichten, um den Zugriff von Dataflow und anderen Diensten auf den Pipelinestatus zu verhindern.

Sie können zwar das Schlüsselversionsmaterial vernichten, aber die Schlüssel und Schlüsselbunde nicht löschen. Für Schlüssel und Schlüsselbunde gibt es keine abrechenbaren Kosten oder Kontingentlimits. Daher hat ihr Fortbestand keine Auswirkungen auf Kosten oder Produktionslimits.

Dataflow-Jobs prüfen regelmäßig, ob das Dataflow-Dienstkonto den angegebenen Cloud KMS-Schlüssel verwenden kann. Wenn eine Verschlüsselungs- oder Entschlüsselungsanfrage fehlschlägt, hält der Dataflow-Dienst die Datenaufnahme und -verarbeitung so bald wie möglich an und beginnt sofort mit der Bereinigung der mit dem Job verknüpften Google Cloud-Ressourcen.

Mit Cloud KMS-Schlüsseln geschützte GCP-Quellen und -Senken verwenden

Dataflow kann auf Quellen und Senken zugreifen, die durch Cloud KMS-Schlüssel geschützt sind, ohne dass Sie die Cloud KMS-Schlüssel dieser Quellen und Senken angeben müssen, solange Sie keine neuen Objekte erstellen. Wenn Ihre Dataflow-Pipeline neue Objekte in einer Senke erstellt, müssen Sie Pipelineparameter definieren, die die Cloud KMS-Schlüssel für diese Senke angeben, und diesen Cloud KMS-Schlüssel an die entsprechenden E/A-Connector-Methoden übergeben.

Für Quellen und Senken von Dataflow-Pipelines, die von Cloud KMS verwaltete CMEK nicht unterstützen, sind die Dataflow CMEK-Einstellungen irrelevant. Ein Beispiel dafür ist Confluent Kafka, das in Google Cloud oder Amazon Simple Storage Service (S3) gehostet wird.

Cloud KMS-Schlüsselberechtigungen

Achten Sie beim Zugriff auf Dienste, die durch Cloud KMS-Schlüssel geschützt sind, darauf, dass Sie diesem Dienst die Rolle Cloud KMS CryptoKey Encrypter/Decrypter zugewiesen haben. Die Konten haben die folgende Form:

  • Cloud Storage: service-{project_number}@gs-project-accounts.iam.gserviceaccount.com
  • BigQuery: bq-{project_number}@bigquery-encryption.iam.gserviceaccount.com
  • Pub/Sub: service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com

Cloud Storage

Wenn Sie die mit den Pipelineparametern TempLocation/temp_location und stagingLocation/staging_location angegebenen temporären Buckets und Staging-Buckets schützen möchten, finden Sie weitere Informationen dazu unter Mit CMEK geschützte Cloud Storage-Buckets einrichten.

BigQuery

Java

Verwenden Sie bei Rückgabewerten von BigQueryIO.readTableRows(), BigQueryIO.read(), BigQueryIO.writeTableRows() und BigQueryIO.write() die Methode with_kms_key().

Ein Beispiel dafür finden Sie im GitHub-Repository für Apache Beam.

Python

Verwenden Sie in BigQuerySource und BigQuerySink das Argument kms_key.

Ein Beispiel finden Sie im GitHub-Repository für Apache Beam.

Pub/Sub

Dataflow handhabt den Zugriff auf CMEK-geschützte Themen mithilfe der CMEK-Konfiguration für Themen.

Informationen zum Lesen und Schreiben in CMEK-geschützten Pub/Sub-Themen finden Sie unter Pub/Sub-Anleitung für die Verwendung von CMEK.

Preise

Sie können Cloud KMS-Verschlüsselungsschlüssel mit Dataflow in allen regionalen Dataflow-Endpunkten verwenden, in denen Cloud KMS verfügbar ist.

Durch diese Einbindung entstehen keine zusätzlichen Kosten über die Schlüsselvorgänge hinaus, die Ihrem Google Cloud-Projekt in Rechnung gestellt werden. Jedes Mal, wenn das Dataflow-Dienstkonto Ihren Cloud KMS-Schlüssel verwendet, wird der Vorgang zum Preis für Cloud KMS-Schlüsselvorgänge berechnet.

Weitere Informationen finden Sie unter Cloud KMS – Preise.

Fehlerbehebung

Workflowfehler, da Cloud KMS nicht validiert werden kann

Ein Fehler wie der folgende kann auftreten:

Workflow failed. Causes: Cloud KMS key <key-name> cannot be validated.

Um das Problem zu beheben, prüfen Sie, ob Sie den vollständigen Schlüsselpfad übergeben haben. Er sieht so aus: projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>. Suchen Sie im Schlüsselpfad nach Tippfehlern.

Workflowfehler, da die Cloud KMS-Schlüsselberechtigung verweigert wurde

Ein Fehler wie der folgende kann auftreten:

Workflow failed. Causes: Cloud KMS key Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource
'projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>' (or it may not exist). cannot be validated.

Prüfen Sie, ob die im Schlüsselpfad erwähnte Projekt-ID korrekt ist, um dieses Problem zu beheben. Prüfen Sie außerdem, ob Sie die Berechtigung zur Verwendung des Schlüssels haben.

Workflowfehler, da der Standort des Cloud KMS-Schlüssels nicht mit dem Dataflow-Jobstandort übereinstimmt

Ein Fehler wie der folgende kann auftreten:

Workflow failed. Causes: Cloud KMS key projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>
can't protect resources for this job. Please make sure the KMS key's region matches the dataflow region.

Wenn Sie einen regionalen Schlüssel verwenden, prüfen Sie, ob der KMS-Schlüssel in derselben Region ist wie der Dataflow-Job.