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 EKM oder Cloud HSM Schlüssel verwenden. Wenn Sie CMEK in Dataflow verwenden, können Ihre Projekte Kontingente für kryptografische Cloud KMS-Anfragen verbrauchen. Dataflow-Pipelines können diese Kontingente beispielsweise nutzen, wenn Ihre Pipeline auf CMEK-geschützte Daten in Quellen und Senken zugreift oder wenn der Zustand einer CMEK-verschlüsselten Pipeline abgerufen wird. Weitere Informationen finden Sie im Abschnitt Verschlüsselung von Speicherorten für den Pipelinezustand auf dieser Seite. Ver- und Entschlüsselungsvorgänge über CMEK-Schlüssel wirken sich nur dann auf Cloud KMS-Kontingente aus, wenn Sie Hardware- (Cloud HSM) oder externe Schlüssel (Cloud EKM) verwenden. Weitere Informationen finden Sie unter Cloud KMS-Kontingente.
Mit Cloud External Key Manager (Cloud EKM) können Sie Schlüssel verwenden, die Sie über einen unterstützten Partner für die externe Schlüsselverwaltung verwalten, um Daten in Google Cloud zu schützen. Sie können inaktive Daten in unterstützten CMEK-Integrationsdiensten oder durch direkten Aufruf der Dataflow API schützen.
Weitere Informationen finden Sie unter Verschlüsselungsoptionen in Google Cloud.
Unterstützung und Einschränkungen
Cloud KMS wird in den folgenden Apache Beam SDK-Versionen unterstützt:
- Java SDK-Versionen 2.13.0 und höher
- Python SDK-Versionen 2.13.0 und höher
- Go SDK-Versionen 2.40.0 und höher
Unterstützung von Cloud KMS mit Dataflow regionale Schlüssel. Wenn Sie die Worker-Region oder -Zone der Pipeline überschreiben, um eine andere Region als diejenige zu verwenden, die mit Ihren Schlüsseln verknüpft ist, funktionieren regionale Schlüssel nicht.
Die Region für Ihren CMEK und die Region für Ihren Dataflow-Job muss identisch sein.
Multiregionale und globale Standorte werden nicht unterstützt. Sie können keine globalen und multiregionalen Schlüssel mit Dataflow-Pipelines verwenden.
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 Sie für schlüsselbasierte Transformationen in Streaming-Jobs angeben.
Bei Batchjobs sind alle Daten, einschließlich Datenschlüsseln, die Sie für schlüsselbasierte Transformationen angeben, immer durch CMEK-Verschlüsselung geschützt.
Bei Streamingjobs, die nach dem 7. März 2024 erstellt wurden, werden alle Nutzerdaten mit CMEK verschlüsselt.
Bei Streamingjobs, die vor dem 7. März 2024 erstellt wurden, sind Datenschlüssel, die für schlüsselbasierte Vorgänge wie Windowing, Gruppierung und Joining verwendet werden, nicht durch eine CMEK-Verschlüsselung geschützt. Um diese Verschlüsselung für Ihre Jobs zu aktivieren, beenden Sie den Job per Drain oder brechen Sie den Job ab und starten Sie ihn dann neu.
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.
- Cloud Storage-Buckets, in denen Stichproben von Pipelinedaten gespeichert werden, wenn Datenprobenahme aktiviert ist.
- Dataflow Streaming Engine-Status für Streamingpipelines.
Externe Schlüssel
Sie können Cloud External Key Manager (Cloud EKM) verwenden, um Daten in Google Cloud mit von Ihnen verwalteten externen Schlüsseln zu verschlüsseln.
Wenn Sie einen Cloud EKM-Schlüssel verwenden, hat Google keine Kontrolle über die Verfügbarkeit Ihres extern verwalteten Schlüssels. Wenn der Schlüssel während des Job- oder Pipeline-Erstellungszeitraums nicht mehr verfügbar ist, wird der Job oder die Pipeline abgebrochen.
Weitere Überlegungen zur Verwendung externer Schlüssel finden Sie unter Cloud External Key Manager.
Vorbereitung
Kontrollieren Sie, dass Sie das Apache Beam SDK für Java 2.13.0 oder höher, das Apache Beam SDK für Python 2.13.0 oder höher oder das Apache Beam SDK für Go 2.40.0 oder höher haben.
Weitere Informationen finden Sie unter Apache Beam SDK installieren.
Ü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.
Im Google Cloud-Projekt, in dem Sie Cloud KMS ausführen möchten:
- Aktivieren Sie die Cloud KMS API.
- 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 die Region Ihres Dataflow-Jobs muss identisch sein. Verwenden Sie keine globalen oder multiregionalen Schlüssel mit Ihren Dataflow-Pipelines. Verwenden Sie stattdessen regionale Schlüssel.
Berechtigungen zum Verschlüsseln und Entschlüsseln gewähren
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 die Google Cloud CLI, 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 SiePROJECT_NUMBER
durch die Projektnummer (nicht die Projekt-ID) Ihres Google Cloud-Projekts, auf dem die Dataflow-Ressourcen ausgeführt werden.Weisen Sie die Rolle
Cloud KMS CryptoKey Encrypter/Decrypter
dem Compute Engine-Dienstkonto zu. Damit ist Ihr Compute Engine-Dienstkonto berechtigt, den von Ihnen angegebenen CMEK zum Ver- und Entschlüsseln zu verwenden.Verwenden Sie die Google Cloud CLI, 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, undPROJECT_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
Bei Verwendung eines Cloud KMS-Schlüssels unterstützt Dataflow nicht das Erstellen von Cloud Storage-Standardpfaden für temporäre Dateien. Die Angabe von gcpTempLocation
ist erforderlich.
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
Bei Verwendung eines Cloud KMS-Schlüssels unterstützt Dataflow nicht das Erstellen von Cloud Storage-Standardpfaden für temporäre Dateien. Die Angabe von gcpTempLocation
ist erforderlich.
python -m apache_beam.examples.wordcount \ --input gs://dataflow-samples/shakespeare/kinglear.txt \ --output gs://STORAGE_BUCKET/counts \ --runner DataflowRunner \ --region HOST_GCP_REGION \ --project PROJECT_ID \ --temp_location gs://STORAGE_BUCKET/tmp/ \ --dataflow_kms_key=KMS_KEY
Go
Bei Verwendung eines Cloud KMS-Schlüssels unterstützt Dataflow nicht das Erstellen von Cloud Storage-Standardpfaden für temporäre Dateien. Die Angabe von gcpTempLocation
ist erforderlich.
wordcount --project HOST_PROJECT_ID \ --region HOST_GCP_REGION \ --runner dataflow \ --staging_location gs://STORAGE_BUCKET/staging \ --temp_location gs://STORAGE_BUCKET/temp \ --input gs://dataflow-samples/shakespeare/kinglear.txt \ --output gs://STORAGE_BUCKET/output \ --dataflow_kms_key=KMS_KEY
Google Cloud Console
- Öffnen Sie die Dataflow-Monitoring-Oberfläche.
Rufen Sie die Dataflow-Weboberfläche auf. - Wählen Sie Job aus Vorlage erstellen aus.
- Wählen Sie im Abschnitt Encryption (Verschlüsselung) die Option Customer-managed key (Vom Kunden verwalteter Schlüssel) aus.
Wenn Sie zum ersten Mal einen Job mit einem bestimmten Cloud KMS-Schlüssel ausführen, werden dem Compute Engine-Dienstkonto 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.
Verwendung von Cloud KMS-Schlüssel prüfen
Mithilfe der Google Cloud Console oder der Google Cloud CLI können Sie prüfen, ob die Pipeline einen Cloud KMS-Schlüssel verwendet.
Console
- Öffnen Sie die Dataflow-Monitoring-Oberfläche.
Rufen Sie die Dataflow-Weboberfläche auf. - Wählen Sie Ihren Dataflow-Job aus, um Jobdetails aufzurufen.
- In der Seitenleiste Jobinfo können Sie den Schlüsseltyp im Feld Verschlüsselungstyp einsehen.
- Für Verschlüsselungstyp: „Von Google verwalteter Schlüssel“
- Für Verschlüsselungstyp: „Vom Kunden verwalteter Schlüssel“
CLI
Führen Sie den Befehl describe
über die gcloud CLI 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 Google 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.
Schlüssel deaktivieren oder löschen
Wenn Sie den Schlüssel aus irgendeinem Grund deaktivieren oder löschen müssen, können Sie die Google Cloud Console verwenden. Durch Deaktivierungs- und Löschvorgänge werden die Jobs mit diesem Schlüssel abgebrochen. Dieser Vorgang ist permanent.
Wenn Sie Cloud EKM verwenden, deaktivieren oder löschen Sie den Schlüssel in Ihrem externen Schlüsselverwaltungssystem.
Wenn Sie die Streaming Engine-Option verwenden, sollten Sie einen Snapshot des Jobs erstellen, bevor Sie den Schlüssel deaktivieren.
Dataflow-Zugriff auf den Cloud KMS-Schlüssel entfernen
So entfernen Sie den Dataflow-Zugriff auf den Cloud KMS-Schlüssel:
- Widerrufen Sie die Rolle
Cloud KMS CryptoKey Encrypter/Decrypter
für das Dataflow-Dienstkonto mithilfe der Google Cloud Console oder der gcloud CLI. - Widerrufen Sie die Rolle
Cloud KMS CryptoKey Encrypter/Decrypter
für das Compute Engine-Dienstkonto mithilfe der Google Cloud Console oder der gcloud CLI. - 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. Dataflow beginnt sofort mit der Bereinigung der mit dem Job verknüpften Google Cloud-Ressourcen.
Quellen und Senken verwenden, die durch Cloud KMS-Schlüssel geschützt sind
Dataflow kann auf Google Cloud-Quellen und -Senken zugreifen, die durch Cloud KMS-Schlüssel geschützt sind. Wenn Sie keine neuen Objekte erstellen, müssen Sie den Cloud KMS-Schlüssel dieser Quellen und Senken nicht angeben. Wenn Ihre Dataflow-Pipeline neue Objekte in einer Senke erstellt, müssen Sie Pipelineparameter definieren. Diese Parameter geben die Cloud KMS-Schlüssel für diese Senke an und übergeben diesen Cloud KMS-Schlüssel an die entsprechenden E/A-Connector-Methoden.
Für Quellen und Senken von Dataflow-Pipelines, die von Cloud KMS verwaltete CMEK nicht unterstützen, sind die Dataflow CMEK-Einstellungen irrelevant.
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 dafür finden Sie im GitHub-Repository für Apache Beam.
Go
BigQuery-IOs unterstützen die Verwendung des KMS-Schlüssels in Go nicht.
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.
Audit-Logging für die Verwendung von Cloud KMS-Schlüsseln
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. Mit dieser ID können Sie jeden Fall verfolgen, bei dem ein bestimmter Cloud KMS-Schlüssel für einen Dataflow-Job verwendet wird.
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. Diese Logs enthalten auch 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.
Preise
Sie können Cloud KMS-Verschlüsselungsschlüssel mit Dataflow in allen Dataflow-Regionen verwenden, in dem 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
Mithilfe der Vorschläge in diesem Abschnitt können Sie Fehler beheben.
Cloud KMS kann nicht validiert werden
Der Workflow kann mit dem folgenden Fehler fehlschlagen:
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.
Cloud KMS-Schlüsselberechtigung verweigert
Der Workflow kann mit dem folgenden Fehler fehlschlagen:
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.
Der Standort des Cloud KMS-Schlüssels stimmt nicht mit dem Standort des Dataflow-Jobs überein
Der Workflow kann mit dem folgenden Fehler fehlschlagen:
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. Make sure the region of the KMS key matches the Dataflow region.
Wenn Sie einen regionalen Schlüssel verwenden, prüfen Sie, ob sich der Cloud KMS-Schlüssel in derselben Region wie der Dataflow-Job befindet.