Cloud 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 Platform-Konto

Bei lokaler 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. Daher haben lokal ausgeführte Apache Beam SDK-Vorgänge Zugriff auf die Dateien und Ressourcen, auf die auch Ihr Google Cloud-Konto Zugriff hat.

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

Hinweis: Lokale Pipelines können Daten an lokale Ziele (zum Beispiel lokale Dateien) oder an Cloudziele (zum Beispiel Cloud Storage oder BigQuery) ausgeben. Wenn die lokal ausgeführte Pipeline Dateien in cloudbasierte Ressourcen wie Cloud Storage schreibt, verwendet sie die Anmeldedaten Ihres Google Cloud-Kontos und das als Standardeinstellung für das gcloud-Befehlszeilentool konfigurierte Google Cloud-Projekt. Anleitungen zur Authentifizierung mit den Anmeldedaten für Ihr Google Cloud-Konto finden Sie in der Kurzanleitung für Ihre Sprache.

Sicherheit und Berechtigungen für Pipelines auf der Google Cloud Platform

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.

Cloud 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 der IAM-Richtlinie (Identity and Access Management) entfernen, sind die Konten weiterhin vorhanden, da sie zum Dataflow-Dienst gehören. Wenn ein Dataflow-Dienstkonto die Berechtigungen für ein Projekt verliert, kann Dataflow keine VMs starten und auch keine anderen Verwaltungsaufgaben ausführen.

Best Practice: Erstellen Sie einen Bucket mit dem Projekt als Eigentümer, der als Staging-Bucket für Dataflow verwendet werden soll. Dadurch wird sichergestellt, dass die Berechtigungen für die Bereitstellung der ausführbaren Dateien Ihrer Pipeline automatisch richtig festgelegt werden.

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.

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 Dienstkonto aus dem Projekt Ihres Jobs als vom Nutzer verwaltetes Controller-Dienstkonto verwenden.

Sollten Sie kein benutzerverwaltetes Dienstkonto haben, müssen Sie ein Dienstkonto erstellen, das sich im selben Projekt wie Ihr Job befindet, 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 Cloud Platform-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.

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 Platform-Ressourcen in mehreren Google Cloud Platform-Projekten zugreifen

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

Java

  • Cloud Storage-Buckets
  • BigQuery-Datasets
  • Pub/Sub-Themen und -Abonnements
  • Datastore Datasets

Python

  • Cloud Storage-Buckets
  • BigQuery-Datasets
  • Pub/Sub-Themen und -Abonnements
  • Datastore 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 Platform-Projekten zugreifen

Sie müssen den Cloud Storage-Bucket für das Controller-Dienstkonto Ihres Dataflow-Projekts zugänglich machen, um einem Dataflow-Projekt Zugriff auf einen Bucket zu gewähren, der zu einem anderen Cloud Platform-Projekt gehört. Sie können mit den Cloud Storage-Zugriffssteuerungen den erforderlichen Zugriff gewähren.

Hinweis: Überprüfen Sie, ob Ihre IAM-Einstellungen übereinstimmend sind, falls Sie nicht die Standarddienstkonten verwenden.

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>

Hinweis: Mit der Option -m wird der Befehl zur schnelleren Verarbeitung parallel ausgeführt. Mit der Option -r wird der Befehl rekursiv auf Ressourcen innerhalb des Buckets angewendet.

Beachten Sie, dass der vorherige Befehl nur Zugriff auf vorhandene Ressourcen gewährt. 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 Google Cloud Platform-Projekten zugreifen

Mit der BigQueryIO API können Sie auf BigQuery-Datasets zugreifen, die zu einem anderen Google Cloud-Projekt gehören, also nicht dem Projekt, das Sie mit 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. Weitere Informationen zum Gewähren des Zugriffs auf BigQuery-Datasets über die BigQuery-Web-UI oder die BigQuery API finden Sie unter BigQuery-Zugriffssteuerung.

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 Cloud Pub/Sub-Themen und -Abos in Google Cloud Platform-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. Cloud Dataflow verwendet das Controller-Dienstkonto, um Ihre Jobs auszuführen. Sie müssen diesem Dienstkonto Zugriff auf die Cloud Pub/Sub-Ressourcen in dem anderen Projekt gewähren.

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.

Mit verschiedenen Google Cloud Platform-Projekten auf Cloud Datastore zugreifen

Wenn Sie auf den Datastore eines anderen Google Cloud-Projekts zugreifen möchten, muss das Compute Engine-Dienstkonto (<project-number>-compute@developer.gserviceaccount.com) Ihres Cloud Dataflow-Projekts als Bearbeiter des Projekts, zu dem der Datastore gehört, hinzugefügt werden. Sie müssen außerdem die Datastore API in beiden Projekten unter https://console.cloud.google.com/project/<project-id>/apiui/apiview/datastore/overview aktivieren.

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 übermitteln
  • 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, können Sie an den untergeordneten Stellen des Cloud Storage-Pfads finden, die Sie als Ihre --stagingLocation und/oder --tempLocation 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.

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 Ihnen, die Sicherheitsmechanismen zu verwenden, die in den 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.