Dataproc-Dienstkonten

Auf dieser Seite werden Dienstkonten und VM-Zugriffsbereiche beschrieben und wie sie mit Dataproc verwendet werden.

Was sind Dienstkonten?

Ein Dienstkonto ist ein spezielles Konto, das von Diensten und Anwendungen, die auf einer VM-Instanz (Compute Engine VM) ausgeführt werden, für die Interaktion mit anderen Google Cloud APIs verwendet werden kann. Anwendungen können Dienstkonto-Anmeldedaten nutzen, um sich für verschiedene APIs zu autorisieren und im Rahmen der dem Dienstkonto gewährten Berechtigungen Aktionen auf der VM auszuführen.

Dataproc-Dienstkonten

Die folgenden Dienstkonten erhalten Berechtigungen, die zum Ausführen von Dataproc-Aktionen in dem Projekt erforderlich sind, in dem sich Ihr Cluster befindet.

  • Dataproc-VM-Dienstkonto: VMs in einem Dataproc-Cluster verwenden dieses Dienstkonto für Dataproc-Datenebenenvorgänge. Das Compute Engine-Standarddienstkonto,project_number-compute@developer.gserviceaccount.com, wird als Dataproc-VM-Dienstkonto verwendet, sofern Sie beim Erstellen eines Clusters kein VM-Dienstkonto angeben. Dem Compute Engine-Standarddienstkonto wird standardmäßig die Rolle Dataproc-Worker zugewiesen. Diese Rolle umfasst die Berechtigungen, die für Dataproc-Datenpläne erforderlich sind.

    Benutzerdefinierte Dienstkonten:Wenn Sie beim Erstellen eines Clusters ein benutzerdefiniertes Dienstkonto angeben, müssen Sie dem benutzerdefinierten Dienstkonto die Berechtigungen erteilen, die für Dataproc-Datenebenenvorgänge erforderlich sind. Dazu weisen Sie dem Dienstkonto die Rolle Dataproc-Worker zu. Diese Rolle enthält die Berechtigungen, die für Vorgänge in der Dataproc-Datenebene erforderlich sind. Zusätzliche Rollen sind erforderlich, um Berechtigungen für andere Vorgänge zu gewähren, z. B. zum Lesen und Schreiben von Daten in BigQuery. Weitere Informationen finden Sie unter IAM-Dienstkontorollen ansehen und verwalten.

  • Dataproc-Dienst-Agent-Dienstkonto: Dataproc erstellt das Dienstkonto „Dienst-Agent“, service-project_number@dataproc-accounts.iam.gserviceaccount.com, mit der Rolle Dataproc-Dienst-Agent im Google Cloud-Projekt eines Dataproc-Nutzers. Dieses Dienstkonto kann beim Erstellen eines Clusters nicht durch ein benutzerdefiniertes VM-Dienstkonto ersetzt werden. Dieses Dienst-Agent-Konto wird verwendet, um Vorgänge auf der Dataproc-Steuerungsebene auszuführen, z. B. das Erstellen, Aktualisieren und Löschen von Cluster-VMs.

Freigegebene VPC-Netzwerke: Wenn der Cluster das freigegebene VPC-Netzwerk verwendet, muss ein Administrator für freigegebene VPCs dem Dataproc-Dienstkonto die Rolle Netzwerknutzer für das Hostprojekt der freigegebenen VPC zuweisen. Weitere Informationen finden Sie unter:

IAM-Dienstkontorollen ansehen und verwalten

So rufen Sie die dem Dataproc-VM-Dienstkonto zugewiesenen Rollen auf und verwalten sie:

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

    IAM aufrufen

  2. Klicken Sie auf Von Google bereitgestellte Rollenzuweisungen einschließen.

  3. Rufen Sie die für das VM-Dienstkonto aufgeführten Rollen auf. Auf der folgenden Abbildung ist die erforderliche Rolle Dataproc-Worker für das Compute Engine-Standarddienstkonto (project_number-compute@developer.gserviceaccount.com) aufgeführt, das in Dataproc standardmäßig als VM-Dienstkonto verwendet wird.

  4. Sie können auf das Stiftsymbol in der Zeile des Dienstkontos klicken, um Dienstkontorollen zuzuweisen oder zu entfernen.

Zugriffsbereiche für Dataproc-VM

VM-Zugriffsbereiche und IAM-Rollen werden gemeinsam verwendet, um den VM-Zugriff auf Google Cloud APIs einzuschränken. Wenn beispielsweise Cluster-VMs nur den Bereich https://www.googleapis.com/auth/storage-full gewährt werden, können Anwendungen, die auf Cluster-VMs ausgeführt werden, Cloud Storage APIs aufrufen. Sie können jedoch keine Anfragen an BigQuery senden, auch wenn sie als VM-Dienstkonto ausgeführt werden, dem eine BigQuery-Rolle mit umfassenden Berechtigungen zugewiesen wurde.

Als Best Practice wird empfohlen, VMs den umfassenden Bereich cloud-platform (https://www.googleapis.com/auth/cloud-platform) zu gewähren und dann den VM-Zugriff durch Erteilen bestimmter IAM-Rollen zum VM-Dienstkonto einzuschränken.

Standardmäßige Dataproc-VM-Bereiche. Wenn bei der Erstellung eines Clusters keine Bereiche angegeben werden (siehe gcloud dataproc cluster create --scopes), haben Dataproc-VMs die folgenden Standardbereiche:

https://www.googleapis.com/auth/cloud-platform (clusters created with image version 2.1+).
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/bigtable.admin.table
https://www.googleapis.com/auth/bigtable.data
https://www.googleapis.com/auth/cloud.useraccounts.readonly
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/logging.write

Wenn Sie beim Erstellen eines Clusters Bereiche angeben, haben Cluster-VMs die von Ihnen angegebenen Bereiche und die nachfolgende Mindestmenge an erforderlichen Bereichen (auch wenn Sie sie nicht angeben):

https://www.googleapis.com/auth/cloud-platform (clusters created with image version 2.1+).
https://www.googleapis.com/auth/cloud.useraccounts.readonly
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/logging.write

Cluster mit benutzerdefiniertem VM-Dienstkonto erstellen

Wenn Sie einen Cluster erstellen, können Sie ein benutzerdefiniertes VM-Dienstkonto angeben, das Ihr Cluster anstelle des Standard-VM-Dienstkontos für Dataproc-Datenebene-Vorgänge verwendet. Das VM-Dienstkonto kann nach dem Erstellen des Clusters nicht mehr geändert werden. Wenn Sie ein VM-Dienstkonto mit zugewiesenen IAM-Rollen verwenden, können Sie Ihrem Cluster detaillierte Zugriffsrechte für Projektressourcen gewähren.

Vorbereitende Schritte

  1. Erstellen Sie das benutzerdefinierte VM-Dienstkonto in dem Projekt, in dem der Cluster erstellt wird.

  2. Weisen Sie dem benutzerdefinierten VM-Dienstkonto die Rolle Dataproc-Worker für das Projekt und alle zusätzlichen Rollen zu, die für Ihre Jobs erforderlich sind, z. B. die BigQuery-Rollen Reader und Writer (siehe Dataproc-Berechtigungen und IAM-Rollen).

    Beispiel für die gcloud-Befehlszeile:

    • Mit dem folgenden Beispielbefehl wird dem benutzerdefinierten VM-Dienstkonto im Clusterprojekt die Rolle „Dataproc-Worker“ auf Projektebene zugewiesen:
    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
    • Benutzerdefinierte Rolle verwenden:Anstatt dem Dienstkonto die vordefinierte Dataproc-Rolle Worker zuzuweisen, können Sie dem Dienstkonto eine benutzerdefinierte Rolle zuweisen, die Berechtigungen für die Rolle „Worker“ enthält, aber die Berechtigungen storage.objects.* einschränkt.
      • Die benutzerdefinierte Rolle muss mindestens dem VM-Dienstkonto storage.objects.create, storage.objects.get und storage.objects.update Berechtigungen für die Objekte in den Dataproc-Staging- und temporären Buckets sowie für alle zusätzlichen Buckets zuweisen, die von Jobs benötigt werden, die auf dem Cluster ausgeführt werden.

Cluster erstellen

  • Erstellen Sie den Cluster in Ihrem Projekt.

gcloud-Befehl

Verwenden Sie den Befehl gcloud dataproc clusters create, um einen Cluster mit dem benutzerdefinierten VM-Dienstkonto zu erstellen.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --scopes=SCOPE

Ersetzen Sie Folgendes:

  • CLUSTER_NAME: Der Clustername, der innerhalb eines Projekts eindeutig sein muss. Der Name muss mit einem Kleinbuchstaben beginnen und darf bis zu 51 Kleinbuchstaben, Ziffern und Bindestriche enthalten. Er darf nicht mit einem Bindestrich enden. Der Name eines gelöschten Clusters kann wiederverwendet werden.
  • REGION: Die Region, in der sich der Cluster befinden wird.
  • SERVICE_ACCOUNT_NAME: Der Name des Dienstkontos.
  • PROJECT_ID: Die Google Cloud-Projekt-ID des Projekts, das Ihr VM-Dienstkonto enthält. Dies ist die ID des Projekts, in dem der Cluster erstellt wird, oder die ID eines anderen Projekts, wenn Sie einen Cluster mit einem benutzerdefinierten VM-Dienstkonto in einem anderen Cluster erstellen.
  • SCOPE: Zugriffsbereich(e) für Cluster-VM-Instanzen (z. B. https://www.googleapis.com/auth/cloud-platform).

REST API

Wenn du die GceClusterConfig als Teil der clusters.create API-Anfrage ausfüllst, musst du die folgenden Felder festlegen:

Console

Das Festlegen eines Dataproc-VM-Dienstkontos in der Google Cloud Console wird nicht unterstützt. Sie können den cloud-platform Zugriffsbereich für Cluster-VMs beim Erstellen des Clusters festlegen. Klicken Sie dazu in der Google Cloud Console auf der Dataproc-Seite Cluster erstellen im Bereich Sicherheit verwalten im Abschnitt Projektzugriff auf „Aktiviert den Cloud-Plattformbereich für diesen Cluster“.

Cluster mit einem benutzerdefinierten VM-Dienstkonto aus einem anderen Projekt erstellen

Wenn Sie einen Cluster erstellen, können Sie ein benutzerdefiniertes VM-Dienstkonto angeben, das von Ihrem Cluster anstelle des Standard-VM-Dienstkontos für Dataproc-Datenebene-Vorgänge verwendet wird. Sie können kein benutzerdefiniertes VM-Dienstkonto angeben, nachdem der Cluster erstellt wurde. Mit einem benutzerdefinierten VM-Dienstkonto mit zugewiesenen IAM-Rollen können Sie Ihrem Cluster detaillierte Zugriffsrechte für Projektressourcen gewähren.

Vorbereitende Schritte

  1. Im Projekt des Dienstkontos (dem Projekt, in dem sich das benutzerdefinierte VM-Dienstkonto befindet):

    1. Aktivieren Sie die projektübergreifende Verknüpfung von Dienstkonten.

    2. Enable the Dataproc API.

      Enable the API

  2. Weisen Sie Ihrem E-Mail-Konto (dem Nutzer, der den Cluster erstellt) die Rolle Dienstkontonutzer entweder für das Dienstkontoprojekt oder, für eine detailliertere Steuerung, für das benutzerdefinierte VM-Dienstkonto im Dienstkontoprojekt zu.

    Weitere Informationen:Unter Zugriff auf Projekte, Ordner und Organisationen verwalten erfahren Sie, wie Sie Rollen auf Projektebene gewähren. Unter Zugriff auf Dienstkonten verwalten erfahren Sie, wie Sie Rollen auf Dienstkontoebene gewähren.

    Beispiele für die gcloud CLI:

    • Mit dem folgenden Beispielbefehl wird dem Nutzer die Rolle „Dienstkontonutzer“ auf Projektebene gewährt:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=USER_EMAIL \
        --role="roles/iam.serviceAccountUser"
    

    Hinweise: USER_EMAIL: Geben Sie die E-Mail-Adresse Ihres Nutzerkontos im Format user:user-name@example.com an.

    • Mit dem folgenden Beispielbefehl wird dem Nutzer die Rolle „Dienstkontonutzer“ auf Dienstkontoebene zugewiesen:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=USER_EMAIL \
        --role="roles/iam.serviceAccountUser"
    

    Hinweise: USER_EMAIL: Geben Sie die E-Mail-Adresse Ihres Nutzerkontos im Format user:user-name@example.com an.

  3. Weisen Sie dem benutzerdefinierten VM-Dienstkonto die Rolle Dataproc-Worker im Clusterprojekt zu.

    Beispiel für die gcloud-Befehlszeile:

    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
  4. Weisen Sie dem Dataproc-Dienst-Agent-Dienstkonto im Clusterprojekt die Rollen Dienstkontonutzer und Ersteller von Dienstkonto-Tokens entweder für das Dienstkontoprojekt oder, für eine detailliertere Steuerung, für das benutzerdefinierte VM-Dienstkonto im Dienstkontoprojekt zu. Dadurch können Sie dem Dienstkonto des Dataproc-Dienst-Agents im Clusterprojekt erlauben, Tokens für das benutzerdefinierte Dataproc-VM-Dienstkonto im Dienstkontoprojekt zu erstellen.

    Weitere Informationen:Unter Zugriff auf Projekte, Ordner und Organisationen verwalten erfahren Sie, wie Sie Rollen auf Projektebene gewähren. Unter Zugriff auf Dienstkonten verwalten erfahren Sie, wie Sie Rollen auf Dienstkontoebene gewähren.

    Beispiele für die gcloud CLI:

    • Mit den folgenden Beispielbefehlen wird dem Dienstkonto des Dataproc-Dienst-Agents im Clusterprojekt die Rolle „Dienstkontonutzer“ und „Ersteller von Dienstkonto-Tokens“ auf Projektebene zugewiesen:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountUser"
     
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
    • Mit den folgenden Beispielbefehlen wird dem Dataproc-Dienst-Agent-Dienstkonto im Clusterprojekt die Rolle „Dienstkontonutzer“ und „Ersteller von Dienstkonto-Tokens“ auf Ebene des VM-Dienstkontos zugewiesen:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountUser"
     
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
  5. Weisen Sie dem Compute Engine-Dienstkonto für den Dienst-Agenten im Clusterprojekt die Rolle Ersteller von Dienstkonto-Tokens entweder für das Dienstkontoprojekt oder, für eine detailliertere Steuerung, für das benutzerdefinierte VM-Dienstkonto im Dienstkontoprojekt zu. Dadurch gewähren Sie dem Dienstkonto „Compute Agent Service Agent“ im Clusterprojekt die Möglichkeit, Tokens für das benutzerdefinierte Dataproc-VM-Dienstkonto im Dienstkontoprojekt zu erstellen.

    Weitere Informationen:Unter Zugriff auf Projekte, Ordner und Organisationen verwalten erfahren Sie, wie Sie Rollen auf Projektebene gewähren. Unter Zugriff auf Dienstkonten verwalten erfahren Sie, wie Sie Rollen auf Dienstkontoebene gewähren.

    Beispiele für die gcloud CLI:

    • Mit dem folgenden Beispielbefehl wird dem Compute Engine-Dienstkonto im Clusterprojekt die Rolle „Ersteller von Dienstkonto-Tokens“ auf Projektebene zugewiesen:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     
    • Mit dem folgenden Beispielbefehl wird dem Compute Engine-Dienstkonto „Service Agent“ im Clusterprojekt die Rolle „Ersteller von Dienstkonto-Tokens“ auf Ebene des VM-Dienstkontos zugewiesen:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     

Cluster erstellen

Nächste Schritte