La propiedad múltiple segura basada en cuentas de servicio de Dataproc le 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 cuadernos de Jupyter, a kernels que se ejecutan en el clúster multiinquilino con entornos de usuario aislados.
Cuando un usuario envía un trabajo al clúster multiinquilino:
El trabajo se ejecuta como un usuario de SO específico con un principal de Kerberos específico.
El trabajo accede a los recursos de Google Cloud mediante una cuenta de servicio asignada.
En este documento se explica cómo crear un clúster de Dataproc multiinquilino y, a continuación, iniciar y conectar un cuaderno de Jupyter a un kernel de PySpark que se ejecute en el clúster.
Consideraciones y limitaciones
Cuando creas un clúster multicliente, ocurre lo siguiente:
El clúster solo está disponible para los usuarios que tengan una cuenta de Google con cuentas de servicio asignadas. No se pueden asignar grupos de Google. Los usuarios no asignados no pueden ejecutar trabajos en el clúster.
Kerberos está habilitado y configurado en el clúster para que la comunicación entre los nodos del clúster sea segura. No se admite la autenticación de usuarios finales mediante Kerberos.
Se bloquea el acceso SSH directo al clúster y a las funciones de Compute Engine, como la posibilidad de ejecutar secuencias de comandos de inicio en las VMs del clúster. Además, los trabajos no se pueden ejecutar con privilegios
sudo
.No se admiten flujos de trabajo de Dataproc.
Crear un clúster multicliente
Puedes habilitar la función multitenant al crear un clúster de Dataproc.
Consola
Crea un clúster de Dataproc mediante la Google Cloud consola de la siguiente manera:
En la Google Cloud consola, 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:
- En Componentes:
- En Pasarela de componentes, selecciona Habilitar pasarela de componentes.
- En Componentes opcionales, selecciona Jupyter Kernel Gateway para permitir que varios usuarios conecten sus cuadernos de Jupyter al clúster multiinquilino.
- En Componentes:
En el panel Personalizar clúster:
En Propiedades del clúster:
Para permitir que se añadan o quiten usuarios multitenant sin tener que volver a crear el clúster (consulta Actualizar usuarios de clúster multitenant), haz clic en Añadir propiedades, añade el prefijo
dataproc
y la propiedaddynamic.multi.tenancy.enabled
y asigna el valortrue
.Recomendación: Como YARN consume una cantidad significativa de recursos del clúster por cada kernel de cuaderno que se ejecuta en un clúster multiinquilino, añade 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 gestión de la seguridad:
- En Acceso al proyecto, selecciona Habilita el permiso de Cloud Platform en este clúster.
- En Multi Tenancy seguro:
- Selecciona Habilitar.
- En Asignación de multitenencia:
- Haz clic en Añadir asignación multitenancy para añadir asignaciones de cuentas de usuario a cuentas de servicio.
Confirma o introduce otros ajustes del clúster (consulta Crear un clúster de Dataproc mediante la consola 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 asocie cuentas de usuario a cuentas de servicio.
Usar 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 cuentas de usuario a cuentas 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 añadir o quitar usuarios de clústeres multiempresa sin tener que volver a crear el clúster (consulta Actualizar usuarios de clústeres multiempresa).Recomendación: Como YARN consume una cantidad significativa de recursos del clúster por cada kernel de cuaderno que se ejecuta en un clúster multiinquilino, añade 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 omite esta marca, se usará 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 distintos clústeres. De esta forma, cada cuenta de servicio de VM de clúster solo podrá suplantar a 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 pueda suplantar la identidad.--enable-component-gateway
y--optional-components=JUPYTER_KERNEL_GATEWAY
: Si habilitas la pasarela de componentes de Dataproc y la pasarela de kernel de Jupyter, varios usuarios podrán conectar sus cuadernos de Jupyter al clúster multiinquilino.
API
Usa SecurityConfig.IdentityConfig.userServiceAccountMapping field
para especificar una lista de asignaciones de cuentas de usuario a cuentas de servicio.
Conceder permisos de gestión de identidades y accesos
Para conectar los notebooks de los usuarios a los kernels de los notebooks que se ejecutan en un clúster multiinquilino, los usuarios asignados, las cuentas de servicio asignadas y la cuenta de servicio de la VM del clúster deben tener los permisos de gestión de identidades y accesos 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 pueda acceder a los kernels del cuaderno que se ejecutan en el clúster multiinquilino y conectarse a ellos. Puedes asignar el rol Editor de Dataproc (roles/dataproc.editor
), que contiene estos permisos (consulta Asignar un solo rol de gestión de identidades y accesos), o crear un rol personalizado con estos permisos.
Permisos de cuenta de servicio asignados
Cada cuenta de servicio asignada debe tener los permisos que necesite la aplicación de cuaderno del usuario asignado, como acceso a un bucket de Cloud Storage o a una tabla de BigQuery (consulta Gestionar el acceso a cuentas de servicio).
Permisos de cuenta de servicio de la VM
La cuenta de servicio de la VM del clúster multiarrendatario
debe tener el permiso iam.serviceAccounts.getAccessToken
en cada cuenta de servicio asignada. Puedes asignar el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator
), que contiene este permiso (consulta Gestionar el acceso a 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.
Conectar cuadernos de Jupyter a un kernel de clúster multicliente
Los usuarios de clústeres de multitenencia asignados pueden conectar su cuaderno de Jupyter gestionado por el usuario o Vertex AI Workbench a los kernels instalados en el clúster de multitenencia.
Cuaderno de Vertex AI
Para crear y conectar un cuaderno de Jupyter al clúster multicliente, haz lo siguiente:
- Crea una instancia de Vertex AI Workbench.
- En la pestaña Instancias de Workbench, haz clic en el enlace Abrir JupyterLab de tu instancia.
- En Cuadernos de clúster de Dataproc, haz clic en la tarjeta PySpark (clúster de YARN) en
MULTI_TENANCY_CLUSTER_NAME
para conectarte y abrir un nuevo cuaderno de Jupyter PySpark.
Cuaderno gestionado por el usuario
Para crear y conectar un cuaderno de Jupyter gestionado por el usuario a tu clúster multiinquilino de Dataproc, sigue los pasos para instalar la extensión JupyterLab en tu máquina virtual gestionada por el usuario.
Actualizar usuarios de clústeres multiarrendatario (vista previa)
Si asignas el valor true
a la propiedad de clúster dataproc:dataproc.dynamic.multi.tenancy.enabled
cuando crees un clúster multitenant, podrás añadir, quitar o sustituir usuarios del clúster multitenant después de crear el clúster.
Añadir usuarios
El siguiente comando de actualización usa la marca --add-user-mappings
para añadir dos nuevas asignaciones de cuentas de usuario a cuentas de servicio al clúster seguro multitenant.
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 multiinquilino. La marca acepta las cuentas de usuario de los usuarios que se van a quitar.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --remove-user-mappings=UserB@my-company.com,UserC@my-company.com
Sustituir usuarios
Puedes usar el comando update con la marca --identity-config-file
para sustituir el conjunto de usuarios actual por uno nuevo. Esta marca es útil para añadir 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