Cuentas de servicio de Dataproc

En esta página se describen las cuentas de servicio y los ámbitos de acceso de las VMs, así como su uso con Dataproc.

¿Qué son las cuentas de servicio?

Una cuenta de servicio es una cuenta especial que pueden usar los servicios y las aplicaciones que se ejecutan en una instancia de máquina virtual (VM) de Compute Engine para interactuar con otras APIs de Google Cloud . Las aplicaciones pueden usar las credenciales de la cuenta de servicio para autorizarse en un conjunto de APIs y realizar acciones en la VM con los permisos concedidos a la cuenta de servicio.

Cuentas de servicio de Dataproc

Se conceden permisos a las siguientes cuentas de servicio para realizar acciones de Dataproc en el proyecto en el que se encuentra tu clúster.

  • Cuenta de servicio del agente de servicio de Dataproc: Dataproc crea la cuenta de servicio del agente de servicio, service-project_number@dataproc-accounts.iam.gserviceaccount.com, con el rol Agente de servicio de Dataproc en el proyecto de un usuario de Dataproc. Google Cloud Esta cuenta de servicio no se puede sustituir por una cuenta de servicio de VM personalizada al crear un clúster. Esta cuenta de agente de servicio se usa para realizar operaciones del plano de control de Dataproc, como la creación, la actualización y la eliminación de VMs de clúster.

Redes de VPC compartida: si el clúster usa una red de VPC compartida, un administrador de VPC compartida debe conceder a la cuenta de servicio del agente de servicio de Dataproc el rol de Usuario de red en el proyecto del host de la VPC compartida. Para obtener más información, consulta estos artículos:

Ver y gestionar roles de cuentas de servicio de gestión de identidades y accesos

Para ver y gestionar los roles concedidos a la cuenta de servicio de la VM de Dataproc, haz lo siguiente:

  1. En la consola, ve a la página Gestión de identidades y accesos. Google Cloud

    Ir a IAM

  2. Haz clic en Incluir concesiones de roles proporcionadas por Google.

  3. Consulta los roles que aparecen en la cuenta de servicio de la VM. En la siguiente imagen se muestra el rol Trabajador de Dataproc necesario para la cuenta de servicio predeterminada de Compute Engine (project_number-compute@developer.gserviceaccount.com), que Dataproc usa de forma predeterminada como cuenta de servicio de la VM.

  4. Puedes hacer clic en el icono del lápiz que aparece en la fila de la cuenta de servicio para asignar o quitar roles de la cuenta de servicio.

Permisos de acceso de máquinas virtuales de Dataproc

Los permisos de acceso de las VMs y los roles de gestión de identidades y accesos funcionan conjuntamente para limitar el acceso de las VMs a las APIs. Google Cloud Por ejemplo, si a las VMs de un clúster solo se les concede el ámbito https://www.googleapis.com/auth/storage-full, las aplicaciones que se ejecuten en las VMs del clúster podrán llamar a las APIs de Cloud Storage, pero no podrán enviar solicitudes a BigQuery, aunque se ejecuten como una cuenta de servicio de VM a la que se le haya concedido un rol de BigQuery con permisos amplios.

Una práctica recomendada es conceder el amplio ámbito cloud-platform (https://www.googleapis.com/auth/cloud-platform) a las VMs y, a continuación, limitar el acceso a las VMs concediendo roles de gestión de identidades y accesos específicos a la cuenta de servicio de la VM.

Ámbitos predeterminados de las VMs de Dataproc. Si no se especifican los permisos al crear un clúster (consulta gcloud dataproc cluster create --scopes), las VMs de Dataproc tienen el siguiente conjunto de permisos predeterminado:

https://www.googleapis.com/auth/cloud-platform (clusters created with image version 2.1+).
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/bigtable.admin.table
https://www.googleapis.com/auth/bigtable.data
https://www.googleapis.com/auth/cloud.useraccounts.readonly
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/logging.write

Si especificas ámbitos al crear un clúster, las VMs del clúster tendrán los ámbitos que especifiques y el siguiente conjunto mínimo de ámbitos obligatorios (aunque no los especifiques):

https://www.googleapis.com/auth/cloud-platform (clusters created with image version 2.1+).
https://www.googleapis.com/auth/cloud.useraccounts.readonly
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/logging.write

Crear un clúster con una cuenta de servicio de VM personalizada

Cuando creas un clúster, puedes especificar una cuenta de servicio de VM personalizada que tu clúster usará para las operaciones del plano de datos de Dataproc en lugar de la cuenta de servicio de VM predeterminada (no puedes cambiar la cuenta de servicio de VM después de crear el clúster). Si usas una cuenta de servicio de VM con roles de gestión de identidades y accesos asignados, puedes proporcionar a tu clúster un acceso detallado a los recursos del proyecto.

Pasos preliminares

  1. Crea la cuenta de servicio de VM personalizada en el proyecto en el que se creará el clúster.

  2. Asigna a la cuenta de servicio de la VM personalizada el rol Trabajador de Dataproc en el proyecto y cualquier otro rol que necesiten tus tareas, como los roles Lector y Escritor de BigQuery (consulta Permisos y roles de gestión de identidades y accesos de Dataproc).

    Ejemplo de la CLI de gcloud:

    • El siguiente comando de ejemplo concede a la cuenta de servicio de VM personalizada del proyecto del clúster el rol de trabajador de Dataproc a nivel de proyecto:
    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
    • Considera un rol personalizado: en lugar de conceder a la cuenta de servicio el rol predefinido Worker de Dataproc, puedes concederle un rol personalizado que contenga permisos de rol de trabajador, pero que limite los permisos de storage.objects.*.
      • El rol personalizado debe conceder al menos los permisos storage.objects.create, storage.objects.get y storage.objects.update de la cuenta de servicio de la VM en los objetos de los segmentos de almacenamiento provisionales y temporales de Dataproc y en los segmentos adicionales que necesiten las tareas que se ejecuten en el clúster.

Crear el clúster

  • Crea el clúster en tu proyecto.

Comando gcloud

Usa el comando gcloud dataproc clusters create para crear un clúster con la cuenta de servicio de VM personalizada.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --scopes=SCOPE

Haz los cambios siguientes:

  • CLUSTER_NAME: el nombre del clúster, que debe ser único en un proyecto. El nombre debe empezar por una letra minúscula y puede contener hasta 51 letras minúsculas, números y guiones. No puede terminar en un guion. El nombre de un clúster eliminado se puede volver a utilizar.
  • REGION: la región en la que se ubicará el clúster.
  • SERVICE_ACCOUNT_NAME: nombre de la cuenta de servicio.
  • PROJECT_ID: el ID de proyecto del proyecto que contiene tu cuenta de servicio de VM. Google Cloud Este será el ID del proyecto en el que se creará el clúster o el ID de otro proyecto si crea un clúster con una cuenta de servicio de VM personalizada en otro clúster.
  • SCOPE: Ámbitos de acceso de las instancias de VM del clúster (por ejemplo, https://www.googleapis.com/auth/cloud-platform).

API REST

Cuando completes el GceClusterConfig como parte de la solicitud de la API clusters.create, define los siguientes campos:

Consola

No se puede definir una cuenta de servicio de VM de Dataproc en la consola Google Cloud . Puedes definir el cloud-platform ámbito de acceso en las VMs del clúster al crear el clúster. Para ello, haz clic en "Habilita el ámbito de plataforma en la nube para este clúster" en la sección Acceso al proyecto del panel Gestionar seguridad de la página Crear un clúster de la consola de Google Cloud .

Crear un clúster con una cuenta de servicio de VM personalizada de otro proyecto

Cuando creas un clúster, puedes especificar una cuenta de servicio de VM personalizada que el clúster usará para las operaciones del plano de datos de Dataproc en lugar de la cuenta de servicio de VM predeterminada (no puedes especificar una cuenta de servicio de VM personalizada después de crear el clúster). Si usas una cuenta de servicio de VM personalizada con roles de gestión de identidades y accesos asignados, puedes proporcionar a tu clúster un acceso pormenorizado a los recursos del proyecto.

Pasos preliminares

  1. En el proyecto de la cuenta de servicio (el proyecto en el que se encuentra la cuenta de servicio de la VM personalizada):

    1. Habilita la vinculación de cuentas de servicio entre proyectos.

    2. Enable the Dataproc API.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the API

  2. Concede a tu cuenta de correo (el usuario que crea el clúster) el rol Usuario de cuenta de servicio en el proyecto de la cuenta de servicio o, para tener un control más granular, en la cuenta de servicio de VM personalizada del proyecto de la cuenta de servicio.

    Más información: consulta los artículos Administra el acceso a proyectos, carpetas y organizaciones para asignar roles a nivel de proyecto y Administra el acceso a cuentas de servicio para asignar roles a nivel de cuenta de servicio.

    Ejemplos de la CLI de gcloud:

    • El siguiente comando de ejemplo asigna al usuario el rol Usuario de cuenta de servicio a nivel de proyecto:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=USER_EMAIL \
        --role="roles/iam.serviceAccountUser"
    

    Notas: USER_EMAIL: Proporciona la dirección de correo de tu cuenta de usuario con el siguiente formato: user:user-name@example.com.

    • El siguiente comando de ejemplo asigna al usuario el rol Usuario de cuenta de servicio a nivel de cuenta de servicio:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=USER_EMAIL \
        --role="roles/iam.serviceAccountUser"
    

    Notas: USER_EMAIL: Proporciona la dirección de correo de tu cuenta de usuario con el siguiente formato: user:user-name@example.com.

  3. Asigna a la cuenta de servicio de la VM personalizada el rol Trabajador de Dataproc en el proyecto del clúster.

    Ejemplo de la CLI de gcloud:

    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
  4. Asigna a la cuenta de servicio del agente de servicio de Dataproc del proyecto del clúster los roles Usuario de cuenta de servicio y Creador de tokens de cuenta de servicio en el proyecto de la cuenta de servicio o, para tener un control más granular, en la cuenta de servicio de la VM personalizada del proyecto de la cuenta de servicio. De esta forma, permites que la cuenta de servicio del agente de servicio de Dataproc en el proyecto del clúster cree tokens para la cuenta de servicio de la VM de Dataproc personalizada en el proyecto de la cuenta de servicio.

    Más información: consulta los artículos Administra el acceso a proyectos, carpetas y organizaciones para asignar roles a nivel de proyecto y Administra el acceso a cuentas de servicio para asignar roles a nivel de cuenta de servicio.

    Ejemplos de la CLI de gcloud:

    • Los siguientes comandos de ejemplo asignan a la cuenta de servicio del agente de servicio de Dataproc en el proyecto del clúster los roles Usuario de cuenta de servicio y Creador de tokens de cuenta de servicio a nivel de proyecto:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountUser"
     
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
    • Los siguientes comandos de ejemplo asignan a la cuenta de servicio del agente de servicio de Dataproc en el proyecto del clúster los roles Usuario de cuenta de servicio y Creador de tokens de cuenta de servicio a nivel de cuenta de servicio de la VM:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountUser"
     
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
  5. Asigna el rol Creador de tokens de cuenta de servicio a la cuenta de servicio del agente de servicio de Compute Engine del proyecto del clúster en el proyecto de la cuenta de servicio o, para tener un control más granular, en la cuenta de servicio de la VM personalizada del proyecto de la cuenta de servicio. De esta forma, concedes a la cuenta de servicio del agente de servicio de Compute en el proyecto del clúster la capacidad de crear tokens para la cuenta de servicio de la VM de Dataproc personalizada en el proyecto de la cuenta de servicio.

    Más información: consulta los artículos Administra el acceso a proyectos, carpetas y organizaciones para asignar roles a nivel de proyecto y Administra el acceso a cuentas de servicio para asignar roles a nivel de cuenta de servicio.

    Ejemplos de la CLI de gcloud:

    • El siguiente comando de ejemplo asigna el rol Creador de tokens de cuenta de servicio a la cuenta de servicio del agente de Compute Engine en el proyecto del clúster a nivel de proyecto:
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     
    • El siguiente comando de ejemplo asigna el rol Creador de tokens de cuenta de servicio a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto del clúster, a nivel de cuenta de servicio de la VM:
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     

Crear el clúster

Siguientes pasos