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 :
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
En el panel Configurar clúster, haz lo siguiente:
- En Componentes, haz lo siguiente:
- En Puerta de enlace de componentes, selecciona Habilitar puerta de enlace de componentes.
- En Componentes opcionales, selecciona Jupyter Kernel Gateway para permitir que varios usuarios conecten sus notebooks de Jupyter al clúster multiusuario.
- En Componentes, haz lo siguiente:
En el panel Personalizar clúster, haz lo siguiente:
En Propiedades del clúster, haz lo siguiente:
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 propiedaddynamic.multi.tenancy.enabled
y establece su valor entrue
.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
En el panel de administración de seguridad, haz lo siguiente:
- En Acceso al proyecto, selecciona Habilita el alcance de la plataforma de nube para este clúster.
- En Secure Multi Tenancy, haz lo siguiente:
- Selecciona Habilitar.
- En Multi-tenancy Mapping, haz lo siguiente:
- Haz clic en Agregar asignación de múltiples inquilinos para agregar asignaciones de cuentas de usuario a cuentas de servicio.
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 ).
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.
Usa un archivo de asignación YAML: En lugar de usar la marca--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-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. 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--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"
: 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:
- Crea una instancia de Vertex AI Workbench.
- En la pestaña Workbench Instances, haz clic en el vínculo Open JupyterLab de tu instancia.
- 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. 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--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