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 pourront 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 Clouden tant qu'utilisateur unique.

  • Les clusters sur lesquels l'authentification personnelle de cluster est activée ne sont pas compatibles avec les images personnalisées.

  • L'authentification personnelle de cluster Dataproc n'est 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 par 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 celui contenant le cluster. Vous pouvez définir une limite d'accès non définie par défaut lorsque vous enable_an_interactive_session.

  • L'authentification personnelle de cluster Dataproc utilise les attributs invité Compute Engine. Si la fonctionnalité d'attributs d'invité est désactivée, l'authentification personnelle du cluster échouera.

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. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the Dataproc API.

    Enable the API

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. 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=JUPYTER \
          --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 Réduire le champ d'application avec les limites d'accès aux 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
        
    4. 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.

    5. 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