Las cargas de trabajo por lotes y las sesiones interactivas de Serverless for Apache Spark se ejecutan con credenciales de usuario final o de cuenta de servicio. Cuando se usan credenciales de cuenta de servicio, la cuenta de servicio que se usa para ejecutar cargas de trabajo por lotes o sesiones interactivas depende de la versión de tiempo de ejecución del lote o la sesión.
Cuentas de servicio de tiempo de ejecución anteriores a la versión 3.0
Las versiones de tiempo de ejecución de Spark anteriores a 3.0 con credenciales de cuenta de servicio usan la
cuenta de servicio predeterminada de Compute Engine o una cuenta de servicio personalizada especificada por el usuario
para enviar una carga de trabajo por lotes o crear una sesión interactiva.
Cuentas de servicio de tiempo de ejecución 3.0 o versiones posteriores
Las versiones de tiempo de ejecución de Spark 3.0 y posteriores con credenciales de cuenta de servicio usan una
cuenta de servicio personalizada especificada por el usuario para enviar una carga de trabajo por lotes o crear una
sesión interactiva.
Los tiempos de ejecución de Serverless for Apache Spark 3.0 y versiones posteriores crean la cuenta de servicio
Agente de servicio del nodo de Dataproc Resource Manager, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, con el
rol
Agente de servicio del nodo de Dataproc Resource Manager
en un proyecto de usuario de Dataproc Google Cloud . Esta cuenta de servicio
realiza las siguientes operaciones del sistema en los recursos de Serverless for Apache Spark
ubicados en el proyecto en el que se crea una carga de trabajo:
- Cloud Logging y Cloud Monitoring
- Operaciones básicas del nodo de Dataproc Resource Manager, como
get,heartbeatymintOAuthToken
Visualiza y administra los roles de la cuenta de servicio de IAM
Para ver y administrar los roles otorgados a la carga de trabajo por lotes o a la cuenta de servicio de la sesión, haz lo siguiente:
En la Google Cloud consola de, dirígete a la página IAM.
Haz clic en Incluir asignaciones de roles proporcionadas por Google.
Visualiza los roles que se muestran para la carga de trabajo por lotes o la cuenta de servicio predeterminada o personalizada de la sesión
En la siguiente imagen, se muestra el rol Trabajador de Dataproc requerido para la cuenta de servicio predeterminada de Compute Engine,
project_number-compute@developer.gserviceaccount.com, que Serverless for Apache Spark usa de forma predeterminada como la cuenta de servicio de la carga de trabajo o la sesión.
El rol de trabajador de Dataproc asignado a la cuenta de servicio predeterminada de Compute Engine en la sección IAM de la Google Cloud consola. Puedes hacer clic en el ícono de lápiz que se muestra en la fila de la cuenta de servicio para otorgar o quitar roles de cuenta de servicio.
Cómo usar una cuenta de servicio entre proyectos
Puedes enviar una carga de trabajo por lotes que use una
cuenta de servicio de un proyecto diferente al proyecto de 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 si a la cuenta de servicio del otro proyecto se le asignaron roles de IAM que proporcionan acceso detallado a los recursos de ese proyecto.
Pasos para la configuración
Los ejemplos de esta sección se aplican al envío de una carga de trabajo por lotes
que se ejecuta con una versión de tiempo de ejecución anterior a 3.0.
En el proyecto de cuenta de servicio, haz lo siguiente:
Habilita cuentas de servicio para conectarlas entre proyectos.
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 theserviceusage.services.enablepermission. Learn how to grant roles.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 cuenta de servicio o, para un control más detallado, la cuenta de servicio en el proyecto de 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 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 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 muestra 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.
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"
En el proyecto por lotes, haz lo siguiente:
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 cuentas de servicio en el proyecto de cuenta de servicio o, para un control más detallado, la cuenta de servicio en el proyecto de cuenta de servicio. De esta manera, permitirás 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 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 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 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@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 muestra 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 creador de tokens de cuentas 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"
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 en el proyecto de cuenta de servicio o, para un control más detallado, la cuenta de servicio en el proyecto de cuenta de servicio. De esta manera, otorgas a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto por lotes la capacidad de crear tokens para la cuenta de servicio en el proyecto de 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 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 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 muestra otorga a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto de clúster el rol de creador de tokens de cuentas 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@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 cuenta de servicio como la cuenta de servicio que se usará para la carga de trabajo por lotes.
Soluciona problemas de fallas basadas en permisos
Los permisos incorrectos o insuficientes para la cuenta de servicio que usa tu carga de trabajo por lotes o sesión pueden provocar fallas en la creación de lotes o sesiones que informan un mensaje de error "No se pudo inicializar el nodo de procesamiento del controlador para el lote en 600 segundos". Este error indica que el controlador de Spark no pudo iniciarse dentro del período de tiempo de espera asignado, a menudo debido a la falta de acceso necesario a los Google Cloud recursos.
Para solucionar este problema, verifica que tu cuenta de servicio tenga los siguientes roles o permisos mínimos:
- Rol de trabajador de Dataproc (
roles/dataproc.worker): Este rol otorga los permisos necesarios para que Serverless for Apache Spark administre y ejecute cargas de trabajo y sesiones de Spark. - Visualizador de objetos de almacenamiento (
roles/storage.objectViewer), Creador de objetos de almacenamiento (roles/storage.objectCreator) o Administrador de objetos de almacenamiento (roles/storage.admin): Si tu aplicación de Spark lee o escribe en buckets de Cloud Storage, la cuenta de servicio necesita los permisos adecuados para acceder a los buckets. Por ejemplo, si tus datos de entrada están en un bucket de Cloud Storage,Storage Object Vieweres obligatorio. Si tu aplicación escribe resultados en un bucket de Cloud Storage,Storage Object CreatoroStorage Object Admines necesario. - Editor de datos de BigQuery (
roles/bigquery.dataEditor) o Visualizador de datos de BigQuery (roles/bigquery.dataViewer): Si tu aplicación de Spark interactúa con BigQuery, verifica que la cuenta de servicio tenga los roles de BigQuery adecuados. - Permisos de Cloud Logging: La cuenta de servicio necesita permisos
para escribir registros en Cloud Logging para una depuración eficaz. Por lo general, el
Logging Writerrol (roles/logging.logWriter) es suficiente.
Fallas comunes relacionadas con permisos o acceso
Falta el rol
dataproc.worker: Sin este rol principal, la infraestructura de Serverless for Apache Spark no puede aprovisionar ni administrar correctamente el nodo del controlador.Permisos insuficientes de Cloud Storage: Si tu aplicación de Spark intenta leer datos de entrada o escribir resultados en un bucket de Cloud Storage sin los permisos necesarios de la cuenta de servicio, el controlador puede fallar en la inicialización porque no tiene acceso a recursos críticos.
Problemas de red o firewall: Los Controles del servicio de VPC o las reglas de firewall pueden bloquear de forma involuntaria el acceso de la cuenta de servicio a Google Cloud las APIs o los recursos.
Para verificar y actualizar los permisos de la cuenta de servicio, haz lo siguiente:
- Ve a la página IAM y administración > IAM en la Google Cloud consola de.
- Ubica la cuenta de servicio que se usa para tus cargas de trabajo por lotes o sesiones.
- Verifica que se asignen los roles necesarios. Si no es así, agrégalos.
Para obtener una lista de los roles y permisos de Serverless for Apache Spark, consulta Permisos de Serverless for Apache Spark y roles de IAM.