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
sudoprivilegios.
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:
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
En el panel Configurar clúster , haz lo siguiente:
- En Componentes:
- 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:
En el panel Personalizar clúster, haz lo siguiente:
En Propiedades del clúster:
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 propiedaddataproc.dynamic.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 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
En el panel Administrar seguridad:
- En Acceso al proyecto, selecciona Habilita el alcance de la plataforma de nube para este clúster.
- En Multiusuario seguro:
- Selecciona Habilitar.
- En Asignación multiusuario, haz lo siguiente:
- Haz clic en Agregar asignación multiusuario 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 Google Cloud consola de).
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.
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-mappingpara especificar las asignaciones de cuenta de usuario a cuenta de servicio, puedes usar la marca--identity-config-filepara 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 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 flagpara 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/iames necesario para que la cuenta de servicio del clúster realice la suplantación de identidad.--enable-component-gatewayy--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:
- Crea una instancia de Vertex AI Workbench.
- En la pestaña Instancias de Workbench, haz clic en el vínculo Abrir JupyterLab de tu instancia.
- En Notebooks de clúster de Dataproc, haz clic en la tarjeta
PySpark (clúster de YARN) en
MULTI_TENANCY_CLUSTER_NAMEpara 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. 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