Persönliche Cluster Dataproc-Authentifizierung

Beim Erstellen eines Dataproc-Clusters können Sie die Dataproc-Cluster-Clusterauthentifizierung 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 Clusterdienstkonto 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.

  • Die Dataproc-Personal-Cluster-Authentifizierung unterstützt derzeit keine Dataproc-Workflows.

  • Die Dataproc-Clustercluster-Authentifizierung 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.

Ziele

  • Dataproc-Cluster mit aktiviertem Dataproc-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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Dataproc API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    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. Erstellen Sie einen Cluster.

    gcloud dataproc clusters create cluster-name \
        --properties=dataproc:dataproc.personal-auth.user=your-email-address \
        --enable-component-gateway \
        --optional-components=ZEPPELIN \
        --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 wird auf den Staging-Bucket des Dataproc-Clusters 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
  1. 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.

  2. 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 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/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 Dataproc-Cluster.
    gcloud dataproc clusters delete cluster-name --region=region