Multi-Tenant-Cluster mit Dienstkonten erstellen

Mit der auf Dienstkonten basierenden sicheren Mehrmandantenfähigkeit von Managed Service for Apache Spark können Sie einen Cluster für mehrere Nutzer freigeben. Dabei wird eine Reihe von Nutzerkonten den Dienstkonten bei der Erstellung des Clusters zugeordnet. Nutzer können interaktive Arbeitslasten wie Jupyter-Notebooks an die in dem mehrmandantenfähigen Cluster ausgeführten Kernel senden, wobei isolierte Nutzerumgebungen verwendet werden.

Wenn ein Nutzer einen Job an den mehrmandantenfähigen Cluster sendet, geschieht Folgendes:

  • Der Job wird als bestimmter Betriebssystemnutzer mit einem bestimmten Kerberos-Principal ausgeführt.

  • Der Job greift mithilfe eines zugeordneten Dienstkontos auf Ressourcen zu. Google Cloud

In diesem Dokument wird beschrieben, wie Sie einen mehrmandantenfähigen Cluster für Managed Service for Apache Spark erstellen und dann ein Jupyter-Notebook starten und mit einem PySpark-Kernel verbinden, der in dem Cluster ausgeführt wird.

Überlegungen und Einschränkungen

Wenn Sie einen mehrmandantenfähigen Cluster erstellen, gilt Folgendes:

  • Der Cluster ist nur für Google-Kontonutzer mit zugeordneten Dienstkonten verfügbar. Google-Gruppen können nicht zugeordnet werden. Nicht zugeordnete Nutzer können keine Jobs auf dem Cluster ausführen.

  • Kerberos ist auf dem Cluster für eine sichere Intra-Cluster-Kommunikation aktiviert und konfiguriert. Die Endnutzerauthentifizierung über Kerberos wird nicht unterstützt.

  • Der direkte SSH-Zugriff auf den Cluster und Compute Engine-Features wie die Möglichkeit, Startskripts auf Cluster-VMs auszuführen, wird blockiert. Außerdem können Jobs nicht mit sudo-Berechtigungen ausgeführt werden.

  • Managed Service for Apache Spark Workflows werden nicht unterstützt.

Mehrmandantenfähigen Cluster erstellen

Sie aktivieren die Mehrmandantenfähigkeit, wenn Sie einen Managed Service for Apache Spark-Cluster erstellen.

Console

So erstellen Sie einen Cluster mit der Google Cloud Console, wie folgt:

  1. Rufen Sie in der Google Cloud Console die Seite Cluster erstellen auf.
  2. Klicken Sie auf Zusätzliche Konfiguration , um den Bereich zu maximieren.
  3. Bearbeiten Sie die optionalen Komponenten.
    1. Klicken Sie das Kästchen Komponenten in der Benutzeroberfläche aktivieren an, um die Benutzeroberflächen der Komponenten zu aktivieren, und klicken Sie dann das Kästchen für Jupyter Kernel Gateway an.
    2. Klicken Sie auf Speichern.
  4. Bearbeiten Sie Anpassung und Sonstiges.
    1. Wenn Sie mehrmandantenfähige Nutzer hinzufügen oder entfernen möchten, ohne den Cluster neu erstellen zu müssen (siehe Nutzer für mehrmandantenfähige Cluster aktualisieren), klicken Sie im Bereich Cluster-Attribute auf + Attribute hinzufügen.
    2. Fügen Sie das folgende Attribut hinzu: Präfix: dataproc, Schlüssel: dataproc.dynamic.multi.tenancy.enabled, Wert: true

      Empfehlung: Da YARN erhebliche Clusterressourcen für jeden Notebook-Kernel verbraucht, der in einem mehrmandantenfähigen Cluster ausgeführt wird, sollten Sie Spark- und YARN-Attribute hinzufügen, um die Ressourcenzuweisung zu erhöhen.

      Beispiel:

      Präfix Schlüssel Wert
      spark spark.driver.memory 5g
      spark spark.executor.memory 5g
      spark spark.executor.cores 2
      capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0,5
    3. Klicken Sie auf Speichern.
  5. Bearbeiten Sie Sicherheit.
    • Klicken Sie unter Projektzugriff das Kästchen für Aktiviert den Cloud-Plattform-Bereich für diesen Cluster an.
    • Wählen Sie unter Sichere Mehrmandantenfähigkeit die Option Aktivieren aus.
    • Klicken Sie unter Mehrmandantenfähigkeitszuordnung auf Mehrmandantenfähigkeitszuordnung hinzufügen, um Nutzerkonten Dienstkonten zuzuordnen.
  6. Klicken Sie auf Speichern.
  7. Bestätigen Sie die anderen Einstellungen und klicken Sie dann auf Cluster erstellen.

gcloud

Verwenden Sie den gcloud dataproc clusters create command mit dem --secure-multi-tenancy-user-mapping Flag, um eine Liste von Zuordnungen zwischen Nutzerkonten und Dienstkonten anzugeben.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --secure-multi-tenancy-user-mapping=USER_MAPPINGS: \
    --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true" \
    --service-account=CLUSTER_SERVICE_ACCOUNT@iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/iam \
    --optional-components=JUPYTER_KERNEL_GATEWAY \
    --enable-component-gateway \
    other args ...

Hinweise:

  • USER_MAPPINGS: Geben Sie eine durch Kommas getrennte Liste an, die Nutzerkonten Dienstkonten zuordnet.

    --secure-multi-tenancy-user-mapping=UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com,UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com,UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
    
    YAML-Zuordnungsdatei verwenden: Anstatt das --secure-multi-tenancy-user-mapping Flag zu verwenden, um die Zuordnungen zwischen Nutzerkonten und Dienstkonten anzugeben, können Sie das --identity-config-file Flag verwenden, um eine lokale oder Cloud Storage-YAML-Datei anzugeben, die die Zuordnungen enthält.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Jede Zeile in der Zuordnungsdatei ordnet ein Nutzerkonto einem Dienstkonto zu. Die erste Zeile enthält die Kopfzeile user_service_account_mapping:.
    user_service_account_mapping:
    UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com
    UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com
    UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
    

  • --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true": Mit diesem Attribut können Sie Nutzer für mehrmandantenfähige Cluster hinzufügen oder entfernen, ohne den Cluster neu erstellen zu müssen (siehe Nutzer für mehrmandantenfähige Cluster aktualisieren).

    Empfehlung: Da YARN erhebliche Clusterressourcen für jeden Notebook-Kernel verbraucht, der in einem mehrmandantenfähigen Cluster ausgeführt wird, sollten Sie Spark- und YARN-Attribute hinzufügen, um die Ressourcenzuweisung zu erhöhen.

    Beispiel:

    --properties=" \
    spark:spark.driver.memory=5g,\
    spark:spark.executor.memory=5g,\
    spark:spark.executor.cores=200, \
    capacity-scheduler:yarn.scheduler.capacity.maximum-am-resource-percent=0.5"
    
  • CLUSTER_SERVICE_ACCOUNT (optional): Mit dem --service-account flag können Sie ein benutzerdefiniertes VM-Dienstkonto für den Cluster angeben. Wenn Sie dieses Flag weglassen, wird das Standard-VM-Dienstkonto des Clusters, PROJECT_NUMBER-compute@developer.gserviceaccount.com, verwendet.

    Empfehlung:Verwenden Sie unterschiedliche Cluster-Dienstkonten für verschiedene Cluster, damit jedes Cluster-VM-Dienstkonto nur die Identität einer begrenzten Gruppe zugeordneter Nutzer-Dienstkonten übernehmen kann.

  • --scopes=https://www.googleapis.com/auth/iam ist erforderlich, damit das Cluster-Dienstkonto die Identität eines anderen Kontos übernehmen kann.

  • --enable-component-gateway und --optional-components=JUPYTER_KERNEL_GATEWAY: Wenn Sie das Managed Service for Apache Spark-Component Gateway und das Jupyter Kernel Gateway aktivieren, können mehrere Nutzer ihre Jupyter-Notebooks mit dem mehrmandantenfähigen Cluster verbinden.

API

Verwenden Sie das SecurityConfig.IdentityConfig.userServiceAccountMapping field , um eine Liste von Zuordnungen zwischen Nutzerkonten und Dienstkonten anzugeben.

IAM-Berechtigungen (Identity and Access Management) erteilen

Wenn Sie Nutzer-Notebooks mit Notebook-Kerneln verbinden möchten, die in einem mehrmandantenfähigen Cluster ausgeführt werden, müssen zugeordnete Nutzer, zugeordnete Dienstkonten und das VM-Dienstkonto des Clusters die IAM-Berechtigungen haben, die für den Zugriff auf Ressourcen erforderlich sind.

Berechtigungen für zugeordnete Nutzer

Jeder zugeordnete Nutzer muss die Berechtigungen dataproc.clusters.get und dataproc.clusters.use haben, die erforderlich sind, damit der Nutzer auf Notebook-Kernel zugreifen und eine Verbindung zu ihnen herstellen kann, die in dem mehrmandantenfähigen Cluster ausgeführt werden. Sie können die Managed Service for Apache Spark-Bearbeiter Rolle (roles/dataproc.editor), die diese Berechtigungen enthält (siehe Einzelne IAM-Rolle zuweisen), oder eine benutzerdefinierte Rolle erstellen mit diesen Berechtigungen zuweisen.

Berechtigungen für zugeordnete Dienstkonten

Jedes zugeordnete Dienstkonto muss die Berechtigungen haben, die für die Notebook-Anwendung des zugeordneten Nutzers erforderlich sind, z. B. Zugriff auf einen Cloud Storage-Bucket oder Zugriff auf eine BigQuery-Tabelle (siehe Zugriff auf Dienstkonten verwalten).

Berechtigungen für VM-Dienstkonten

Das mehrmandantenfähige Cluster VM-Dienstkonto muss die iam.serviceAccounts.getAccessToken Berechtigung für jedes zugeordnete Dienstkonto haben. Sie können die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator) zuweisen, die diese Berechtigung enthält (siehe Zugriff auf Dienstkonten verwalten), oder eine benutzerdefinierte Rolle mit dieser Berechtigung erstellen. Informationen zu anderen VM-Dienstkontorollen finden Sie unter VM-Dienstkonto für Managed Service for Apache Spark.

Jupyter-Notebooks mit einem Kernel für mehrmandantenfähige Cluster verbinden

Zugeordnete Nutzer von mehrmandantenfähigen Clustern können ihr Vertex AI Workbench- oder nutzerverwaltetes Jupyter-Notebook mit den Kerneln verbinden, die in dem mehrmandantenfähigen Cluster installiert sind.

Vertex AI-Notebook

So erstellen Sie ein Jupyter-Notebook und verbinden es mit dem mehrmandantenfähigen Cluster:

  1. Vertex AI Workbench-Instanz erstellen.
  2. Klicken Sie auf dem Tab „Workbench-Instanzen“ für Ihre Instanz auf den Link „JupyterLab öffnen“.
  3. Klicken Sie unter Dataproc-Cluster-Notebooks auf die PySpark (YARN-Cluster) auf MULTI_TENANCY_CLUSTER_NAME Karte, um eine Verbindung zu einem neuen Jupyter PySpark-Notebook herzustellen und es zu starten.

Nutzerverwaltetes Notebook

Wenn Sie ein nutzerverwaltetes Jupyter-Notebook erstellen und mit Ihrem mehrmandantenfähigen Managed Service for Apache Spark -Cluster verbinden möchten, folgen Sie der Anleitung unter JupyterLab-Erweiterung auf Ihrer nutzerverwalteten VM installieren.

Nutzer für mehrmandantenfähige Cluster aktualisieren (Vorschau)

Wenn Sie beim Erstellen eines mehrmandantenfähigen Clusters das Clusterattribut dataproc:dataproc.dynamic.multi.tenancy.enabledauf truesetzen, können Sie nach der Clustererstellung Nutzer für mehrmandantenfähige Cluster hinzufügen, entfernen oder ersetzen.

Nutzer hinzufügen

Der folgende Aktualisierungsbefehl verwendet das Flag --add-user-mappings, um dem sicheren mehrmandantenfähigen Cluster zwei neue Zuordnungen zwischen Nutzerkonten und Dienstkonten hinzuzufügen.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --add-user-mappings=new-user1@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com,new-user2@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com

Nutzer entfernen

Der folgende Aktualisierungsbefehl verwendet das Flag --remove-user-mappings, um zwei Nutzer aus dem mehrmandantenfähigen Cluster zu entfernen. Das Flag akzeptiert die Nutzerkonten der zu entfernenden Nutzer.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --remove-user-mappings=UserB@my-company.com,UserC@my-company.com

Nutzer ersetzen

Sie können den Befehl „update“ mit dem Flag --identity-config-file verwenden, um die vorhandene Gruppe von Nutzern durch eine neue Gruppe zu ersetzen. Dieses Flag ist nützlich, um mit einem einzigen Aktualisierungsbefehl Nutzer hinzuzufügen und zu entfernen.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --identity-config-file=identity-config.yaml

Hinweise:

  • --identity-config-file: Geben Sie eine lokale oder Cloud Storage-YAML-Datei an, die die neuen Zuordnungen zwischen Nutzerkonten und Dienstkonten enthält.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Jede Zeile in der Zuordnungsdatei ordnet ein Nutzerkonto einem Dienstkonto zu. Die erste Zeile enthält die Kopfzeile user_service_account_mapping:.
    user_service_account_mapping:
    new-user1@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com
    new-user2@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com