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 non par défaut lorsque vous activez une session interactive.
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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataproc API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataproc API.
- Install the Google Cloud CLI.
-
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
- Démarrez une session Cloud Shell.
Terminal local
- Exécutez la commande
gcloud auth login
pour obtenir des identifiants utilisateur valides.
Créer un cluster et activer une session interactive
Recherchez l'adresse e-mail de votre compte actif dans gcloud.
gcloud auth list --filter=status=ACTIVE --format="value(account)"
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
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...
- 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. 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
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.
Saisissez
Ctrl-C
pour mettre fin à la session.
Accéder à Jupyter sur le cluster
gcloud
- 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/ ...
- Copiez l'URL dans votre navigateur local pour lancer l'interface utilisateur de Jupyter.
- Vérifiez que l'authentification personnelle de cluster a réussi.
- Démarrez un terminal Jupyter.
- Exécutez la commande
gcloud auth list
. - Vérifiez que votre nom d'utilisateur est le seul compte actif.
- 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)
- Exécutez la commande
klist
pour vérifier que Jupyter a obtenu un ticket TGT valide.
- Exécutez la commande
- 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
- 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
- Vérifiez que vous disposez d'un accès privé.
gcloud storage objects describe gs://$BUCKET/rose.txt
acl:
- 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.
- email: $USER entity: user-$USER role: OWNER
Console
- Pour lancer l'interface utilisateur de Jupyter, cliquez sur le lien Passerelle des composants Jupyter.
- Vérifiez que l'authentification personnelle de cluster a réussi.
- Démarrez un terminal Jupyter.
- Exécutez la commande
gcloud auth list
. - Vérifiez que votre nom d'utilisateur est le seul compte actif.
- 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)
- Exécutez la commande
klist
pour vérifier que Jupyter a obtenu un ticket TGT valide.
- Exécutez la commande
- Dans un terminal Jupyter, utilisez la CLI gcloud 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
- 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
- Vérifiez que vous disposez d'un accès privé.
gcloud storage objects describe gs://bucket-name/rose.txt
acl:
- 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.
- email: $USER entity: user-$USER role: OWNER
Exécuter une tâche PySpark depuis Jupyter
- Accédez à un dossier, puis créez un notebook PySpark.
Exécutez une tâche simple de décompte de mots sur le fichier
rose.txt
créé ci-dessus. Spark peut lire le fichiertext_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())
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
- Supprimez le cluster Dataproc.
gcloud dataproc clusters delete cluster-name --region=region