Google Cloud Serverless for Apache Spark-Dienstkonten

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

Dienstkonten für Laufzeitversionen vor 3.0

Bei Spark-Laufzeitversionen vor 3.0 mit Anmeldedaten des Dienstkontos wird das Compute Engine-Standarddienstkonto oder ein vom Nutzer angegebenes benutzerdefiniertes Dienstkonto verwendet, um eine Batcharbeitslast zu senden oder eine interaktive Sitzung zu erstellen.

Dienstkonten für Laufzeitversionen ab 3.0

Bei Spark-Laufzeitversionen 3.0 und höher mit Anmeldedaten des Dienstkontos wird ein vom Nutzer angegebenes benutzerdefiniertes Dienstkonto verwendet, um eine Batcharbeitslast zu senden oder eine interaktive Sitzung zu erstellen.

Bei Serverless for Apache Spark-Laufzeitversionen ab 3.0 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** in einem Dataproc-Nutzer Google Cloud projekt erstellt. Dieses Dienst konto führt die folgenden Systemvorgänge für Serverless for Apache Spark Ressourcen aus, die sich in dem Projekt befinden, in dem eine Arbeitslast erstellt wird:

  • Cloud Logging und Cloud Monitoring
  • Grundlegende Vorgänge für Dataproc Resource Manager Node wie get, heartbeat und mintOAuthToken

IAM-Dienstkontorollen ansehen und verwalten

So sehen Sie die Rollen an, die dem Dienstkonto für Batcharbeitslasten oder Sitzungen zugewiesen sind, und verwalten sie:

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

    Zu IAM'

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

  3. Sehen Sie sich die Rollen an, die für das Standard- oder benutzerdefinierte Dienstkonto für Batcharbeitslasten oder Sitzungen aufgeführt sind

    Die folgende Abbildung zeigt die erforderliche Dataproc-Worker-Rolle für das Compute Engine-Standarddienstkonto, project_number-compute@developer.gserviceaccount.com, das von Serverless for Apache Spark standardmäßig 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 Dienstkontenzeile klicken, um Dienstkontorollen zuzuweisen oder zu entfernen.

Projektübergreifendes Dienstkonto verwenden

Sie können eine Batcharbeitslast senden, die ein Dienstkonto aus einem anderen Projekt als dem Projekt der Batcharbeitslast verwendet (dem Projekt, in dem der Batch gesendet 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 bezeichnet.

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

Einrichtungsschritte

Die Beispiele in diesem Abschnitt gelten für das Senden einer Batcharbeitslast die mit einer Laufzeitversion vor 3.0 ausgeführt wird.

  1. Im Dienstkontoprojekt:

    1. Ermöglichen Sie, 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 finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten , um Rollen auf Projektebene zuzuweisen, und Zugriff auf Dienstkonten verwalten , um Rollen auf Dienstkontoebene zuzuweisen.

      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 an, im Format: user:user-name@example.com.

      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.
    4. Weisen Sie dem Dienstkonto die Rolle „Dataproc-Worker“ für das Batchprojekt 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 Dienstkonto des Dataproc-Dienst-Agents die Rollen Dienstkontonutzer und Ersteller von Dienstkonto-Tokens entweder für das Dienstkontoprojekt oder für eine detailliertere Steuerung für das Dienstkonto im Dienstkontoprojekt zu. Dadurch kann das Dienstkonto des Dataproc-Dienst-Agents in dem Batchprojekt Tokens für das Dienstkonto in dem Dienstkontoprojekt erstellen.

      Weitere Informationen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten , um Rollen auf Projektebene zuzuweisen, und Zugriff auf Dienstkonten verwalten , um Rollen auf Dienstkontoebene zuzuweisen.

      Beispiele für die gcloud CLI :

      Mit den folgenden Befehlen werden dem Dienstkonto des Dataproc-Dienst-Agents Dienstkonto 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 Dienstkonto des Dataproc-Dienst-Agents 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 Dienstkonto des Compute Engine-Dienst-Agents im Batchprojekt die Rolle „Ersteller von Dienstkonto-Tokens“ entweder für das Dienstkontoprojekt oder für eine detailliertere Steuerung für das Dienstkonto im Dienstkontoprojekt zu. Dadurch kann das Dienstkonto des Compute Engine-Dienst-Agents im Batch Projekt Tokens für das Dienstkonto im Dienst kontoprojekt erstellen.

      Weitere Informationen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten , um Rollen auf Projektebene zuzuweisen, und Zugriff auf Dienstkonten verwalten , um Rollen auf Dienstkontoebene zuzuweisen.

      Beispiele für die gcloud CLI :

      Mit dem folgenden Beispielbefehl wird dem Dienstkonto des Compute Engine-Dienst-Agents im Batchprojekt 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 ausgeführt haben, können Sie eine Batcharbeitslast senden. Geben Sie das Dienstkonto im Dienstkontoprojekt als das Dienstkonto an, das für die Batcharbeitslast verwendet werden soll.

Fehlerbehebung bei fehlenden Berechtigungen

Falsche oder unzureichende Berechtigungen für das Dienstkonto, das von Ihrer Batcharbeitslast oder Sitzung verwendet wird, können zu Fehlern beim Erstellen von Batches oder Sitzungen führen, bei denen die Fehlermeldung „Driver compute node failed to initialize for batch in 600 seconds“ (Der Compute-Knoten des Treibers konnte für den Batch nicht innerhalb von 600 Sekunden initialisiert werden) angezeigt wird. Dieser Fehler gibt an, dass der Spark-Treiber nicht innerhalb des zugewiesenen Zeitlimits gestartet werden konnte, was häufig auf einen Mangel an erforderlichem Zugriff auf Google Cloud Ressourcen zurückzuführen ist.

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

  • Dataproc-Worker-Rolle (roles/dataproc.worker): Diese Rolle gewährt die erforderlichen Berechtigungen für Serverless for Apache Spark, um Spark-Arbeitslasten und -Sitzungen zu verwalten und auszuführen.
  • 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 diese 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, Storage Object Creator oder Storage Object Admin erforderlich ist.
  • BigQuery-Datenbearbeiter (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, um Fehler effektiv beheben zu können. In der Regel reicht die Logging Writer Rolle (roles/logging.logWriter) aus.
  • Fehlende dataproc.worker Rolle: Ohne diese Kernrolle kann die Serverless for Apache Spark-Infrastruktur den Treibernknoten nicht ordnungsgemäß bereitstellen und verwalten.

  • Unzureichende Cloud Storage-Berechtigungen: Wenn Ihre Spark-Anwendung versucht, Eingabedaten aus einem Cloud Storage-Bucket zu lesen oder Ausgaben in einen Cloud Storage-Bucket zu schreiben, ohne die erforderlichen Dienstkontoberechtigungen zu haben, kann der Treiber nicht initialisiert werden, da er keinen Zugriff auf wichtige Ressourcen hat.

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

So prüfen und aktualisieren Sie Dienstkontoberechtigungen:

  1. Rufen Sie in der Google Cloud Console die IAM & Verwaltung > IAM Seite 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. Wenn nicht, fügen Sie sie hinzu.

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