In diesem Dokument wird beschrieben, wie Sie Rollen für Dienstkonten für Identity and Access Management ansehen und verwalten. Eine Serverless for Apache Spark-Batcharbeitslast oder interaktive Sitzung wird als Compute Engine-Standarddienstkonto ausgeführt, sofern Sie beim Senden einer Batcharbeitslast, Erstellen einer Sitzung oder Erstellen einer Sitzungslaufzeitvorlage kein benutzerdefiniertes Dienstkonto angeben.
Sicherheitsanforderung:Sie benötigen die Berechtigung ActAs
für das Dienstkonto, um Serverless for Apache Spark-Arbeitslasten oder -Sitzungen auszuführen. Die Rolle Service Account User
enthält diese Berechtigung. Ausführliche Informationen zu Dienstkontoberechtigungen finden Sie unter Rollen für die Dienstkontoauthentifizierung.
Erforderliche Dataproc-Worker-Rolle
Das Dienstkonto für die Serverless for Apache Spark-Arbeitslast oder -Sitzung muss die IAM-Rolle Dataproc Worker haben. Das Compute Engine-Standarddienstkonto project_number-compute@developer.gserviceaccount.com
, das von Serverless for Apache Spark verwendet wird, hat diese Rolle standardmäßig. Wenn Sie beim Erstellen einer Batcharbeitslast, Sitzung oder Sitzungsvorlage ein anderes Dienstkonto angeben, müssen Sie dem Dienstkonto die Dataproc-Worker-Rolle zuweisen.
Für andere Vorgänge, z. B. das Lesen und Schreiben von Daten aus und in Cloud Storage oder BigQuery, sind möglicherweise zusätzliche Rollen erforderlich.
In einigen Projekten wurde dem Dienstkonto für Batcharbeitslasten oder Sitzungen möglicherweise automatisch die Rolle Editor für das Projekt zugewiesen. Diese Rolle umfasst die Berechtigungen der Dataproc-Worker-Rolle sowie zusätzliche Berechtigungen, die für Serverless for Apache Spark nicht erforderlich sind. Um die Best Practice zur geringsten Berechtigung zu befolgen, ersetzen Sie die Rolle Bearbeiter des Dienstkontos durch die Rolle Dataproc-Worker.
Fehler aufgrund von Berechtigungen beheben
Falsche oder unzureichende Berechtigungen für das Dienstkonto, das von Ihrer Serverless for Apache Spark-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“ (Die Initialisierung des Driver-Rechenknotens für den Batch ist nach 600 Sekunden fehlgeschlagen) angezeigt wird. 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
): Diese Rolle gewährt die erforderlichen Berechtigungen für Serverless for Apache Spark zum Verwalten und Ausführen von Spark-Arbeitslasten und ‑Sitzungen. - 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, istStorage Object Viewer
erforderlich. Wenn Ihre Anwendung Ausgaben in einen Cloud Storage-Bucket schreibt, istStorage Object Creator
oderStorage 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, um Fehler effektiv beheben zu können. In der Regel ist die Rolle
Logging Writer
(roles/logging.logWriter
) ausreichend.
Häufige Fehler im Zusammenhang mit Berechtigungen oder Zugriff
Fehlende Rolle
dataproc.worker
: Ohne diese Kernrolle 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:
- Rufen Sie in der Google Cloud Console die Seite IAM & Verwaltung > IAM auf.
- Suchen Sie das Dienstkonto, das für Ihre Serverless for Apache Spark-Batcharbeitslasten oder ‑Sitzungen verwendet wird.
- 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.
IAM-Dienstkontorollen ansehen und verwalten
So rufen Sie die Rollen auf, die dem Dienstkonto für Batcharbeitslasten oder Sitzungen von Serverless for Apache Spark zugewiesen sind, und verwalten sie:
Rufen Sie in der Google Cloud Console die Seite IAM auf.
Klicken Sie auf Von Google bereitgestellte Rollenzuweisungen einschließen.
Rufen Sie die Rollen auf, die für das Batch-Arbeitspaket oder das Sitzungsdienstkonto 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.Die Rolle „Dataproc-Worker“, die dem Compute Engine-Standarddienstkonto im IAM-Bereich der Google Cloud Console zugewiesen ist. Sie können auf das Stiftsymbol in der Dienstkontozeile klicken, um Dienstkontorollen zuzuweisen oder zu entfernen.
Projektübergreifendes Dienstkonto
Sie können eine Serverless for Apache Spark-Batcharbeitslast senden, die ein Dienstkonto aus einem anderen Projekt als dem Batcharbeitslastprojekt (dem Projekt, in dem der Batch gesendet wird) verwendet. 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 ein projektübergreifendes Dienstkonto zum Ausführen einer Batch-Arbeitslast verwenden? 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
Im Dienstkonto-Projekt:
Ermöglichen, dass Dienstkonten projektübergreifend angehängt werden können
Enable the Dataproc API.
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. 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 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 Formatuser: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
.
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"
Im Batchprojekt:
Weisen Sie dem Dienstkonto des Dataproc-Dienst-Agents 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-Dienst-Agent-Dienstkonto 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"
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 Compute Engine-Dienst-Agent-Dienstkonto 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 abgeschlossen haben, können Sie eine Batch-Arbeitslast senden. Geben Sie das Dienstkonto im Dienstkontoprojekt als das Dienstkonto an, das für den Batch-Arbeitslast verwendet werden soll.