Authentification personnelle de cluster Dataproc

Lorsque vous créez un cluster Dataproc, vous pouvez activer l'authentification personnelle de cluster Dataproc afin d'autoriser les charges de travail interactives du cluster à s'exécuter en toute sécurité en tant qu'identité d'utilisateur. Cela signifie que vous vous authentifiez vous-même au lieu d'utiliser un compte de service du cluster pour interagir avec d'autres ressources Google Cloud, telles que Cloud Storage.

Remarques

  • Lorsque vous créez un cluster avec la fonctionnalité d'authentification personnelle activée, il ne peut être utilisé que par votre identité. Les autres utilisateurs ne peuvent pas exécuter de tâches ni accéder aux points de terminaison de la passerelle des composants sur le cluster.

  • Les clusters sur lesquels l'authentification personnelle de cluster est activée bloquent l'accès SSH et les fonctionnalités de Compute Engine telles que les scripts de démarrage sur toutes les VM du cluster.

  • Les clusters sur lesquels l'authentification personnelle de cluster est activée activent et configurent Kerberos sur le cluster pour permettre une communication sécurisée au sein des clusters. Cependant, toutes les identités Kerberos du cluster interagissent avec les ressources Google Cloud en tant qu'utilisateur unique.

  • L'authentification personnelle de cluster Dataproc n'est actuellement pas compatible avec les workflows Dataproc.

  • L'authentification personnelle de cluster Dataproc est uniquement destinée aux tâches interactives exécutées par un seul utilisateur. Les tâches et opérations de longue durée doivent configurer et utiliser une identité de compte de service appropriée.

  • Les identifiants propagés sont limités à un champ d'application avec une limite d'accès aux identifiants. La limite d'accès par défaut est limitée à la lecture et à l'écriture d'objets Cloud Storage dans des buckets Cloud Storage appartenant au même projet que le cluster. Vous pouvez définir une limite d'accès non par défaut lorsque vous enable_an_interactive_session.

Objectifs

  • Créer un cluster Dataproc sur lequel l'authentification personnelle de cluster Dataproc est activée

  • Démarrer la propagation des identifiants sur le cluster

  • Utiliser un notebook Jupyter sur le cluster pour exécuter des tâches Spark qui s'authentifient avec vos identifiants

Avant de commencer

Créer un projet

  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

Configurer l'environnement

Configurez l'environnement à partir de Cloud Shell ou d'un terminal local :

Cloud Shell

  1. Démarrez une session Cloud Shell.

Terminal local

  1. Exécutez la commande gcloud auth login pour obtenir des identifiants utilisateur valides.

Créer un cluster et activer une session interactive

  1. Recherchez l'adresse e-mail de votre compte actif dans gcloud.

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

  2. Créez un 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. Activez une session de propagation des identifiants pour que le cluster commence à utiliser vos identifiants personnels lorsqu'il interagit avec des ressources Google Cloud.

    gcloud dataproc clusters enable-personal-auth-session \
        --region=region \
        cluster-name
    

    Exemple de résultat :

    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. Exemple de limite d'accès à champ d'application limité : l'exemple suivant active une session d'authentification personnelle plus restrictive que la limite d'accès aux identifiants à champ d'application limité par défaut. Il limite l'accès au bucket de préproduction du cluster Dataproc (pour en savoir plus, consultez la section Définir la portée avec les limites d'accès des identifiants ).
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. Laissez la commande s'exécuter, et basculez vers un nouvel onglet ou une nouvelle session de terminal Cloud Shell. Le client actualise les identifiants pendant l'exécution de la commande.

  2. Saisissez Ctrl-C pour mettre fin à la session.

Accéder à Jupyter sur le cluster

gcloud

  1. Obtenez les détails du cluster.
    gcloud dataproc clusters describe cluster-name --region=region
    

    L'URL de l'interface Web Jupyter est répertoriée dans les détails du cluster.

    ...
    JupyterLab: https://UUID-dot-us-central1.dataproc.googleusercontent.com/jupyter/lab/
    ...
    
  2. Copiez l'URL dans votre navigateur local pour lancer l'interface utilisateur de Jupyter.
  3. Vérifiez que l'authentification personnelle de cluster a réussi.
    1. Démarrez un terminal Jupyter.
    2. Exécutez la commande gcloud auth list.
    3. Vérifiez que votre nom d'utilisateur est le seul compte actif.
  4. Dans un terminal Jupyter, activez Jupyter pour vous authentifier avec Kerberos et envoyer des tâches Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Exécutez la commande klist pour vérifier que Jupyter a obtenu un ticket TGT valide.
  5. Dans un terminal Jupyter, utilisez gcloud CLI pour créer un fichier rose.txt dans un bucket Cloud Storage de votre projet.
    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. Marquez le fichier comme privé afin que seul votre compte utilisateur puisse y effectuer des opérations de lecture et d'écriture. Jupyter utilise vos identifiants personnels pour interagir avec Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Vérifiez que vous disposez d'un accès privé.
      gcloud storage objects describe gs://$BUCKET/rose.txt
      

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

Console

  1. Pour lancer l'interface utilisateur de Jupyter, cliquez sur le lien Passerelle des composants Jupyter.
  2. Vérifiez que l'authentification personnelle de cluster a réussi.
    1. Démarrez un terminal Jupyter.
    2. Exécutez la commande gcloud auth list.
    3. Vérifiez que votre nom d'utilisateur est le seul compte actif.
  3. Dans un terminal Jupyter, activez Jupyter pour vous authentifier avec Kerberos et envoyer des tâches Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Exécutez la commande klist pour vérifier que Jupyter a obtenu un ticket TGT valide.
  4. Dans un terminal Jupyter, utilisez gcloud CLI pour créer un fichier rose.txt dans un bucket Cloud Storage de votre projet.
    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. Marquez le fichier comme privé afin que seul votre compte utilisateur puisse y effectuer des opérations de lecture et d'écriture. Jupyter utilise vos identifiants personnels pour interagir avec Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Vérifiez que vous disposez d'un accès privé.
      gcloud storage objects describe gs://bucket-name/rose.txt
      
      acl:
  5. email: $USER entity: user-$USER role: OWNER

Exécuter une tâche PySpark depuis Jupyter

  1. Accédez à un dossier, puis créez un notebook PySpark.
  2. Exécutez une tâche simple de décompte de mots sur le fichier rose.txt créé ci-dessus.

    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 peut lire le fichier rose.txt dans Cloud Storage, car il s'exécute avec vos identifiants utilisateur.

    Vous pouvez également consulter les journaux d'audit du bucket Cloud Storage pour vérifier que la tâche accède à Cloud Storage avec votre identité (pour en savoir plus, consultez la page Cloud Audit Logs avec Cloud Storage).

Nettoyage

  1. Supprimez le cluster Dataproc.
    gcloud dataproc clusters delete cluster-name --region=region