Cuentas de servicio de Managed Service para Apache Spark

En esta página, se describen las cuentas de servicio y los permisos de acceso de las VM, y cómo se usan con Managed Service para Apache Spark.

Requisito de seguridad a partir del 3 de agosto de 2020: Los usuarios de Managed Service para Apache Spark deben tener un permiso de cuenta de servicio ActAs para implementar recursos de Managed Service para Apache Spark, como crear clústeres y enviar trabajos. El rol de usuario de cuenta de servicio contiene este permiso. Consulta Roles para la autenticación de cuentas de servicio para obtener información sobre los roles necesarios de Managed Service para Apache Spark.

Habilita los usuarios existentes de Managed Service para Apache Spark: Los usuarios existentes de Managed Service para Apache Spark a partir del 3 de agosto de 2020 pueden aceptar este requisito de seguridad (consulta Protege Managed Service para Apache Spark, Dataflow y Cloud Data Fusion).

¿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 APIs 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 APIs y realizar acciones en la VM dentro de los permisos otorgados a la cuenta de servicio.

Cuentas de servicio del clúster de Managed Service para Apache Spark

Las siguientes cuentas de servicio deben tener los permisos necesarios para realizar acciones de Managed Service para Apache Spark en el proyecto en el que se encuentra el clúster.

Cuenta de servicio de VM de Managed Service para Apache Spark

Las VMs de un clúster de Managed Service para Apache Spark usan una cuenta de servicio para las operaciones del plano de datos de Managed Service para Apache Spark. La cuenta de servicio predeterminada de Compute Engine, project_number-compute@developer.gserviceaccount.com, se usa como cuenta de servicio de VM, a menos que especifiques una cuenta de servicio personalizada cuando crees un clúster. La cuenta de servicio de la VM debe tener el rol de trabajador de Managed Service para Apache Spark, que incluye los permisos necesarios para las operaciones del plano de datos de Managed Service para Apache Spark. Para obtener más información, consulta Roles de Managed Service para Apache Spark.

Visualiza los roles de la cuenta de servicio de la VM

Para ver los roles otorgados a la cuenta de servicio de la VM de Managed Service para Apache Spark, 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. Visualiza los roles que se indican para la cuenta de servicio de la VM. En la siguiente imagen, se muestra el rol Trabajador de Dataproc requerido que aparece en la cuenta de servicio predeterminada de Compute Engine (project_number-compute@developer.gserviceaccount.com) que Managed Service para Apache Spark usa de forma predeterminada como cuenta de servicio de VM.

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

Cuenta de servicio del agente de Managed Service para Apache Spark

Managed Service para Apache Spark crea la cuenta de servicio del agente de servicio, service-project_number@dataproc-accounts.iam.gserviceaccount.com, y otorga a la cuenta de servicio el rol de agente de servicio de Managed Service para Apache Spark en un proyecto Google Cloud . Esta cuenta de servicio realiza operaciones del plano de control de Managed Service para Apache Spark, como la creación, la actualización y la eliminación de las VMs del clúster. No puedes reemplazar esta cuenta de servicio por una cuenta de servicio de VM personalizada cuando creas un clúster.

Otorgamiento de rol a la cuenta de servicio del agente de servicio en una red de VPC compartida

Si un clúster de Managed Service para Apache Spark usa una red de VPC compartida, un administrador de VPC compartida debe otorgarle a la cuenta de servicio del agente de servicio de Managed Service para Apache Spark el rol de Usuario de red para el proyecto host de la VPC compartida. Para obtener más información, consulta lo siguiente:

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 Managed Service para Apache Spark en lugar de la cuenta de servicio de VM predeterminada (no puedes cambiar la cuenta de servicio de VM después de que se crea el clúster). Si usas una cuenta de servicio de VM con roles de IAM asignados, puedes proporcionar a tu clúster 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. Otorga a la cuenta de servicio de VM personalizada el rol de Trabajador de Managed Service para Apache Spark en el proyecto y cualquier rol adicional que necesiten tus trabajos, como los roles de lector y escritor de BigQuery (consulta Roles de Managed Service para Apache Spark).

    Ejemplo de la CLI de gcloud:

    • El siguiente comando de ejemplo 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 usar un rol personalizado: En lugar de otorgar a la cuenta de servicio el rol predefinido de trabajador de Dataproc (roles/dataproc.worker), puedes otorgarle un rol personalizado que contenga permisos de rol de trabajador, pero que limite los permisos de storage.objects.*.

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 en minúscula y puede contener hasta 51 letras en minúscula, números y guiones. No puede terminar con un guion. Se puede reutilizar el nombre de un clúster borrado.
  • 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: Es el ID del proyecto que contiene tu cuenta de servicio de VM. Google Cloud Este será el ID del proyecto en el que se creará tu clúster o el ID de otro proyecto si crearás un clúster con una cuenta de servicio de VM personalizada en otro proyecto.
  • SCOPE: Permisos de acceso para las instancias de VM del 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 Managed Service para Apache Spark en la consola de Google Cloud . Puedes establecer el permiso de acceso en las VMs del clúster cuando creas el clúster. Para ello, haz clic en "Habilita el permiso cloud-platform para este clúster" en la sección Acceso al proyecto del panel Administrar seguridad en la página Crear un clúster de Managed Service para Apache Spark en la consola de Google Cloud .cloud-platform

Crea 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 tu clúster usará para las operaciones del plano de datos de Managed Service para Apache Spark en lugar de usar la cuenta de servicio de VM predeterminada (no puedes especificar una cuenta de servicio de VM personalizada después de que se crea el clúster). Usar una cuenta de servicio de VM personalizada con roles de IAM asignados te permite proporcionar 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. Habilita la API de Dataproc

      Roles necesarios para habilitar las APIs

      Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

      Habilitar la 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 la 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 ejemplo 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 siguiente formato: user:user-name@example.com.

    • El siguiente comando de ejemplo 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 siguiente formato: user:user-name@example.com.

  3. Otorga a la cuenta de servicio de VM personalizada el rol de Worker de Managed Service para Apache Spark 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 Managed Service for Apache Spark 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, en 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 ejemplo otorgan a la cuenta de servicio del agente de Managed Service para Apache Spark 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 ejemplo otorgan a la cuenta de servicio del agente de servicio de Managed Service para Apache Spark en el proyecto del clúster los roles de usuario de cuenta de servicio y de 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, en la cuenta de servicio de la VM personalizada en el proyecto de la cuenta de servicio. De esta manera, 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 ejemplo otorga el rol de creador de tokens de cuenta de servicio a nivel del proyecto a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto del clúster:
    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 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 cuentas 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?