Cuentas de servicio de Dataproc

En esta página se describen las cuentas de servicio y los permisos de acceso de las VM, y cómo se usan con Dataproc.

¿Qué son las cuentas de servicio?

Una cuenta de servicio es una cuenta especial que pueden usar los servicios y aplicaciones que se ejecutan en una instancia de máquina virtual (VM) de Compute Engine para interactuar con otras API de Google Cloud. Las aplicaciones pueden usar credenciales de cuentas de servicio con el fin de otorgar autorización para trabajar con un conjunto de API y realizar acciones en la VM dentro de los permisos otorgados a la cuenta de servicio.

Cuentas de servicio de Dataproc

Las siguientes cuentas de servicio tienen los permisos necesarios para realizar acciones de Dataproc en el proyecto en el que se encuentra el 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 de Agente de servicio de Dataproc en el proyecto de Google Cloud de un usuario de Dataproc. Esta cuenta de servicio no se puede reemplazar por una cuenta de servicio de VM personalizada cuando creas 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 las VMs del clúster.

Redes de VPC compartidas: Si el clúster usa una red de VPC compartida, un administrador de VPC compartida debe otorgar a la cuenta de servicio del agente de servicio de Dataproc el rol de Usuario de red para el proyecto host de VPC compartida. Para obtener más información, consulte:

Cómo ver y administrar roles de cuenta de servicio de IAM

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

  1. En la consola de Google Cloud, ve a la página IAM.

    Ir a IAM

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

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

  4. Puedes hacer clic en el ícono de lápiz que aparece en la fila de la cuenta de servicio para otorgar o quitar roles de la cuenta de servicio.

Permisos de acceso a la VM de Dataproc

Los permisos de acceso a las VMs y los roles de IAM funcionan en conjunto para limitar el acceso de VM a las APIs de Google Cloud. Por ejemplo, si a las VMs del clúster solo se les otorga el permiso https://www.googleapis.com/auth/storage-full, las aplicaciones que se ejecutan en las VMs del clúster pueden llamar a las APIs de Cloud Storage, pero no pueden realizar solicitudes a BigQuery, incluso si se ejecutan como una cuenta de servicio de VM a la que se le otorgó un rol de BigQuery con permisos amplios.

Una práctica recomendada es otorgar el permiso de acceso cloud-platform amplio (https://www.googleapis.com/auth/cloud-platform) a las VMs y, luego, limitar el acceso a las VMs otorgando funciones de IAM específicas a la cuenta de servicio de VM.

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

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 permisos cuando creas un clúster, las VM de clúster tendrán los permisos que especifiques y el siguiente conjunto de permisos mínimos necesarios (incluso si no los especificas):

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

Crea 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). El uso de una cuenta de servicio de VM con roles de IAM asignados te permite proporcionarle a tu clúster acceso detallado a los recursos del proyecto.

Pasos preliminares

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

  2. Otorga a la cuenta de servicio de VM personalizada el rol de trabajador de Dataproc en el proyecto y cualquier rol adicional que necesiten tus trabajos, como los roles de Lector y escritor de BigQuery (consulta Permisos de Dataproc y roles de IAM).

    Ejemplo de la CLI de gcloud:

    • En el siguiente comando de muestra, se otorga a la cuenta de servicio de VM personalizada en el proyecto del clúster el rol de trabajador de Dataproc a nivel del 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 otorgar a la cuenta de servicio el rol Worker predefinido de Dataproc, puedes otorgarle un rol personalizado que contenga los permisos de la función de trabajador, pero limite los permisos de storage.objects.*.
      • El rol personalizado debe otorgar al menos los permisos storage.objects.create, storage.objects.get y storage.objects.update de la cuenta de servicio de VM en buckets temporales y de preparación de Dataproc y en cualquier bucket adicional que necesiten los trabajos que se ejecutarán en el clúster.

Crea el clúster

  • Crea el clúster en tu proyecto.

Comando de 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

Reemplaza lo siguiente:

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

API de REST

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

Console

No se admite la configuración de una cuenta de servicio de VM de Dataproc en la consola de Google Cloud. Puedes establecer el alcance de acceso de cloud-platform en las VMs del clúster cuando lo creas. Para ello, haz clic en "Habilita el alcance de la plataforma de nube para este clúster" en la sección Acceso al proyecto del panel Administrar seguridad en la página Crear un clúster de Dataproc en la consola de Google Cloud.

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

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 usar la cuenta de servicio de VM predeterminada (no puedes especificar una cuenta de servicio de VM personalizada después de crear el clúster). El uso de una cuenta de servicio de VM personalizada con roles de IAM asignados te permite proporcionarle a tu clúster acceso detallado 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 VM personalizada), haz lo siguiente:

    1. Habilita cuentas de servicio para conectarlas entre proyectos.

    2. Enable the Dataproc API.

      Enable the API

  2. Otorga a tu cuenta de correo electrónico (el usuario que crea el clúster) el rol de usuario de cuenta de servicio en el proyecto de la cuenta de servicio o, para un control más detallado, en la cuenta de servicio de VM personalizada en el proyecto de la cuenta de servicio.

    Para obtener más información: Consulta Administra el acceso a proyectos, carpetas y organizaciones para otorgar roles a nivel del proyecto y Administra el acceso a las cuentas de servicio para otorgar roles a nivel de la cuenta de servicio.

    Ejemplos de la CLI de gcloud:

    • El siguiente comando de muestra le otorga al usuario el rol de usuario de cuenta de servicio a nivel del 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 electrónico de tu cuenta de usuario, en el formato: user:user-name@example.com.

    • El siguiente comando de muestra le otorga al usuario el rol de usuario de cuenta de servicio a nivel de la 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 electrónico de tu cuenta de usuario, en el formato: user:user-name@example.com.

  3. Otorga a la cuenta de servicio de VM personalizada el rol de 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. Otorga a la cuenta de servicio del agente de servicio de Dataproc en el proyecto del clúster los roles de Usuario de cuenta de servicio y Creador de tokens de cuenta de servicio en el proyecto de la cuenta de servicio o, para un control más detallado, la cuenta de servicio de VM personalizada en el proyecto de la cuenta de servicio. De esta manera, 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 VM de Dataproc personalizada en el proyecto de la cuenta de servicio.

    Para obtener más información: Consulta Administra el acceso a proyectos, carpetas y organizaciones para otorgar roles a nivel del proyecto y Administra el acceso a las cuentas de servicio para otorgar roles a nivel de la cuenta de servicio.

    Ejemplos de la CLI de gcloud:

    • Los siguientes comandos de muestra otorgan a la cuenta de servicio del agente de servicio de Dataproc en el proyecto del clúster los roles de usuario de cuenta de servicio y creador de tokens de cuenta de servicio a nivel del 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 muestra otorgan a la cuenta de servicio del agente de servicio de Dataproc en el proyecto del clúster los roles de usuario de cuenta de servicio y creador de tokens de cuenta de servicio a nivel de la cuenta de servicio de 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. Otorga a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto del clúster el rol de creador de tokens de cuenta de servicio en el proyecto de la cuenta de servicio o, para un control más detallado, la cuenta de servicio de VM personalizada en el proyecto de la cuenta de servicio. De esta manera, le otorgas a la cuenta de servicio del agente de servicio de Compute Agent en el proyecto del clúster la capacidad de crear tokens para la cuenta de servicio de VM de Dataproc personalizada en el proyecto de la cuenta de servicio.

    Para obtener más información: Consulta Administra el acceso a proyectos, carpetas y organizaciones para otorgar roles a nivel del proyecto y Administra el acceso a las cuentas de servicio para otorgar roles a nivel de la cuenta de servicio.

    Ejemplos de la CLI de gcloud:

    • El siguiente comando de muestra otorga a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto del clúster el rol de creador de tokens de cuenta de servicio a nivel del 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 muestra otorga a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto del clúster el rol de creador de tokens de cuenta de servicio a nivel de la 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"
     

Crea el clúster

¿Qué sigue?