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'heure actuelle, l'authentification de cluster personnel Dataproc ne sont compatibles 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.

  • Le champ d'application des identifiants propagés est limité 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  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éer 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 à l'échelle inférieure: 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. Elle restreint l'accès aux du cluster Dataproc bucket de préproduction (consultez Réduction du champ d'application avec des 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 un accès limité aux identifiants limite.

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 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 l'authentification avec Kerberos et envoyer des jobs 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 la gcloud CLI pour créer un 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 utilisera vos identifiants personnels pour interagir avec Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Validez votre 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 l'authentification avec Kerberos et envoyer des jobs 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 la gcloud CLI pour créer un 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 utilisera vos identifiants personnels pour interagir avec Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Validez votre 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 basique de comptage 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 aussi vérifier le bucket Cloud Storage Journaux d'audit pour vérifier que la tâche accède à Cloud Storage avec votre identité (consultez Cloud Audit Logs avec Cloud Storage).

Nettoyage

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