Autenticazione cluster Dataproc personale

Quando crei un cluster Dataproc, puoi abilitare l'autenticazione del cluster personale Dataproc per consentire l'esecuzione sicura dei carichi di lavoro interattivi nel cluster con l'identità dell'utente. Ciò significa che le interazioni con altre risorse Google Cloud, come Cloud Storage, verranno autenticate come se stessi invece dell'account di servizio del cluster.

Considerazioni

  • Quando crei un cluster con autenticazione del cluster personale abilitata, il cluster sarà utilizzabile solo dalla tua identità. Gli altri utenti non saranno in grado di eseguire job sul cluster o accedere agli endpoint Gateway gateway sul cluster.

  • I cluster con autenticazione a cluster personale hanno abilitato l'accesso SSH e le funzionalità di Compute Engine, come gli script di avvio, su tutte le VM nel cluster.

  • I cluster con autenticazione personale dei cluster abilitano e configurano automaticamente Kerberos sul cluster per una comunicazione intra-cluster sicura. Tuttavia, tutte le identità Kerberos sul cluster interagiranno con le risorse Google Cloud dello stesso utente.

  • L'autenticazione cluster personale di Dataproc attualmente non supporta i flussi di lavoro Dataproc.

  • L'autenticazione cluster personale di Dataproc è destinata solo ai job interattivi eseguiti da un singolo utente (umano). Le operazioni e i job a lunga esecuzione devono configurare e utilizzare un'identità dell'account di servizio appropriata.

  • Le credenziali propagate sono limitate all'ambito con un limite di accesso alle 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.

Obiettivi

  • Creare un cluster Dataproc con l'autenticazione cluster personale di Dataproc abilitata.

  • Avvia la propagazione delle credenziali nel cluster.

  • Utilizza un blocco note Jupyter nel cluster per eseguire job Spark che effettuano l'autenticazione con le tue credenziali.

Prima di iniziare

Crea un progetto

  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

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. Creare un cluster.

    gcloud dataproc clusters create cluster-name \
        --properties=dataproc:dataproc.personal-auth.user=your-email-address \
        --enable-component-gateway \
        --optional-components=ANACONDA,JUPYTER,ZEPPELIN \
        --region=region
    

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

    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 limitato: l'esempio seguente consente una sessione di autenticazione personale più restrittiva rispetto al limite di accesso con credenziale limitata. Limita l'accesso al bucket di gestione temporanea del cluster Dataproc. (consulta la sezione Downscope con i limiti di accesso alle credenziali per ulteriori informazioni).
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. Tieni in esecuzione il comando e passa a una nuova scheda o sessione del terminale Cloud Shell. Il client aggiornerà le credenziali mentre il comando è in esecuzione.

  2. Digita Ctrl-C per terminare la sessione.

L'esempio seguente crea un cluster con un confine di accesso alle credenziali limitato.

Accedi a Jupyter nel cluster

gcloud

  1. Visualizza 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 del cluster personale sia andata a buon fine.
    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, abilitare Jupyter per eseguire l'autenticazione con Kerberos e inviare i job Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Esegui klist per verificare che Jupyter abbia ottenuto un TGT valido.
  5. In un terminale Juypter, utilizza gsutil 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
    

    gsutil 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 scriverci. Jupyter utilizzerà le tue credenziali personali durante l'interazione con Cloud Storage.
      gsutil acl set private gs://bucket-name/rose.txt
      
    2. Verifica il tuo accesso privato.
      gsutil acl get gs://$BUCKET/rose.txt
      

      [
      {
      "email": "$USER",
      "entity": "user-$USER",
      "role": "OWNER"
      }
      ]
      

Console

  1. Fai clic sul link Componente Gateway Jupyter per avviare l'interfaccia utente di Jupyter.
  2. Verifica che l'autenticazione del cluster personale sia andata a buon fine.
    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, abilitare Jupyter per eseguire l'autenticazione con Kerberos e inviare i job Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Esegui klist per verificare che Jupyter abbia ottenuto un TGT valido.
  4. In un terminale Jupyter, utilizza gsutil 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
    

    gsutil 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 scriverci. Jupyter utilizzerà le tue credenziali personali durante l'interazione con Cloud Storage.
      gsutil acl set private gs://bucket-name/rose.txt
      
    2. Verifica il tuo accesso privato.
      gsutil acl get gs://bucket-name/rose.txt
      
      [
      {
      "email": "$USER",
      "entity": "user-$USER",
      "role": "OWNER"
      }
      ]
      

Eseguire un job PySpark da Jupyter

  1. Vai a una cartella, quindi crea un blocco note PySpark.
  2. Esegui un job di conteggio parole di base sul file rose.txt creato in precedenza.

    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 gli audit log del bucket Cloud Storage per verificare che il job stia accedendo a Cloud Storage con la tua identità (per ulteriori informazioni, consulta gli audit log di Cloud con Cloud Storage).

Esegui la pulizia

  1. Elimina il cluster Dataproc.
    gcloud dataproc clusters delete cluster-name --region=region