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 multiusuario, este realiza las siguientes acciones:

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

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

En este documento, se muestra cómo crear un clúster multiusuario de Dataproc 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, se habilita 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 de 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 VMs del clúster, está bloqueado. Además, los trabajos no se pueden ejecutar con sudo privilegios.

  • No se admiten los flujos de trabajo de Dataproc .

Crea un clúster multiusuario

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

Console

Crea un clúster de Dataproc con la Google Cloud consola, de la siguiente manera:

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

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

    1. En Componentes:
      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:

      1. Para permitir agregar o quitar usuarios multiusuario sin volver a crear el clúster (consulta Actualiza los usuarios del clúster multiusuario), haz clic en Agregar propiedades, luego agrega el prefijo dataproc, la propiedad dataproc.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 multiusuario, 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 2
        capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0.5

  4. En el panel Administrar seguridad:

    1. En Acceso al proyecto, selecciona Habilita el alcance de la plataforma de nube para este clúster.
    2. En Multiusuario seguro:
      1. Selecciona Habilitar.
      2. En Asignación multiusuario, haz lo siguiente:
        1. Haz clic en Agregar asignación multiusuario 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 Google Cloud consola de).

  6. Haz clic en Crear.

gcloud

Usa el gcloud dataproc clusters create command con la --secure-multi-tenancy-user-mapping marca para especificar una lista de asignaciones de cuenta de usuario a cuenta 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 multiusuario, 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 para 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 multiusuario.

API

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

Otorga permisos de Identity and Access Management

Para conectar notebooks de usuario a kernels de notebook que se ejecutan en un clúster multiusuario , los usuarios asignados, las cuentas de servicio asignadas y la cuenta de servicio de 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 permisos dataproc.clusters.get y dataproc.clusters.use, que son necesarios para que el usuario acceda a los kernels de notebook que se ejecutan en el clúster multiusuario y se conecte a ellos. Puedes otorgar el rol Editor de Dataproc (roles/dataproc.editor), que contiene estos permisos (consulta Otorga un solo rol de IAM), o crear un rol personalizado con estos permisos.

Permisos de cuenta 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 acceso a una tabla de BigQuery (consulta Administra el acceso a las cuentas de servicio).

Permisos de cuenta de servicio de VM

La cuenta de servicio de VM del clúster multiusuario debe tener el iam.serviceAccounts.getAccessToken permiso en cada cuenta de servicio asignada. Puedes otorgar el rol 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 cuenta de servicio de VM.

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

Los usuarios asignados del clúster multiusuario 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 y conectar un notebook de Jupyter al clúster multiusuario, haz lo siguiente:

  1. Crea una instancia de Vertex AI Workbench.
  2. En la pestaña Instancias de Workbench, haz clic en el vínculo Abrir JupyterLab de tu instancia.
  3. En Notebooks de clúster de Dataproc, 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 abrirlo.

Notebook administrado por el usuario

Para crear y conectar un notebook de Jupyter administrado por el usuario a tu clúster multiusuario de Dataproc, 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 multiusuario, puedes agregar, quitar o reemplazar usuarios del clúster multiusuario 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 cuenta de usuario a cuenta de servicio al clúster multiusuario seguro.

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 multiusuario. 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 de usuarios existente por un conjunto nuevo. Esta marca es útil para agregar y quitar usuarios con un 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 cuenta de usuario a cuenta 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