Autenticazione cluster personale

Quando crei un cluster Managed Service for Apache Spark, puoi abilitare l'autenticazione cluster personale di Managed Service for Apache Spark per consentire l'esecuzione sicura dei workload interattivi sul cluster con la tua identità utente. Ciò significa che le interazioni con altre Google Cloud risorse, come Cloud Storage, verranno autenticate come se fossi tu, anziché l'account di servizio del cluster.

Considerazioni

  • Quando crei un cluster con l'autenticazione cluster personale abilitata, il cluster sarà utilizzabile solo dalla tua identità. Gli altri utenti non potranno eseguire job sul cluster o accedere agli endpoint del gateway dei componenti sul cluster.

  • I cluster con l'autenticazione cluster personale abilitata bloccano l'accesso SSH e le funzionalità di Compute Engine, come gli script di avvio su tutte le VM del cluster.

  • I cluster con l'autenticazione cluster personale abilitata abilitano e configurano automaticamente Kerberos sul cluster per una comunicazione sicura all'interno del cluster. Tuttavia, tutte le identità Kerberos sul cluster interagiranno con Google Cloud le risorse come lo stesso utente.

  • I cluster con l'autenticazione cluster personale abilitata non supportano le immagini personalizzate.

  • L'autenticazione cluster personale di Managed Service for Apache Spark non supporta i workflow di Managed Service for Apache Spark workflows.

  • L'autenticazione cluster personale di Managed Service for Apache Spark è destinata solo ai job interattivi eseguiti da un singolo utente (persona). I job e le operazioni a lunga esecuzione devono configurare e utilizzare un'identità dell'account di servizio appropriata.

  • Le credenziali propagate vengono ridotte con un limite di accesso con credenziali. Il limite di accesso predefinito è limitato alla lettura e alla scrittura di oggetti Cloud Storage nei bucket Cloud Storage di proprietà dello stesso progetto che contiene il cluster. Puoi definire un limite di accesso non predefinito quando enable_an_interactive_session.

  • L'autenticazione cluster personale di Managed Service for Apache Spark utilizza gli attributi guest di Compute Engine . Se la funzionalità degli attributi guest è disabilitata, l'autenticazione cluster personale non riuscirà.

Obiettivi

  • Crea un cluster Managed Service for Apache Spark con l'autenticazione cluster personale di Managed Service for Apache Spark abilitata.

  • Avvia la propagazione delle credenziali al cluster.

  • Utilizza un notebook Jupyter sul cluster per eseguire job Spark che si autenticano con le tue credenziali.

Prima di iniziare

Crea un progetto

  1. Accedi al tuo Google Cloud account. Se non hai mai utilizzato Google Cloud, crea un account per valutare il rendimento dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per eseguire, testare ed eseguire il deployment dei workload.
  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. Installa Google Cloud CLI.

  6. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  7. Per inizializzare gcloud CLI, esegui questo comando:

    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. Installa Google Cloud CLI.

  12. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  13. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init

Configura l'ambiente

Configura l'ambiente da Cloud Shell o da un terminale locale:

Cloud Shell

  1. Avvia una sessione di Cloud Shell.

Terminale locale

  1. Esegui gcloud auth login per ottenere credenziali utente valide.

Crea un cluster e abilita una sessione interattiva

  1. Trova l'indirizzo email del tuo account attivo in gcloud.

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

  2. Crea un cluster.

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

  3. Abilita una sessione di propagazione delle credenziali per il cluster per iniziare a utilizzare le tue credenziali personali quando interagisci con Google Cloud risorse.

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

    Esempio di output:

    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. Esempio di limite di accesso con ambito ridotto: l'esempio seguente abilita una sessione di autenticazione personale più restrittiva del limite di accesso con credenziali con ambito ridotto predefinito. Limita l'accesso a l bucket di gestione temporanea del cluster Managed Service for Apache Spark (per ulteriori informazioni, vedi Riduzione dell'ambito mediante limiti di accesso con credenziali ).

       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. Mantieni il comando in esecuzione e passa a una nuova scheda di Cloud Shell o a una sessione del terminale. Il client aggiornerà le credenziali durante l'esecuzione del comando.

  5. Digita Ctrl-C per terminare la sessione.

Accedi a Jupyter sul cluster

gcloud

  1. Recupera i dettagli del cluster.
    gcloud dataproc clusters describe CLUSTER_NAME --region=REGION
    

    L'URL dell'interfaccia web di Jupyter è elencato nei dettagli del cluster.

    ...
    JupyterLab: https://UUID-dot-us-central1.dataproc.googleusercontent.com/jupyter/lab/
    ...
    
  2. Copia l'URL nel browser locale per avviare l'interfaccia utente di Jupyter.
  3. Verifica che l'autenticazione cluster personale sia riuscita.
    1. Avvia un terminale Jupyter.
    2. Esegui gcloud auth list
    3. Verifica che il tuo nome utente sia l'unico account attivo.
  4. In un terminale Jupyter, abilita Jupyter per l'autenticazione con Kerberos e invia job Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab managed-spark/$(hostname -f)
    
    1. Esegui klist per verificare che Jupyter abbia ottenuto un TGT valido.
  5. In un terminale Jupyter, utilizza gcloud CLI per creare un file rose.txt in un bucket Cloud Storage nel tuo progetto.
    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. Contrassegna il file come privato in modo che solo il tuo account utente possa leggerlo o scriverlo. Jupyter utilizzerà le tue credenziali personali quando interagisce con Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Verifica l'accesso privato.
      gcloud storage objects describe gs://$BUCKET/rose.txt
      

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

Console

  1. Fai clic sul link Jupyter del gateway dei componenti per avviare l'interfaccia utente di Jupyter.
  2. Verifica che l'autenticazione cluster personale sia riuscita.
    1. Avvia un terminale Jupyter
    2. Esegui gcloud auth list
    3. Verifica che il tuo nome utente sia l'unico account attivo.
  3. In un terminale Jupyter, abilita Jupyter per l'autenticazione con Kerberos e invia job Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab managed-spark/$(hostname -f)
    
    1. Esegui klist per verificare che Jupyter abbia ottenuto un TGT valido.
  4. In un terminale Jupyter, utilizza gcloud CLI per creare un file rose.txt in un bucket Cloud Storage nel tuo progetto.
    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. Contrassegna il file come privato in modo che solo il tuo account utente possa leggerlo o scriverlo. Jupyter utilizzerà le tue credenziali personali quando interagisce con Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Verifica l'accesso privato.
      gcloud storage objects describe gs://bucket-name/rose.txt
      
      acl:
  5. email: $USER entity: user-$USER role: OWNER

Esegui un job PySpark da Jupyter

  1. Vai a una cartella, quindi crea un notebook PySpark.
  2. Esegui un job di conteggio delle parole di base sul file rose.txt che hai creato sopra.

    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 è in grado di leggere il file rose.txt in Cloud Storage perché viene eseguito con le tue credenziali utente.

    Puoi anche controllare i log di audit dei bucket Cloud Storage per verificare che il job acceda a Cloud Storage con la tua identità (per ulteriori informazioni, vedi Cloud Audit Logs con Cloud Storage).

Esegui la pulizia

  1. Elimina il cluster Managed Service for Apache Spark.
    gcloud dataproc clusters delete CLUSTER_NAME --region=REGION