Crea un clúster de múltiples arrendatarios con cuentas de servicio

El multiusuario seguro basado en cuentas de servicio de Dataproc te permite compartir un clúster con varios usuarios, con un conjunto de cuentas de usuario asignadas a cuentas de servicio cuando se crea el clúster. Los usuarios pueden enviar cargas de trabajo interactivas, como notebooks de Jupyter, a los kernels que se ejecutan en el clúster multiusuario con entornos de usuario aislados.

Cuando un usuario envía un trabajo al clúster de instancias múltiples, sucede lo siguiente:

  • El trabajo se ejecuta como un usuario específico del SO con un principal de Kerberos específico.

  • El trabajo accede a los recursos de Google Cloud con una cuenta de servicio asignada.

En este documento, se muestra cómo crear un clúster de Dataproc de múltiples inquilinos y, luego, iniciar y conectar un notebook de Jupyter a un kernel de PySpark que se ejecuta en el clúster.

Consideraciones y limitaciones

Cuando creas un clúster multiusuario, sucede lo siguiente:

  • El clúster solo está disponible para los usuarios de Cuentas de Google con cuentas de servicio asignadas. No se pueden asignar grupos de Google. Los usuarios sin asignar no pueden ejecutar trabajos en el clúster.

  • Kerberos está habilitado y configurado en el clúster para una comunicación segura dentro del clúster. No se admite la autenticación del usuario final a través de Kerberos.

  • El acceso SSH directo al clúster y a las funciones de Compute Engine, como la capacidad de ejecutar secuencias de comandos de inicio en las VM del clúster, está bloqueado. Además, los trabajos no se pueden ejecutar con privilegios sudo.

  • No se admiten los flujos de trabajo de Dataproc.

Crea un clúster multiusuario

Habilita la función multiusuario cuando creas un clúster de Dataproc.

Console

Sigue estos pasos para crear un clúster de Dataproc con la consola de Google Cloud :

  1. En la consola de Google Cloud , ve a la página Crea un clúster de Dataproc en Compute Engine de Dataproc: Crea un clúster de Dataproc en Compute Engine

  2. En el panel Configurar clúster, haz lo siguiente:

    1. En Componentes, haz lo siguiente:
      1. En Puerta de enlace de componentes, selecciona Habilitar puerta de enlace de componentes.
      2. En Componentes opcionales, selecciona Jupyter Kernel Gateway para permitir que varios usuarios conecten sus notebooks de Jupyter al clúster multiusuario.
  3. En el panel Personalizar clúster, haz lo siguiente:

    1. En Propiedades del clúster, haz lo siguiente:

      1. Para permitir agregar o quitar usuarios de varios inquilinos sin volver a crear el clúster (consulta Actualiza los usuarios del clúster de varios inquilinos), haz clic en Agregar propiedades, luego, agrega el prefijo dataproc, la propiedad dynamic.multi.tenancy.enabled y establece su valor en true.

        Recomendación: Dado que YARN consume recursos importantes del clúster para cada kernel de notebook que se ejecuta en un clúster de multiusuarios, agrega propiedades de Spark y YARN para aumentar la asignación de recursos.

        Ejemplo:

        Prefijo Clave Valor
        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. En el panel de administración de seguridad, haz lo siguiente:

    1. En Acceso al proyecto, selecciona Habilita el alcance de la plataforma de nube para este clúster.
    2. En Secure Multi Tenancy, haz lo siguiente:
      1. Selecciona Habilitar.
      2. En Multi-tenancy Mapping, haz lo siguiente:
        1. Haz clic en Agregar asignación de múltiples inquilinos para agregar asignaciones de cuentas de usuario a cuentas de servicio.
  5. Confirma o ingresa otros parámetros de configuración del clúster (consulta Crea un clúster de Dataproc con la consola de Google Cloud ).

  6. Haz clic en Crear.

gcloud

Usa gcloud dataproc clusters create command con la marca --secure-multi-tenancy-user-mapping para especificar una lista de asignaciones de cuentas de usuario a cuentas de servicio.

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

Notas:

  • USER_MAPPINGS: Especifica una lista separada por comas que asigne cuentas de usuario a cuentas de servicio.

    --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
    
    Usa un archivo de asignación YAML: En lugar de usar la marca --secure-multi-tenancy-user-mapping para especificar las asignaciones de cuenta de usuario a cuenta de servicio, puedes usar la marca --identity-config-file para especificar un archivo YAML local o de Cloud Storage que contenga las asignaciones.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Cada línea del archivo de asignación asigna una cuenta de usuario a una cuenta de servicio. La primera línea contiene el encabezado 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": Esta propiedad permite agregar o quitar usuarios del clúster multiusuario sin volver a crear el clúster (consulta Actualiza los usuarios del clúster multiusuario).

    Recomendación: Dado que YARN consume recursos importantes del clúster para cada kernel de notebook que se ejecuta en un clúster de multiusuarios, agrega propiedades de Spark y YARN para aumentar la asignación de recursos.

    Ejemplo:

    --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 (opcional): Puedes usar --service-account flag para especificar una cuenta de servicio de VM personalizada para el clúster. Si omites esta marca, se usa la cuenta de servicio de VM del clúster predeterminada, PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    Recomendación: Usa diferentes cuentas de servicio de clúster para diferentes clústeres a fin de permitir que cada cuenta de servicio de VM del clúster actúe en nombre de un grupo limitado de cuentas de servicio de usuario asignadas.

  • --scopes=https://www.googleapis.com/auth/iam es necesario para que la cuenta de servicio del clúster realice la suplantación de identidad.

  • --enable-component-gateway y --optional-components=JUPYTER_KERNEL_GATEWAY: Habilitar la puerta de enlace de componentes de Dataproc y la puerta de enlace de kernel de Jupyter permite que varios usuarios conecten sus notebooks de Jupyter al clúster de múltiples usuarios.

API

Usa SecurityConfig.IdentityConfig.userServiceAccountMapping field para especificar una lista de asignaciones de cuentas de usuario a cuentas de servicio.

Otorga permisos de Identity and Access Management

Para conectar notebooks de usuarios a kernels de notebooks que se ejecutan en un clúster de múltiples usuarios, los usuarios asignados, las cuentas de servicio asignadas y la cuenta de servicio de la VM del clúster deben tener los permisos de IAM necesarios para acceder a los recursos.

Permisos de usuario asignados

Cada usuario asignado debe tener los permisosdataproc.clusters.get y dataproc.clusters.use, que son necesarios para que el usuario acceda a los kernels de notebooks que se ejecutan en el clúster de múltiples usuarios y se conecte a ellos. Puedes otorgar el rol de Editor de Dataproc (roles/dataproc.editor), que contiene estos permisos (consulta Cómo otorgar un solo rol de IAM), o crear un rol personalizado con estos permisos.

Permisos de cuentas de servicio asignados

Cada cuenta de servicio asignada debe tener los permisos que necesita la aplicación de notebook del usuario asignado, como acceso a un bucket de Cloud Storage o a una tabla de BigQuery (consulta Administra el acceso a las cuentas de servicio).

Permisos de la cuenta de servicio de VM

La cuenta de servicio de VM del clúster de múltiples inquilinos debe tener el permiso iam.serviceAccounts.getAccessToken en cada cuenta de servicio asignada. Puedes otorgar el rol de Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator), que contiene este permiso (consulta Administra el acceso a las cuentas de servicio), o crear un rol personalizado con este permiso. Consulta Cuenta de servicio de VM de Dataproc para obtener información sobre otros roles de cuentas de servicio de VM.

Conecta notebooks de Jupyter a un kernel de clúster multiusuario

Los usuarios del clúster multiusuario asignado pueden conectar su notebook de Jupyter administrado por el usuario o de Vertex AI Workbench a los kernels instalados en el clúster multiusuario.

Notebook de Vertex AI

Para crear un notebook de Jupyter y conectarlo al clúster multiusuario, haz lo siguiente:

  1. Crea una instancia de Vertex AI Workbench.
  2. En la pestaña Workbench Instances, haz clic en el vínculo Open JupyterLab de tu instancia.
  3. En Dataproc Cluster Notebooks, haz clic en la tarjeta PySpark (clúster de YARN) en MULTI_TENANCY_CLUSTER_NAME para conectarte a un nuevo notebook de Jupyter PySpark y lanzarlo.

Notebook administrado por el usuario

Para crear y conectar un notebook de Jupyter administrado por el usuario a tu clúster de Dataproc de múltiples inquilinos, sigue los pasos para instalar la extensión de JupyterLab en tu VM administrada por el usuario.

Actualiza los usuarios del clúster multiusuario (vista previa)

Si estableces la propiedad del clúster dataproc:dataproc.dynamic.multi.tenancy.enabled en true cuando creaste un clúster de varios usuarios, puedes agregar, quitar o reemplazar usuarios del clúster de varios usuarios después de la creación del clúster.

Agregar usuarios

El siguiente comando de actualización usa la marca --add-user-mappings para agregar dos nuevas asignaciones de cuentas de usuario a cuentas de servicio en el clúster seguro de múltiples inquilinos.

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

Quitar usuarios

El siguiente comando de actualización usa la marca --remove-user-mappings para quitar dos usuarios del clúster de múltiples inquilinos. La marca acepta las cuentas de usuario de los usuarios que se quitarán.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --remove-user-mappings=UserB@my-company.com,UserC@my-company.com

Reemplazar usuarios

Puedes usar el comando update con la marca --identity-config-file para reemplazar el conjunto existente de usuarios por uno nuevo. Esta marca es útil para agregar y quitar usuarios con un solo comando de actualización.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --identity-config-file=identity-config.yaml

Notas:

  • --identity-config-file: Especifica un archivo YAML local o de Cloud Storage que contenga las nuevas asignaciones de cuentas de usuario a cuentas de servicio.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Cada línea del archivo de asignación asigna una cuenta de usuario a una cuenta de servicio. La primera línea contiene el encabezado 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