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 de cluster personnel 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 limité à l'aide d'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 les buckets Cloud Storage appartenant au même projet que celui contenant le cluster. Vous pouvez définir une limite d'accès autre que celle 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. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activez l'API Dataproc

    Activer l'API

  5. Installez Google Cloud CLI.
  6. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  7. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  8. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  9. Activez l'API Dataproc

    Activer l'API

  10. Installez Google Cloud CLI.
  11. Pour initialiser gcloudCLI, exécutez la commande suivante :

    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=ANACONDA,JUPYTER,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 par défaut aux identifiants à champ d'application limité. Il restreint l'accès au bucket de préproduction du cluster Dataproc (consultez la section Downscope avec limites d'accès aux identifiants pour en savoir plus).
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.

L'exemple suivant crée un cluster avec une limite d'accès aux identifiants à champ d'application réduit.

Accéder à Jupyter sur le cluster

gcloud

  1. Obtenir 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 du cluster personnel 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, autorisez Jupyter à s'authentifier auprès de Kerberos et à envoyer des tâches Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Exécutez klist pour vérifier que Jupyter a obtenu un TGT valide.
  5. Dans un terminal Jupyter, utilisez le gsutil 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
    

    gsutil 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.
      gsutil acl set private gs://bucket-name/rose.txt
      
    2. Vérifiez votre accès privé.
      gsutil acl get gs://$BUCKET/rose.txt
      

      [
      {
      "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 du cluster personnel 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, autorisez Jupyter à s'authentifier auprès de Kerberos et à envoyer des tâches Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Exécutez klist pour vérifier que Jupyter a obtenu un TGT valide.
  4. Dans un terminal Jupyter, utilisez le gsutil 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
    

    gsutil 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.
      gsutil acl set private gs://bucket-name/rose.txt
      
    2. Vérifiez votre accès privé.
      gsutil acl get gs://bucket-name/rose.txt
      
      [
      {
      "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 basique de décompte de mots sur le fichier rose.txt que vous avez 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 le job accède à Cloud Storage avec votre identité (consultez la section Journaux d'audit Cloud avec Cloud Storage pour plus d'informations).

Nettoyage

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