L'architecture mutualisée sécurisée basée sur un compte de service Dataproc vous permet de partager un cluster avec plusieurs utilisateurs, avec un ensemble de comptes utilisateur mappés à des comptes de service lors de la création du cluster. Les utilisateurs peuvent envoyer des charges de travail interactives, telles que des notebooks Jupyter, à des kernels exécutés sur le cluster mutualisé avec des environnements utilisateur isolés.
Lorsqu'un utilisateur envoie une tâche au cluster mutualisé :
La tâche s'exécute en tant qu'utilisateur d'OS spécifique avec un compte principal Kerberos spécifique.
La tâche accède aux Google Cloud ressources à l'aide d'un compte de service mappé.
Ce document vous explique comment créer un cluster mutualisé Dataproc, puis comment lancer et connecter un notebook Jupyter à un kernel PySpark exécuté sur le cluster.
Remarques et limites
Lorsque vous créez un cluster mutualisé :
Le cluster n'est disponible que pour les utilisateurs disposant d'un compte Google et de comptes de service mappés. Les groupes Google ne peuvent pas être mappés. Les utilisateurs non mappés ne peuvent pas exécuter de tâches sur le cluster.
Kerberos est activé et configuré sur le cluster pour permettre une communication sécurisée au sein des clusters. L'authentification de l'utilisateur final via Kerberos n'est pas compatible.
L'accès SSH direct au cluster et les fonctionnalités de Compute Engine, telles que l'exécution de scripts de démarrage sur les VM de cluster, sont bloqués. Par ailleurs, les tâches ne peuvent pas être exécutées avec des privilèges
sudo.
Créer un cluster mutualisé
Vous activez la fonctionnalité mutualisée lorsque vous créez un cluster Dataproc.
Console
Créez un cluster Dataproc à l'aide de la Google Cloud console, comme suit :
Dans la Google Cloud console, accédez à la page Dataproc Créer un cluster Dataproc sur Compute Engine : Créer un cluster Dataproc sur Compute Engine
Dans le panneau Configurer le cluster :
- Sous Composants :
- Sous Passerelle des composants, sélectionnez Activer la passerelle des composants.
- Sous Composants facultatifs, sélectionnez Jupyter Kernel Gateway pour permettre à plusieurs utilisateurs de connecter leurs notebooks Jupyter au cluster mutualisé.
- Sous Composants :
Dans le panneau Personnaliser le cluster :
Sous Propriétés du cluster :
Pour autoriser l'ajout ou la suppression d'utilisateurs mutualisés sans recréer le cluster (consultez Mettre à jour les utilisateurs d'un cluster mutualisé), cliquez sur Ajouter des propriétés, puis ajoutez le préfixe
dataproc, la propriétédataproc.dynamic.multi.tenancy.enabled, et définissez sa valeur surtrue.Recommandation : Étant donné que YARN consomme des ressources de cluster importantes pour chaque kernel de notebook exécuté sur un cluster mutualisé, ajoutez des propriétés Spark et YARN pour augmenter l'allocation de ressources.
Exemple :
Préfixe Clé Valeur spark spark.driver.memory 5g spark spark.executor.memory 5g spark spark.executor.cores 2 capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0,5
Dans le panneau Gérer la sécurité :
- Sous Accès au projet, sélectionnez Active le champ d'application Cloud Platform pour ce cluster.
- Sous Architecture mutualisée sécurisée:
- Sélectionnez Activer.
- Sous Mappage mutualisé :
- Cliquez sur Ajouter un mappage mutualisé pour ajouter des mappages de comptes utilisateur à des comptes de service.
Confirmez ou saisissez d'autres paramètres de cluster (consultez Créer un cluster Dataproc à l'aide de la Google Cloud console).
Cliquez sur Créer.
gcloud
Utilisez le gcloud dataproc clusters create command avec l'
--secure-multi-tenancy-user-mapping
option pour spécifier une liste de mappages de comptes utilisateur à des comptes de service.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --secure-multi-tenancy-user-mapping=USER_MAPPINGS: \ --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true" \ --service-account=CLUSTER_SERVICE_ACCOUNT@iam.gserviceaccount.com \ --scopes=https://www.googleapis.com/auth/iam \ --optional-components=JUPYTER_KERNEL_GATEWAY \ --enable-component-gateway \ other args ...
Remarques :
USER_MAPPINGS : spécifiez une liste de mappages de comptes utilisateur à des comptes de service, séparés par une virgule.
Utiliser un fichier de mappage YAML : au lieu d'utiliser l'option--secure-multi-tenancy-user-mapping=UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com,UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com,UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
--secure-multi-tenancy-user-mappingpour spécifier les mappages de comptes utilisateur à des comptes de service, vous pouvez utiliser l'option--identity-config-filepour spécifier un fichier YAML local ou Cloud Storage contenant les mappages. Chaque ligne du fichier de mappage mappe un compte utilisateur à un compte de service. La première ligne contient l'en-tête--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
user_service_account_mapping:.user_service_account_mapping: UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
--properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true": cette propriété permet d'ajouter ou de supprimer des utilisateurs de cluster mutualisé sans recréer le cluster (consultez Mettre à jour les utilisateurs d'un cluster mutualisé).Recommandation : Étant donné que YARN consomme des ressources de cluster importantes pour chaque kernel de notebook exécuté sur un cluster mutualisé, ajoutez des propriétés Spark et YARN pour augmenter l'allocation de ressources.
Exemple :
--properties=" \ spark:spark.driver.memory=5g,\ spark:spark.executor.memory=5g,\ spark:spark.executor.cores=200, \ capacity-scheduler:yarn.scheduler.capacity.maximum-am-resource-percent=0.5"
CLUSTER_SERVICE_ACCOUNT (facultatif) : vous pouvez utiliser l'option
--service-account flagpour spécifier un compte de service de VM personnalisé pour le cluster. Si vous omettez cette option, le compte de service de VM de cluster par défaut,PROJECT_NUMBER-compute@developer.gserviceaccount.com, est utilisé.Recommandation : Utilisez des comptes de service de cluster différents pour différents clusters afin de permettre à chaque compte de service de VM de cluster d'emprunter l'identité d'un groupe limité de comptes de service utilisateur mappés.
--scopes=https://www.googleapis.com/auth/iamest nécessaire pour que le compte de service du cluster puisse effectuer l'emprunt d'identité.--enable-component-gatewayet--optional-components=JUPYTER_KERNEL_GATEWAY: l'activation de la passerelle des composants Dataproc et de la passerelle des kernels Jupyter permet à plusieurs utilisateurs de connecter leurs notebooks Jupyter au cluster mutualisé.
API
Utilisez le SecurityConfig.IdentityConfig.userServiceAccountMapping field
pour spécifier une liste de mappages de comptes utilisateur à des comptes de service.
Accorder des autorisations Identity and Access Management
Pour connecter des notebooks utilisateur à des kernels de notebook exécutés sur un cluster mutualisé , les utilisateurs mappés, les comptes de service mappés et le compte de service de VM de cluster doivent disposer des autorisations IAM nécessaires pour accéder aux ressources.
Autorisations utilisateur mappées
Chaque utilisateur mappé doit disposer desdataproc.clusters.get et dataproc.clusters.use
autorisations, qui sont nécessaires pour que l'utilisateur puisse accéder aux kernels de notebook
exécutés sur le cluster mutualisé et s'y connecter. Vous pouvez accorder le
rôle Éditeur Dataproc (roles/dataproc.editor),
qui contient ces autorisations (consultez Accorder un seul rôle IAM),
ou créer un rôle personnalisé avec ces
autorisations.
Autorisations de compte de service mappées
Chaque compte de service mappé doit disposer des autorisations requises par l'application de notebook de l'utilisateur mappé, telles que l'accès à un bucket Cloud Storage ou à une table BigQuery (consultez Gérer l'accès aux comptes de service).
Autorisations de compte de service de VM
Le compte de service de VM du cluster mutualisé
doit disposer de l'autorisation iam.serviceAccounts.getAccessToken
sur chaque compte de service mappé. Vous pouvez accorder le
rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator), qui contient cette autorisation (consultez Gérer l'accès aux comptes de service),
ou créer un rôle personnalisé avec cette autorisation.
Pour en savoir plus sur les autres rôles de compte de service de VM, consultez Compte de service de VM Dataproc.
Connecter des notebooks Jupyter à un kernel de cluster mutualisé
Les utilisateurs de cluster mutualisé mappés peuvent connecter leur notebook Jupyter Vertex AI Workbench ou géré par l'utilisateur aux kernels installés sur le cluster mutualisé.
Notebook Vertex AI
Pour créer et connecter un notebook Jupyter au cluster mutualisé, procédez comme suit :
- Créer une instance Vertex AI Workbench.
- Dans l'onglet "Instances Workbench", cliquez sur le lien "Ouvrir JupyterLab" pour votre instance.
- Sous Notebooks de cluster Dataproc, cliquez sur la fiche
PySpark (cluster YARN) sur
MULTI_TENANCY_CLUSTER_NAMEpour vous connecter et lancer un nouveau notebook Jupyter PySpark.
Notebook géré par l'utilisateur
Pour créer et connecter un notebook Jupyter géré par l'utilisateur à votre cluster mutualisé Dataproc, suivez les étapes pour installer l'extension JupyterLab sur votre VM gérée par l'utilisateur.
Mettre à jour les utilisateurs d'un cluster mutualisé (bêta)
Si vous définissez la propriété de cluster dataproc:dataproc.dynamic.multi.tenancy.enabled
sur true lorsque vous créez un cluster mutualisé,
vous pouvez ajouter, supprimer ou remplacer des utilisateurs de cluster mutualisé après la création du cluster.
Ajouter des utilisateurs
La commande de mise à jour suivante utilise l'option --add-user-mappings pour ajouter deux nouveaux
mappages de comptes utilisateur à des comptes de service au cluster mutualisé sécurisé.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --add-user-mappings=new-user1@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com,new-user2@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com
Supprimer des utilisateurs
La commande de mise à jour suivante utilise l'option --remove-user-mappings pour supprimer deux
utilisateurs du cluster mutualisé. L'option accepte les
comptes utilisateur des utilisateurs à supprimer.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --remove-user-mappings=UserB@my-company.com,UserC@my-company.com
Remplacer des utilisateurs
Vous pouvez utiliser la commande de mise à jour avec l'option --identity-config-file flag
pour remplacer l'ensemble d'utilisateurs existant par un nouvel ensemble. Cette option est utile pour
ajouter et supprimer des utilisateurs avec une seule commande de mise à jour.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --identity-config-file=identity-config.yaml
Remarques :
--identity-config-file: spécifiez un fichier YAML local ou Cloud Storage contenant les nouveaux mappages de comptes utilisateur à des comptes de service. Chaque ligne du fichier de mappage mappe un compte utilisateur à un compte de service. La première ligne contient l'en-tête--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
user_service_account_mapping:.user_service_account_mapping: new-user1@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com new-user2@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com