Multiusuario de seguridad basado en la cuenta de servicio de Dataproc

Multiusuario de seguridad basado en la cuenta de servicio de Dataproc (llamada “multiusuario seguro” a continuación) te permite compartir un clúster con varios usuarios, con un conjunto de usuarios asignados a cuentas de servicio cuando se crea el clúster. Con multiusuario seguro, los usuarios pueden enviar cargas de trabajo interactivas al clúster con identidades de usuario aisladas.

Cuando un usuario envía un trabajo al clúster, este realiza las siguientes acciones:

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

  • accede a los recursos de Google Cloud mediante las credenciales de la cuenta de servicio asignada

Consideraciones y limitaciones

Cuando creas un clúster con multiusuario seguro, se habilita lo siguiente:

  • Solo puedes enviar trabajos a través de la API de trabajos de Dataproc.

  • El clúster solo está disponible para los usuarios con cuentas de servicio asignadas. Por ejemplo, los usuarios sin asignar no pueden ejecutar trabajos en el clúster.

  • Las cuentas de servicio solo se pueden asignar a usuarios de Google, no a grupos de Google.

  • La puerta de enlace de componentes de Dataproc no está habilitada.

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

  • 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 usuarios finales mediante Kerberos.

  • No se admiten los flujos de trabajo de Dataproc.

Crea un clúster de multiusuario seguro

A fin de crear un clúster de multiusuario seguro de Dataproc, usa la marca --secure-multi-tenancy-user-mapping para especificar una lista de asignaciones de usuario a cuenta de servicio.

Ejemplo:

El siguiente comando crea un clúster, con el usuario bob@my-company.com asignado a la cuenta de servicio service-account-for-bob@iam.gserviceaccount.com y el usuario alice@my-company.com asignado a la cuenta de servicio service-account-for-alice@iam.gserviceaccount.com.

gcloud dataproc clusters create my-cluster \
    --secure-multi-tenancy-user-mapping="bob@my-company.com:service-account-for-bob@iam.gserviceaccount.com,alice@my-company.com:service-account-for-alice@iam.gserviceaccount.com" \
    --scopes=https://www.googleapis.com/auth/iam \
    --service-account=cluster-service-account@iam.gserviceaccount.com \
    --region=region \
    other args ...

Como alternativa, puedes almacenar la lista de asignaciones de usuario a cuenta de servicio en un archivo YAML o JSON local o de Cloud Storage. Usa la marca --identity-config-file para especificar la ubicación del archivo.

Archivo de configuración de identidad de muestra:

user_service_account_mapping:
  bob@my-company.com: service-account-for-bob@iam.gserviceaccount.com
  alice@my-company.com: service-account-for-alice@iam.gserviceaccount.com

Usa el comando de muestra para crear el clúster con la marca --identity-config-file:

gcloud dataproc clusters create my-cluster \
    --identity-config-file=local or "gs://bucket" /path/to/identity-config-file \
    --scopes=https://www.googleapis.com/auth/iam \
    --service-account=cluster-service-account@iam.gserviceaccount.com \
    --region=region \
    other args ...

Notas:

  • Como se muestra en los comandos anteriores, el clúster --scopes debe incluir al menos https://www.googleapis.com/auth/iam, lo cual es necesario para que la cuenta de servicio del clúster realice el robo de identidad.

  • La cuenta de servicio del clúster debe tener permisos para actuar en nombre de las cuentas de servicio asignadas a los usuarios (consulta Permisos de la cuenta de servicio).

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