Créer un cluster mutualisé à l'aide de comptes de service

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 un job au cluster mutualisé :

  • Le job s'exécute en tant qu'utilisateur d'OS spécifique avec un compte principal Kerberos spécifique.

  • Le job accède aux ressources Google Cloud à l'aide d'un compte de service mappé.

Ce document vous explique comment créer un cluster Dataproc multitenant, puis comment lancer et connecter un notebook Jupyter à un noyau 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 de comptes Google disposant 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 des utilisateurs finaux via Kerberos n'est pas prise en charge.

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

  • Les workflows Dataproc ne sont pas compatibles.

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 console Google Cloud , comme suit :

  1. Dans la console Google Cloud , accédez à la page Dataproc Créer un cluster Dataproc sur Compute Engine : Créer un cluster Dataproc sur Compute Engine

  2. Dans le panneau Configurer le cluster :

    1. Sous Composants :
      1. Sous Passerelle des composants, sélectionnez Activer la passerelle des composants.
      2. Sous Composants facultatifs, sélectionnez Jupyter Kernel Gateway pour permettre à plusieurs utilisateurs de connecter leurs notebooks Jupyter au cluster mutualisé.
  3. Dans le panneau Personnaliser le cluster :

    1. Sous Propriétés du cluster :

      1. Pour autoriser l'ajout ou la suppression d'utilisateurs multilocataires sans recréer le cluster (voir Mettre à jour les utilisateurs du cluster multilocataire), cliquez sur Ajouter des propriétés, puis ajoutez le préfixe dataproc, la propriété dynamic.multi.tenancy.enabled et définissez sa valeur sur true.

        Recommandation : Étant donné que YARN consomme une quantité importante de ressources de cluster pour chaque noyau 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 200
        capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0,5

  4. Dans le panneau "Gérer la sécurité" :

    1. Sous Accès au projet, sélectionnez Active le champ d'application Cloud Platform pour ce cluster.
    2. Sous Architecture mutualisée sécurisée :
      1. Sélectionnez Activer.
      2. Sous Mappage de l'architecture mutualisée :
        1. Cliquez sur Ajouter un mappage multilocataire pour ajouter des mappages de comptes utilisateur à des comptes de service.
  5. Confirmez ou saisissez d'autres paramètres de cluster (voir Créer un cluster Dataproc à l'aide de la console Google Cloud ).

  6. Cliquez sur Créer.

gcloud

Utilisez gcloud dataproc clusters create command avec l'option --secure-multi-tenancy-user-mapping pour spécifier une liste de mappages entre des comptes utilisateur et 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 séparée par des virgules qui mappe les comptes utilisateur aux comptes de service.

    --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
    
    Utiliser un fichier de mappage YAML : au lieu d'utiliser l'indicateur --secure-multi-tenancy-user-mapping pour spécifier les mappages de compte utilisateur vers compte de service, vous pouvez utiliser l'indicateur --identity-config-file pour spécifier un fichier YAML local ou Cloud Storage contenant les mappages.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Chaque ligne du fichier de mappage associe un compte utilisateur à un compte de service. La première ligne contient l'en-tête 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 clusters multilocataires sans recréer le cluster (voir Mettre à jour les utilisateurs de clusters multilocataires).

    Recommandation : Étant donné que YARN consomme une quantité importante de ressources de cluster pour chaque noyau 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 --service-account flag pour 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/iam est nécessaire pour que le compte de service du cluster puisse emprunter l'identité d'un utilisateur.

  • --enable-component-gateway et --optional-components=JUPYTER_KERNEL_GATEWAY : l'activation de la passerelle des composants Dataproc et de la passerelle Jupyter Kernel permet à plusieurs utilisateurs de connecter leurs notebooks Jupyter au cluster mutualisé.

API

Utilisez SecurityConfig.IdentityConfig.userServiceAccountMapping field pour spécifier une liste de mappages entre des comptes utilisateur et des comptes de service.

Accorder des autorisations Identity and Access Management

Pour connecter des notebooks utilisateur à des noyaux de notebook s'exécutant sur un cluster multitenant, les utilisateurs mappés, les comptes de service mappés et le compte de service de VM du cluster doivent disposer des autorisations IAM nécessaires pour accéder aux ressources.

Autorisations utilisateur mappées

Chaque utilisateur mappé doit disposer des autorisations dataproc.clusters.get et dataproc.clusters.use, qui sont nécessaires pour qu'il puisse accéder aux noyaux de notebooks s'exécutant sur le cluster multitenant et s'y connecter. Vous pouvez attribuer le rôle Éditeur Dataproc (roles/dataproc.editor), qui contient ces autorisations (voir Attribuer 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é, comme l'accès à un bucket Cloud Storage ou à une table BigQuery (consultez Gérer l'accès aux comptes de service).

Autorisations du compte de service de VM

Le compte de service de VM du cluster multitenant doit disposer de l'autorisation iam.serviceAccounts.getAccessToken sur chaque compte de service mappé. Vous pouvez attribuer le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator), qui contient cette autorisation (voir 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 multitenant

Les utilisateurs de clusters mutualisés 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 un notebook Jupyter et le connecter au cluster mutualisé, procédez comme suit :

  1. Créer une instance Vertex AI Workbench
  2. Dans l'onglet Workbench > Instances, cliquez sur le lien Ouvrir JupyterLab pour votre instance.
  3. Sous Notebooks de cluster Dataproc, cliquez sur la fiche PySpark (cluster YARN) sur MULTI_TENANCY_CLUSTER_NAME pour vous connecter à un nouveau notebook Jupyter PySpark et le lancer.

Notebook géré par l'utilisateur

Pour créer et connecter un notebook Jupyter géré par l'utilisateur à votre cluster Dataproc multitenant, suivez les étapes pour installer l'extension JupyterLab sur votre VM gérée par l'utilisateur.

Mettre à jour les utilisateurs de clusters multilocataires (aperçu)

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 update suivante utilise l'indicateur --add-user-mappings pour ajouter deux nouveaux mappages de compte utilisateur à compte de service au cluster multitenant 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 update suivante utilise l'option --remove-user-mappings pour supprimer deux utilisateurs du cluster multitenant. L'indicateur accepte les comptes utilisateur à 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 "update" avec l'indicateur --identity-config-file pour remplacer l'ensemble d'utilisateurs existant par un nouvel ensemble. Cet indicateur 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 nouvelles associations entre comptes utilisateur et comptes de service.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Chaque ligne du fichier de mappage associe un compte utilisateur à un compte de service. La première ligne contient l'en-tête 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