Cuenta de servicio de Serverless para Apache Spark

En este documento, se describe cómo ver y administrar los roles de las cuentas de servicio de Identity and Access Management. Una carga de trabajo por lotes o una sesión interactiva de Serverless para Apache Spark se ejecuta como la cuenta de servicio predeterminada de Compute Engine, a menos que especifiques una cuenta de servicio personalizada cuando envíes una carga de trabajo por lotes, crees una sesión o crees una plantilla de entorno de ejecución de sesión.

Rol de trabajador de Dataproc requerido

La cuenta de servicio de la carga de trabajo de Serverless para Apache Spark debe tener el rol de trabajador de Dataproc de Identity and Access Management. La cuenta de servicio predeterminada de Compute Engine (project_number-compute@developer.gserviceaccount.com) que usa Serverless para Apache Spark tiene este rol de forma predeterminada. Si especificas tu propia cuenta de servicio para tu carga de trabajo por lotes, sesión o plantilla de sesión, debes otorgarle el rol de trabajador de Dataproc. Es posible que se necesiten roles adicionales para otras operaciones, como leer y escribir datos en BigQuery.

Cómo ver y administrar los roles de cuentas de servicio de IAM

Para ver y administrar los roles otorgados a la cuenta de servicio de la carga de trabajo de Serverless 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 carga de trabajo. 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 Serverless para Apache Spark usa de forma predeterminada como la cuenta de servicio de la carga de trabajo.

  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 entre proyectos

Puedes enviar una carga de trabajo por lotes de Serverless para Apache Spark que use una cuenta de servicio de un proyecto diferente del proyecto de la carga de trabajo por lotes (el proyecto en el que se envía el lote). En esta sección, el proyecto en el que se encuentra la cuenta de servicio se denomina service account project, y el proyecto en el que se envía el lote se denomina batch project.

¿Por qué usar una cuenta de servicio entre proyectos para ejecutar una carga de trabajo por lotes? Una posible razón es que a la cuenta de servicio del otro proyecto se le hayan asignado roles de IAM que proporcionan acceso detallado a los recursos de ese proyecto.

Pasos de la configuración

  1. En el proyecto de la cuenta de servicio, haz lo siguiente:

    1. Habilita cuentas de servicio para conectarlas entre proyectos.

    2. Enable the Dataproc API.

      Enable the API

    3. 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 del 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 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.
    4. Otorga a la cuenta de servicio el rol de Trabajador de Dataproc en el proyecto por lotes.

      Ejemplo de la CLI de gcloud:

      gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \
          --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --role="roles/dataproc.worker"
      
  2. En el proyecto por lotes, haz lo siguiente:

    1. Otorga a la cuenta de servicio del agente de servicio de Dataproc 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 del proyecto de la cuenta de servicio. De esta manera, permites que la cuenta de servicio del agente de servicio de Dataproc en el proyecto por lotes cree tokens para la cuenta de servicio 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 otorgan a la cuenta de servicio del agente de servicio de Dataproc en el proyecto por lotes los roles de usuario de cuenta de servicio y 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-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_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 Dataproc en el proyecto por lotes los roles de usuario de cuenta de servicio y de creador de tokens de cuenta de servicio a nivel de la cuenta de servicio:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_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-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      
    2. Otorga a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto por lotes 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 del 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 por lotes la capacidad de crear tokens para la cuenta de servicio 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 a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto por lotes el rol de creador de tokens de cuentas de servicio a nivel del proyecto:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      El siguiente comando de ejemplo otorga el rol de creador de tokens de cuenta de servicio a nivel de la cuenta de servicio a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto del clúster:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

Envía la carga de trabajo por lotes

Después de completar los pasos de configuración, puedes enviar una carga de trabajo por lotes. Asegúrate de especificar la cuenta de servicio en el proyecto de la cuenta de servicio como la cuenta de servicio que se usará para la carga de trabajo por lotes.