Persönliche Clusterauthentifizierung

Beim Erstellen eines Managed Service for Apache Spark-Clusters können Sie die persönliche Clusterauthentifizierung für Managed Service for Apache Spark aktivieren, damit interaktive Arbeitslasten im Cluster sicher als Nutzeridentität ausgeführt werden können. Dies bedeutet, dass Interaktionen mit anderen Google Cloud Ressourcen wie Cloud Storage als Sie selbst und nicht als das Cluster-Dienstkonto authentifiziert werden.

Hinweise

  • Wenn Sie einen Cluster mit aktivierter personalisierter Clusterauthentifizierung erstellen, kann der Cluster nur unter Ihrer Identität verwendet werden. Andere Nutzer können dann keine Jobs auf dem Cluster ausführen und nicht auf Component Gateway-Endpunkte im Cluster zugreifen.

  • Cluster mit aktivierter personalisierter Clusterauthentifizierung blockieren den SSH-Zugriff und Compute Engine-Features wie Startskripts auf allen VMs im Cluster.

  • Bei Clustern, bei denen die personalisierte Clusterauthentifizierung automatisch aktiviert ist, wird Kerberos im Cluster automatisch für eine sichere Kommunikation innerhalb des Clusters aktiviert und konfiguriert. Alle Kerberos-Identitäten auf dem Cluster interagieren jedoch mit Google Cloud-Ressourcen wie derselbe Nutzer.

  • Cluster mit aktivierter personalisierter Clusterauthentifizierung unterstützen keine benutzerdefinierten Images.

  • Die Authentifizierung von persönlichen Clustern für Managed Service for Apache Spark unterstützt keine Workflows für Managed Service for Apache Spark.

  • Die persönliche Cluster-Authentifizierung für Managed Service for Apache Spark ist nur für interaktive Jobs vorgesehen, die von einem einzelnen Nutzer ausgeführt werden. Für lang andauernde Jobs und Vorgänge sollte eine entsprechende Dienstkontoidentität konfiguriert und verwendet werden.

  • Die weitergegebenen Anmeldedaten werden mit einer Zugriffsgrenze für Anmeldedaten herabgestuft. Die Standardzugriffsgrenze ist auf das Lesen und Schreiben von Cloud Storage-Objekten in Cloud Storage-Buckets beschränkt, die zu demselben Projekt gehören, das den Cluster enthält. Sie können eine nicht standardmäßige Zugriffsgrenze definieren, wenn Sie enable_an_interactive_session aktivieren.

  • Bei der persönlichen Cluster-Authentifizierung für Managed Service for Apache Spark werden Gastattribute von Compute Engine verwendet. Wenn die Funktion für Gastattribute deaktiviert ist, schlägt die persönliche Clusterauthentifizierung fehl.

Ziele

  • Managed Service for Apache Spark-Cluster mit aktiviertem Managed Service for Apache Spark-Clustercluster-Authentifizierung erstellen

  • Starten Sie die Weitergabe von Anmeldedaten an den Cluster.

  • Mit einem Jupyter-Notebook im Cluster können Sie Spark-Jobs ausführen, die sich mit Ihren Anmeldedaten authentifizieren.

Vorbereitung

Projekt erstellen

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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

  5. Installieren Sie die Google Cloud CLI.

  6. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  7. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. 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

  11. Installieren Sie die Google Cloud CLI.

  12. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  13. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init

Umgebung konfigurieren

Konfigurieren Sie die Umgebung in Cloud Shell oder einem lokalen Terminal:

Cloud Shell

  1. Starten Sie eine Cloud Shell-Sitzung.

Lokales Terminal

  1. Führen Sie gcloud auth login aus, um gültige Nutzeranmeldedaten zu erhalten.

Cluster erstellen und interaktive Sitzung aktivieren

  1. Suchen Sie in gcloud nach der E-Mail-Adresse Ihres aktiven Kontos.

    gcloud auth list --filter=status=ACTIVE --format="value(account)"
    

  2. einen Cluster erstellen

    gcloud dataproc clusters create CLUSTER_NAME \
        --properties=dataproc:dataproc.personal-auth.user=your-email-address \
        --enable-component-gateway \
        --optional-components=JUPYTER \
        --region=REGION
    

  3. Aktivieren Sie eine Sitzung zur Weitergabe der Anmeldedaten für den Cluster, um Ihre persönlichen Anmeldedaten für die Interaktion mit Google Cloud-Ressourcen zu verwenden.

    gcloud dataproc clusters enable-personal-auth-session \
        --region=REGION \
        CLUSTER_NAME
    

    Beispielausgabe:

    Injecting initial credentials into the cluster CLUSTER_NAME...done.
    Periodically refreshing credentials for cluster CLUSTER_NAME. This will continue running until the command is interrupted...
    

    1. Beispiel für eine herabgestufte Zugriffsgrenze: Im folgenden Beispiel wird eine persönliche Authentifizierungssitzung aktiviert, die restriktiver als die standardmäßige Zugriffsgrenze für Anmeldedaten ist. Der Zugriff auf den Staging-Bucket des Managed Service for Apache Spark-Clusters wird beschränkt. Weitere Informationen finden Sie unter Downscope mit Zugriffsgrenzen für Anmeldedaten .

       gcloud dataproc clusters enable-personal-auth-session \
          --project=PROJECT_ID \
          --region=REGION \
          --access-boundary=<(echo -n "{ \
       \"access_boundary\": { \
          \"accessBoundaryRules\": [{ \
             \"availableResource\": \"//storage.googleapis.com/projects/_/buckets/$(gcloud dataproc clusters describe --project=PROJECT_ID --region=REGION CLUSTER_NAME --format="value(config.configBucket)")\", \
             \"availablePermissions\": [ \
             \"inRole:roles/storage.objectViewer\", \
             \"inRole:roles/storage.objectCreator\", \
             \"inRole:roles/storage.objectAdmin\", \
             \"inRole:roles/storage.legacyBucketReader\" \
             ] \
          }] \
       } \
       }") \
          CLUSTER_NAME
      
  4. Lassen Sie den Befehl weiter laufen und wechseln Sie zu einem neuen Cloud Shell-Tab oder einer neuen Terminalsitzung. Der Client aktualisiert die Anmeldedaten, während der Befehl ausgeführt wird.

  5. Geben Sie Ctrl-C ein, um die Sitzung zu beenden.

Auf Jupyter im Cluster zugreifen

gcloud

  1. Clusterdetails abrufen
    gcloud dataproc clusters describe CLUSTER_NAME --region=REGION
    

    Die URL der Jupyter-Weboberfläche wird in den Clusterdetails aufgeführt.

    ...
    JupyterLab: https://UUID-dot-us-central1.dataproc.googleusercontent.com/jupyter/lab/
    ...
    
  2. Kopieren Sie die URL in Ihren lokalen Browser, um die Jupyter-Benutzeroberfläche zu starten.
  3. Prüfen, ob die persönliche Cluster-Authentifizierung erfolgreich war.
    1. Starten Sie ein Jupyter-Terminal.
    2. Führen Sie gcloud auth list aus
    3. Vergewissern Sie sich, dass Ihr Nutzername das einzige aktive Konto ist.
  4. Aktivieren Sie Jupyter in einem Jupyter-Terminal, um sich mit Kerberos zu authentifizieren und Spark-Jobs zu senden.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Führen Sie klist aus, um zu prüfen, ob Jupyter ein gültiges TGT-Objekt erhalten hat.
  5. Erstellen Sie in einem Juypter-Terminal mit der gcloud CLI eine rose.txt-Datei in einem Cloud Storage-Bucket in Ihrem Projekt.
    echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
    

    gcloud storage cp /tmp/rose.txt gs://bucket-name/rose.txt
    
    1. Kennzeichnen Sie die Datei als privat, sodass nur Ihr Nutzerkonto sie lesen oder schreiben kann. Jupyter verwendet Ihre persönlichen Anmeldedaten bei der Interaktion mit Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Prüfen Sie Ihren privaten Zugriff.
      gcloud storage objects describe gs://$BUCKET/rose.txt
      

      acl:
  6. email: $USER entity: user-$USER role: OWNER

Console

  1. Klicken Sie auf den Link Component Gateway Jupyter, um die Jupyter-Benutzeroberfläche zu starten.
  2. Prüfen, ob die persönliche Cluster-Authentifizierung erfolgreich war.
    1. Jupyter-Terminal starten
    2. Führen Sie gcloud auth list aus
    3. Vergewissern Sie sich, dass Ihr Nutzername das einzige aktive Konto ist.
  3. Aktivieren Sie Jupyter in einem Jupyter-Terminal, um sich mit Kerberos zu authentifizieren und Spark-Jobs zu senden.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Führen Sie klist aus, um zu prüfen, ob Jupyter ein gültiges TGT-Objekt erhalten hat.
  4. Erstellen Sie in einem Jupyter-Terminal mit der gcloud CLI eine rose.txt-Datei in einem Cloud Storage-Bucket in Ihrem Projekt.
    echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
    

    gcloud storage cp /tmp/rose.txt gs://bucket-name/rose.txt
    
    1. Kennzeichnen Sie die Datei als privat, sodass nur Ihr Nutzerkonto sie lesen oder schreiben kann. Jupyter verwendet Ihre persönlichen Anmeldedaten bei der Interaktion mit Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Prüfen Sie Ihren privaten Zugriff.
      gcloud storage objects describe gs://bucket-name/rose.txt
      
      acl:
  5. email: $USER entity: user-$USER role: OWNER

PySpark-Job über Jupyter ausführen

  1. Rufen Sie einen Ordner auf und erstellen Sie ein PySpark-Notebook.
  2. Führen Sie einen einfachen Wortcount-Job für die rose.txt-Datei aus, die Sie oben erstellt haben.

    text_file = sc.textFile("gs://bucket-name/rose.txt")
    counts = text_file.flatMap(lambda line: line.split(" ")) \
             .map(lambda word: (word, 1)) \
             .reduceByKey(lambda a, b: a + b)
    print(counts.collect())

    Spark kann die Datei rose.txt in Cloud Storage lesen, da sie mit Ihren Nutzeranmeldedaten ausgeführt wird.

    Sie können auch die Audit-Logs des Cloud Storage-Buckets prüfen, um zu verifizieren, ob der Job mit Ihrer Identität auf Cloud Storage zugreift. Weitere Informationen finden Sie unter Cloud-Audit-Logs mit Cloud Storage.

Bereinigen

  1. Löschen Sie den Managed Service for Apache Spark-Cluster.
    gcloud dataproc clusters delete CLUSTER_NAME --region=REGION