Dataflow – Sicherheit und Berechtigungen

Dataflow-Pipelines können entweder lokal (um Tests bei kleinen Datasets auszuführen) oder auf verwalteten Google Cloud-Ressourcen ausgeführt werden, die den verwalteten Dataflow-Dienst verwenden. Ob lokal oder in der Cloud, Ihre Pipeline und deren Worker verwenden ein Berechtigungssystem, um sicheren Zugriff auf Pipelinedateien und -ressourcen zu erhalten. Dataflow-Berechtigungen werden entsprechend der Rolle zugewiesen, die für den Zugriff auf Pipelineressourcen verwendet wird. Die unten stehenden Abschnitte erklären die Rollen und Berechtigungen im Zusammenhang mit lokalen und Cloud-Pipelines sowie die Standardeinstellungen und wie Sie die Berechtigungen Ihres Projektes überprüfen können.

Hinweis

Weitere Informationen zur Projektkennzeichnung bei Google Cloud erhalten Sie in der Plattformübersicht. Die Kennzeichnung umfasst den Projektnamen, die Projekt-ID und die Projektnummer.

Sicherheit und Berechtigungen für lokale Pipelines

Google Cloud-Konto

Bei einer lokalen Ausführung wird Ihre Apache Beam-Pipeline als Google Cloud-Konto ausgeführt, das Sie mit der ausführbaren Datei des gcloud-Befehlszeilentools konfiguriert haben. Führen Sie deshalb Apache Beam SDK-Vorgänge lokal aus. Ihr Google Cloud-Konto muss Zugriff auf die gleichen Dateien und Ressourcen haben.

Zum Auflisten des als Standard ausgewählten Google Cloud-Kontos führen Sie den Befehl gcloud config list aus.

Sicherheit und Berechtigungen für Pipelines in Google Cloud

Wenn Sie die Pipeline ausführen, verwendet Dataflow zwei Dienstkonten zum Verwalten von Sicherheit und Berechtigungen: das Dataflow-Dienstkonto und das Controller-Dienstkonto. Der Dataflow-Dienst verwendet das Dataflow-Dienstkonto als Teil der Auftragserstellungsanforderung, z. B. zum Prüfen des Projektkontingents und zum Erstellen von Worker-Instanzen in Ihrem Job, und während der Jobausführung zum Verwalten des Auftrags. Worker-Instanzen verwenden das Controller-Dienstkonto, um nach dem Senden des Jobs auf Eingabe- und Ausgaberessourcen zuzugreifen.

Dataflow-Dienstkonto

Als Teil der Pipelineausführung von Dataflow verändert der Dataflow-Dienst Ressourcen für Sie (zum Beispiel Erstellen weiterer VMs). Für die Ausführung der Pipeline im Dataflow-Dienst wird ein Dienstkonto verwendet (service-<project-number>@dataflow-service-producer-prod.iam.gserviceaccount.com). Dieses Konto wird automatisch erstellt, wenn ein Dataflow-Projekt erstellt wird. Dem Konto wird die Rolle "Dataflow-Dienst-Agent" für das Projekt zugewiesen. Es umfasst die erforderlichen Berechtigungen zum Ausführen eines Dataflow-Jobs im Projekt, einschließlich der Berechtigungen zum Starten von Compute Engine-Workern. Das Konto wird ausschließlich vom Dataflow-Dienst und speziell für Ihr Projekt verwendet.

Sie können die Berechtigungen der Dataflow-Dienstkonten mit dem gcloud-Befehlszeilentool überprüfen. Geben Sie dazu folgenden Befehl im Shell- oder Terminalfenster ein:

gcloud iam roles describe roles/dataflow.serviceAgent

Da Google Cloud-Dienste Lese-/Schreibzugriff auf das Projekt und seine Ressourcen voraussetzen, sollten Sie die Standardberechtigungen, die automatisch für Ihr Projekt festgelegt wurden, nicht ändern. Wenn Sie die Berechtigungen für das Dienstkonto aus den IAM-Richtlinien (Identity and Access Management) entfernen, sind die Konten weiterhin vorhanden, da sie zum Dataflow-Dienst gehören. Wenn für ein Dataflow-Dienstkonto die Berechtigungen für ein Projekt entfernt werden, kann Dataflow keine VMs starten und keine anderen Verwaltungsaufgaben ausführen.

Controller-Dienstkonto

Compute Engine-Instanzen setzen die Ausführung der Apache Beam SDK-Vorgänge in der Cloud um. Diese Worker verwenden das Controller-Dienstkonto Ihres Projekts, um Zugriff auf die Dateien und andere Ressourcen Ihrer Pipeline zu erhalten. Das Controller-Dienstkonto wird von Dataflow auch für "Metadatenvorgänge" verwendet. Dies sind die Vorgänge, die nicht auf Ihrem lokalen Client oder in Compute Engine-Workern ausgeführt werden. Durch diese Vorgänge werden Aufgaben wie das Bestimmen von Eingabegrößen und der Zugriff auf Cloud Storage-Dateien ausgeführt.

Damit das Controller-Dienstkonto einen Job erstellen, ausführen und prüfen kann, muss er die Rollen roles/dataflow.admin und roles/dataflow.worker haben. Darüber hinaus ist die Berechtigung iam.serviceAccounts.actAs für Ihr Nutzerkonto erforderlich, um die Identität des Dienstkontos zu übernehmen.

Standard-Controller-Dienstkonto

Worker verwenden standardmäßig das Compute Engine-Standarddienstkonto Ihres Projekts als Controller-Dienstkonto. Dieses Dienstkonto (<project-number>-compute@developer.gserviceaccount.com) wird automatisch erstellt, wenn Sie die Compute Engine API für Ihr Projekt auf der API-Seite der Google Cloud Console aktivieren.

Das Compute Engine-Standarddienstkonto bietet einen umfassenden Zugriff auf die Ressourcen Ihres Projekts, was den Einstieg in Dataflow erleichtert. Für Produktionsarbeitslasten empfehlen wir jedoch, dass Sie ein neues Dienstkonto erstellen, das nur die benötigten Rollen und Berechtigungen enthält.

Vom Nutzer verwaltetes Controller-Dienstkonto angeben

Wenn Sie Ressourcen mit einer detaillierten Zugriffssteuerung erstellen und verwenden möchten, können Sie ein nutzerverwaltetes Dienstkonto erstellen und es als Controller-Dienstkonto verwenden.

Wenn Sie kein nutzerverwaltetes Dienstkonto haben, müssen Sie ein Dienstkonto erstellen und die erforderlichen IAM-Rollen dafür festlegen. Das Konto muss mindestens die Rolle "Dataflow-Worker" haben. Außerdem werden möglicherweise zusätzliche Rollen benötigt, damit für Ihren Job erforderliche Google Cloud-Ressourcen wie BigQuery, Pub/Sub oder Schreibvorgänge in Cloud Storage verwendet werden können. Wenn Ihr Job beispielsweise Daten aus BigQuery liest, muss Ihr Dienstkonto mindestens die Rolle bigquery.dataViewer haben.

Das vom Nutzer verwaltete Dienstkonto kann sich in demselben Projekt wie Ihr Job oder in einem anderen Projekt befinden. Wenn sich das Dienstkonto und der Job in verschiedenen Projekten befinden, müssen Sie das Dienstkonto konfigurieren, bevor Sie den Job ausführen. Sie müssen die Rolle "Dienstkonto-Token-Ersteller" auch den folgenden von Google verwalteten Dienstkonten im nutzerverwalteten Dienstkonto zuweisen:

  • Standardmäßiges Compute Engine-Dienstkonto (<project-number>-compute@developer.gserviceaccount.com)
  • Dataflow-Dienst-Agent (service-<project-number>@dataflow-service-producer-prod.iam.gserviceaccount.com)

Java

Verwenden Sie die Option --serviceAccount und geben Sie Ihr Dienstkonto an, wenn Sie Ihren Pipeline-Job ausführen: --serviceAccount=my-service-account-name@<project-id>.iam.gserviceaccount.com

Python

Verwenden Sie die Option --service_account_email und geben Sie Ihr Dienstkonto an, wenn Sie Ihren Pipeline-Job ausführen: --service_account_email=my-service-account-name@<project-id>.iam.gserviceaccount.com

Eine Liste der Dienstkonten Ihres Projekts erhalten Sie auf der Seite „Berechtigungen“ in der Cloud Console.

Auf Google Cloud-Ressourcen in mehreren Google Cloud-Projekten zugreifen

Ihre Apache Beam-Pipelines können auf Google Cloud-Ressourcen in anderen Google Cloud-Projekten zugreifen. Zu diesen Ressourcen gehören:

Java

  • Cloud Storage-Buckets
  • BigQuery-Datasets
  • Pub/Sub-Themen und -Abos
  • Firestore-Datasets

Python

  • Cloud Storage-Buckets
  • BigQuery-Datasets
  • Pub/Sub-Themen und -Abos
  • Firestore-Datasets

Damit die Apache Beam-Pipeline projektübergreifend auf diese Ressourcen zugreifen kann, müssen Sie die entsprechenden Zugriffssteuerungsmechanismen der Ressourcen verwenden, um explizit Zugriff auf das Controller-Dienstkonto Ihres Dataflow-Projekts zu gewähren.

Auf Cloud Storage-Buckets in Google Cloud-Projekten zugreifen

Um Ihrem Dataflow-Projekt Zugriff auf einen Cloud Storage-Bucket zu gewähren, der zu einem anderen Google Cloud-Projekt gehört, muss der Bucket für das Controller-Dienstkonto Ihres Dataflow-Projekts zugänglich sein. Sie können mit den Cloud Storage-Zugriffssteuerungen den erforderlichen Zugriff gewähren.

Auf der IAM- & Admin-Seite in der Cloud Console erhalten Sie eine Liste der Dienstkonten Ihrer Dataflow-Projekte. Wenn Ihnen die Kontonamen bekannt sind, können Sie die gsutil-Befehle ausführen, um den Dienstkonten des Projekts Eigentumsrechte (Lese-/Schreibberechtigungen) sowohl am Bucket als auch dessen Inhalten zu gewähren.

Um den Dienstkonten Ihres Dataflow-Projekts Zugriff auf einen Cloud Storage-Bucket in einem anderen Projekt zu gewähren, führen Sie den folgenden Befehl in Ihrem Shell- oder Terminal-Fenster aus: gsutil acl ch -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Um den Dienstkonten Ihres Dataflow-Projekts Zugriff auf vorhandene Inhalte eines Cloud Storage-Buckets in einem anderen Projekt zu gewähren, führen Sie den folgenden Befehl in Ihrem Shell- oder Terminal-Fenster aus: gsutil -m acl ch -r -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Der vorherige Befehl gewährt nur Zugriff auf vorhandene Ressourcen. Wenn Sie den Dienstkonten des Dataflow-Projekts Standardberechtigungen für den Bucket erteilen, besteht mit diesen auch Zugriff auf Ressourcen, die dem Bucket später hinzugefügt werden: gsutil defacl ch -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Auf BigQuery-Datasets in anderen Google Cloud-Projekten zugreifen

Mit der BigQueryIO API können Sie auf BigQuery-Datasets zugreifen, die zu einem anderen Google Cloud-Projekt gehören, also nicht zu dem Projekt, für das Sie Dataflow verwenden. Damit BigQuery-Quelle und -Senke ordnungsgemäß funktionieren, müssen die folgenden drei Konten Zugriff auf alle BigQuery-Datasets haben, aus denen Ihr Dataflow-Job liest oder auf die er schreibt:

  • Das Google Cloud-Konto, das Sie zum Ausführen des Dataflow-Jobs verwenden
  • Das Controller-Dienstkonto, auf dem der Dataflow-Job ausgeführt wird

Möglicherweise müssen Sie BigQuery konfigurieren, um den Zugriff auf diese Konten explizit zu gewähren. Unter BigQuery-Zugriffssteuerung finden Sie weitere Informationen zum Gewähren des Zugriffs auf BigQuery-Datasets über die BigQuery-Seite oder mit der BigQuery-API.

Wenn Ihr Google Cloud-Konto beispielsweise abcde@gmail.com heißt und die Projektnummer des Projekts, in dem der Dataflow-Job ausgeführt wird, 123456789 lautet, muss allen folgenden Konten der Zugriff auf die verwendeten BigQuery-Datasets gewährt werden: abcde@gmail.com und 123456789-compute@developer.gserviceaccount.com.

Auf Pub/Sub-Themen und -Abos in anderen Google Cloud-Projekten zugreifen

Sie müssen mit den Features der Identitäts- und Zugriffsverwaltung (IAM) von Pub/Sub projektübergreifende Berechtigungen einrichten, wenn Sie auf Pub/Sub-Themen oder -Abos zugreifen möchten, die zu anderen Google Cloud-Projekten gehören. Dataflow verwendet zum Ausführen Ihrer Jobs das Controller-Dienstkonto. Gewähren Sie diesem Dienstkonto Zugriff auf die Pub/Sub-Ressourcen im anderen Projekt.

Es sind Berechtigungen der folgenden Pub/Sub-Rollen erforderlich:

  • roles/pubsub.subscriber
  • roles/pubsub.viewer

Weitere Informationen und einige Codebeispiele, die zeigen, wie die Features der Pub/Sub-Identitäts- und Zugriffsverwaltung verwendet werden, finden Sie unter Beispielanwendungsfall: Projektübergreifende Kommunikation.

Auf Firestore in Google Cloud-Projekten zugreifen

Um auf eine Firestore-Datenbank im nativen Modus oder im Datastore-Modus zuzugreifen, die zu einem anderen Google Cloud-Projekt gehört, fügen Sie das Compute Engine-Dienstkonto (<project-number>-compute@developer.gserviceaccount.com) Ihres Dataflow-Projekts als Bearbeiter des Projekts hinzu, zu dem Firestore gehört. Aktivieren Sie außerdem die Firestore API in beiden Projekten unter https://console.cloud.google.com/project/<project-id>/apiui/apiview/firestore/overview.

Datenzugriff und Sicherheit

Der Dataflow-Dienst verwendet verschiedene Sicherheitsmechanismen, um Ihre Daten sicher und vertraulich aufzubewahren. Diese Mechanismen gelten für folgende Szenarien:

  • Wenn Sie eine Pipeline an den Dienst senden
  • Wenn der Dienst Ihre Pipeline auswertet
  • Wenn Sie Zugriff auf Telemetrie und Messwerte während und nach Ausführung der Pipeline anfordern

Pipelineübermittlung

Ihre Google Cloud-Projektberechtigungen steuern den Zugriff auf den Dataflow-Dienst. Alle Mitglieder Ihres Projekts, denen Bearbeitungs- oder Eigentümerrechte erteilt wurden, können Pipelines an den Dienst senden. Sie müssen sich mit dem gcloud-Befehlszeilentool authentifizieren, um Pipelines zu senden. Nach der Authentifizierung werden Ihre Pipelines über das HTTPS-Protokoll gesendet. Anleitungen zur Authentifizierung mit den Anmeldedaten für Ihr Google Cloud-Konto finden Sie in der Kurzanleitung für Ihre Sprache.

Pipelineauswertung

Temporäre Daten

Als Teil der Auswertung einer Pipeline werden möglicherweise temporäre Daten generiert und lokal in den Workern oder in Cloud Storage gespeichert. Temporäre Daten werden im inaktiven Zustand verschlüsselt und bleiben nach Abschluss der Pipelineauswertung nicht länger erhalten.

Java

Compute Engine-VMs werden standardmäßig gelöscht, wenn der Dataflow-Job abgeschlossen ist. Dies geschieht unabhängig davon, ob der Job erfolgreich ist oder nicht. Dies bedeutet, dass der zugehörige nichtflüchtige Speicher und jegliche Zwischendaten, die darauf gespeichert wurden, gelöscht werden. Die Zwischendaten, die in Cloud Storage gespeichert sind, finden Sie in den untergeordneten Verzeichnissen des Cloud Storage-Pfads, die mit --stagingLocation und/oder --tempLocation angegeben sind. Wenn Sie eine Ausgabe in eine Cloud Storage-Datei schreiben, werden am Ausgabeort eventuell temporäre Dateien erstellt, bis der Schreibvorgang abgeschlossen ist.

Python

Compute Engine-VMs werden standardmäßig gelöscht, wenn der Dataflow-Job abgeschlossen ist. Dies geschieht unabhängig davon, ob der Job erfolgreich ist oder nicht. Dies bedeutet, dass der zugehörige nichtflüchtige Speicher und jegliche Zwischendaten, die darauf gespeichert wurden, gelöscht werden. Die Zwischendaten, die in Cloud Storage gespeichert sind, können Sie an den untergeordneten Stellen des Cloud Storage-Pfads finden, die Sie als Ihre --staging_location und/oder --temp_location angeben. Wenn Sie eine Ausgabe in eine Cloud Storage-Datei schreiben, können am Ausgabeort temporäre Dateien erstellt werden, bevor der Schreibvorgang abgeschlossen ist.

In Logs erfasste Daten

In Cloud Logging gespeicherte Informationen werden in erster Linie durch den Code in Ihrem Dataflow-Programm erzeugt. Der Dataflow-Dienst kann in Cloud Logging auch Warn- und Fehlerdaten erzeugen. Dies sind jedoch die einzigen Zwischendaten, die der Dienst zu den Logs hinzufügt.

In-Flight-Daten

Es gibt zwei Modi, in denen Daten während der Pipelineauswertung übertragen werden:

  • Beim Lesen/Schreiben aus Quellen und Senken.
  • Zwischen Worker-Instanzen, während die Daten innerhalb der Pipeline verarbeitet werden

Die gesamte Kommunikation mit Google Cloud-Quellen und -Senken ist verschlüsselt und erfolgt über HTTPS. Jegliche Kommunikation zwischen Workern erfolgt über ein privates Netzwerk und unterliegt den Berechtigungen und Firewallregeln Ihres Projekts.

Datenlokalität

Eine Pipelinelogik wird auf einzelnen Compute Engine-Instanzen ausgewertet. Sie können die Zone festlegen, in der sich diese Instanzen und das private Netzwerk, über das sie kommunizieren, befinden. Untergeordnete Berechnungen, die in der Google-Infrastruktur auftreten, greifen auf Metadaten zurück (wie Cloud Storage-Standorte oder Dateigrößen). Ihre Daten verlassen niemals die Zone und durchbrechen nie Ihre Sicherheitsgrenzen.

Telemetrie und Messwerte

Telemetriedaten und die zugehörigen Messwerte werden im inaktiven Zustand verschlüsselt. Der Zugriff auf diese Daten wird über die Leseberechtigungen des Google Cloud-Projekts gesteuert.

Wir empfehlen, die Sicherheitsmechanismen zu nutzen, die für die Cloud-Ressourcen, die Ihrer Pipeline zugrunde liegen, zur Verfügung stehen. Diese Mechanismen umfassen die Datensicherheitsfunktionen von Datenquellen und -senken wie BigQuery und Cloud Storage. Außerdem sollten Sie nicht unterschiedliche Vertraulichkeitsstufen in einem einzigen Projekt kombinieren.