Google Cloud Serverless for Apache Spark-Dienstkonten

Serverless for Apache Spark-Batcharbeitslasten und interaktive Sitzungen werden entweder mit Endnutzer- oder Dienstkontoanmeldedaten ausgeführt. Wenn Dienstkontoanmeldedaten verwendet werden, hängt das Dienstkonto, das zum Ausführen von Batcharbeitslasten oder interaktiven Sitzungen verwendet wird, von der Batch- oder Sitzungs-Laufzeitversion ab.

Laufzeitdienstkonten vor Version 3.0

Für Spark-Laufzeitversionen vor 3.0 mit Dienstkontoanmeldedaten wird das Compute Engine-Standarddienstkonto oder ein benutzerdefiniertes Dienstkonto verwendet, um einen Batcharbeitslast zu senden oder eine interaktive Sitzung zu erstellen.

Laufzeitdienstkonten ab Version 3.0

Bei Spark-Laufzeitversionen 3.0 und höher mit Dienstkontoanmeldedaten wird ein vom Nutzer angegebenes benutzerdefiniertes Dienstkonto verwendet, um einen Batch-Arbeitslast zu senden oder eine interaktive Sitzung zu erstellen.

Bei Serverless für Apache Spark 3.0 und höher wird das Dienstkonto Dataproc Resource Manager Node Service Agent, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, mit der Rolle Dataproc Resource Manager Node Service Agent im Projekt eines Dataproc-Nutzers Google Cloud erstellt. Mit diesem Dienstkonto werden die folgenden Systemvorgänge für Serverless for Apache Spark-Ressourcen ausgeführt, die sich in dem Projekt befinden, in dem eine Arbeitslast erstellt wird:

  • Cloud Logging und Cloud Monitoring
  • Dataproc Resource Manager-Knoten-Grundvorgänge wie get, heartbeat und mintOAuthToken

IAM-Dienstkontorollen ansehen und verwalten

So rufen Sie die Rollen auf, die der Batcharbeitslast oder dem Sitzungsdienstkonto zugewiesen sind, und verwalten sie:

  1. Rufen Sie in der Google Cloud Console die Seite IAM auf.

    IAM aufrufen

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

  3. Rufen Sie die Rollen auf, die für die Batcharbeitslast oder das Standard- oder benutzerdefinierte Dienstkonto für die Sitzung oder das Standard- oder benutzerdefinierte Dienstkonto für den Dienst aufgeführt sind.

    Im folgenden Bild ist die erforderliche Rolle Dataproc-Worker für das Compute Engine-Standarddienstkonto project_number-compute@developer.gserviceaccount.com aufgeführt, das standardmäßig von Serverless für Apache Spark als Dienstkonto für Arbeitslasten oder Sitzungen verwendet wird.

    Rolle „Dataproc-Worker“ für das Compute Engine-Standarddienstkonto in der IAM-Konsole
    Die Rolle „Dataproc Worker“, die dem Compute Engine-Standarddienstkonto im IAM-Bereich der Google Cloud Console zugewiesen ist.
  4. Sie können auf das Stiftsymbol in der Dienstkontozeile klicken, um Dienstkontorollen zuzuweisen oder zu entfernen.

Projektübergreifendes Dienstkonto verwenden

Sie können einen Batcharbeitslauf übermitteln, für den ein Dienstkonto aus einem anderen Projekt als dem Batcharbeitslaufprojekt (dem Projekt, in dem der Batch übermittelt wird) verwendet wird. In diesem Abschnitt wird das Projekt, in dem sich das Dienstkonto befindet, als service account project bezeichnet und das Projekt, in dem der Batch gesendet wird, als batch project.

Warum sollte ein projektübergreifendes Dienstkonto zum Ausführen einer Batch-Arbeitslast verwendet werden? Ein möglicher Grund ist, dass dem Dienstkonto im anderen Projekt IAM-Rollen zugewiesen wurden, die einen detaillierten Zugriff auf die Ressourcen in diesem Projekt ermöglichen.

Einrichtungsschritte

Die Beispiele in diesem Abschnitt beziehen sich auf das Senden einer Batcharbeitslast, die mit einer Laufzeitversion vor 3.0 ausgeführt wird.

  1. Im Dienstkontoprojekt:

    1. Ermöglichen, dass Dienstkonten projektübergreifend angehängt werden können

    2. Enable the Dataproc API.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the API

    3. 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 Dienstkonto im Dienstkontoprojekt zu.

      Weitere Informationen zum Zuweisen von Rollen auf Projektebene finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten und zum Zuweisen von Rollen auf Dienstkontoebene unter Zugriff auf Dienstkonten verwalten.

      Beispiele für die gcloud CLI:

      Mit dem folgenden Beispielbefehl wird dem Nutzer die Rolle „Dienstkontonutzer“ auf Projektebene zugewiesen:

      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 folgenden Format an: user:user-name@example.com.
    4. Weisen Sie dem Dienstkonto im Batchprojekt die Rolle Dataproc Worker zu.

      Beispiel für die gcloud CLI:

      gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \
          --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --role="roles/dataproc.worker"
      
  2. Im Batchprojekt:

    1. Weisen Sie dem Dataproc-Dienst-Agent-Dienstkonto die Rollen Dienstkontonutzer und Ersteller von Dienstkonto-Tokens entweder im Dienstkontoprojekt oder, für eine detailliertere Steuerung, dem Dienstkonto im Dienstkontoprojekt zu. Dadurch erlauben Sie dem Dataproc-Dienstkonto des Dienst-Agents im Batchprojekt, Tokens für das Dienstkonto im Dienstkonto-Projekt zu erstellen.

      Weitere Informationen zum Zuweisen von Rollen auf Projektebene finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten. Informationen zum Zuweisen von Rollen auf Dienstkontoebene finden Sie unter Zugriff auf Dienstkonten verwalten.

      Beispiele für die gcloud CLI:

      Mit den folgenden Befehlen werden dem Dienstkonto des Dataproc-Dienst-Agents im Batchprojekt die Rollen „Dienstkontonutzer“ und „Ersteller von Dienstkonto-Tokens“ auf Projektebene zugewiesen:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      Mit den folgenden Beispielbefehlen werden dem Dataproc-Dienst-Agent-Dienstkonto im Batchprojekt die Rollen „Dienstkontonutzer“ und „Ersteller von Dienstkonto-Tokens“ auf Dienstkontoebene zugewiesen:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_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-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      
    2. Weisen Sie dem Compute Engine-Dienst-Agent-Dienstkonto im Batchprojekt die Rolle Ersteller von Dienstkonto-Tokens entweder für das Dienstkonto-Projekt oder, für eine detailliertere Steuerung, für das Dienstkonto im Dienstkonto-Projekt zu. Dadurch gewähren Sie dem Dienstkonto des Compute Agent Service Agent im Batchprojekt die Möglichkeit, Tokens für das Dienstkonto im Dienstkontoprojekt zu erstellen.

      Weitere Informationen zum Zuweisen von Rollen auf Projektebene finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten. Informationen zum Zuweisen von Rollen auf Dienstkontoebene finden Sie unter Zugriff auf Dienstkonten verwalten.

      Beispiele für die gcloud CLI:

      Mit dem folgenden Beispielbefehl wird dem Dienstkonto des Compute Engine-Dienst-Agents im Batch-Projekt die Rolle „Ersteller von Dienstkonto-Tokens“ auf Projektebene zugewiesen:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      Mit dem folgenden Beispielbefehl wird dem Dienstkonto des Compute Engine-Dienst-Agents im Clusterprojekt die Rolle „Ersteller von Dienstkonto-Tokens“ auf Dienstkontoebene zugewiesen:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

Batcharbeitslast senden

Nachdem Sie die Einrichtungsschritte abgeschlossen haben, können Sie eine Batch-Arbeitslast einreichen. Geben Sie das Dienstkonto im Dienstkontoprojekt als das Dienstkonto an, das für den Batch-Arbeitslast verwendet werden soll.

Fehler aufgrund von Berechtigungen beheben

Falsche oder unzureichende Berechtigungen für das Dienstkonto, das von Ihrer Batch-Arbeitslast oder ‑Sitzung verwendet wird, können zu Fehlern beim Erstellen von Batches oder Sitzungen führen, die die Fehlermeldung „Driver compute node failed to initialize for batch in 600 seconds“ (Die Initialisierung des Driver-Rechenknotens für den Batch ist nach 600 Sekunden fehlgeschlagen) ausgeben. Dieser Fehler gibt an, dass der Spark-Treiber nicht innerhalb des zugewiesenen Zeitlimits gestartet werden konnte. Das liegt häufig daran, dass der erforderliche Zugriff auf Google Cloud Ressourcen fehlt.

Prüfen Sie zur Fehlerbehebung, ob Ihr Dienstkonto die folgenden Mindestrollen oder -berechtigungen hat:

  • Rolle Dataproc-Worker (roles/dataproc.worker): Mit dieser Rolle werden die erforderlichen Berechtigungen für Serverless for Apache Spark zum Verwalten und Ausführen von Spark-Arbeitslasten und -Sitzungen gewährt.
  • Storage-Objekt-Betrachter (roles/storage.objectViewer), Storage-Objekt-Ersteller (roles/storage.objectCreator) oder Storage-Objekt-Administrator (roles/storage.admin): Wenn Ihre Spark-Anwendung Daten aus Cloud Storage-Buckets liest oder in Cloud Storage-Buckets schreibt, benötigt das Dienstkonto die entsprechenden Berechtigungen für den Zugriff auf die Buckets. Wenn sich Ihre Eingabedaten beispielsweise in einem Cloud Storage-Bucket befinden, ist Storage Object Viewer erforderlich. Wenn Ihre Anwendung Ausgaben in einen Cloud Storage-Bucket schreibt, ist Storage Object Creator oder Storage Object Admin erforderlich.
  • BigQuery-Dateneditor (roles/bigquery.dataEditor) oder BigQuery-Datenbetrachter (roles/bigquery.dataViewer): Wenn Ihre Spark-Anwendung mit BigQuery interagiert, prüfen Sie, ob das Dienstkonto die entsprechenden BigQuery-Rollen hat.
  • Cloud Logging-Berechtigungen:Das Dienstkonto benötigt Berechtigungen zum Schreiben von Logs in Cloud Logging für ein effektives Debugging. In der Regel ist die Rolle Logging Writer (roles/logging.logWriter) ausreichend.
  • Fehlende Rolle dataproc.worker: Ohne diese grundlegende Rolle kann die Serverless for Apache Spark-Infrastruktur den Driver-Knoten nicht richtig bereitstellen und verwalten.

  • Unzureichende Cloud Storage-Berechtigungen: Wenn Ihre Spark-Anwendung versucht, Eingabedaten aus einem Cloud Storage-Bucket zu lesen oder Ausgabedaten in einen Cloud Storage-Bucket zu schreiben, ohne die erforderlichen Dienstkontoberechtigungen zu haben, kann die Initialisierung des Treibers fehlschlagen, da er keinen Zugriff auf wichtige Ressourcen hat.

  • Netzwerk- oder Firewallprobleme: VPC Service Controls oder Firewallregeln können den Zugriff von Dienstkonten auf Google Cloud APIs oder -Ressourcen versehentlich blockieren.

So prüfen und aktualisieren Sie Dienstkontoberechtigungen:

  1. Rufen Sie in der Google Cloud Console die Seite IAM & Verwaltung > IAM auf.
  2. Suchen Sie das Dienstkonto, das für Ihre Batcharbeitslasten oder ‑sitzungen verwendet wird.
  3. Prüfen Sie, ob die erforderlichen Rollen zugewiesen sind. Falls nicht, fügen Sie sie hinzu.

Eine Liste der Rollen und Berechtigungen für Serverless for Apache Spark finden Sie unter Berechtigungen und IAM-Rollen für Serverless for Apache Spark.