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 de VM de Dataproc: Las VM de un clúster de Dataproc usan esta cuenta de servicio para las operaciones del plano de datos de Dataproc, como leer y escribir datos desde y hacia Cloud Storage y BigQuery (consulta Cuenta de servicio de VM de Dataproc (identidad del plano de datos)). La cuenta de servicio predeterminada de Compute Engine,
[project-number]-compute@developer.gserviceaccount.com
, se usa como la cuenta de servicio de VM de Dataproc, a menos que especifiques una cuenta de servicio de VM cuando creas un clúster.La función Trabajador de Dataproc proporciona a la cuenta de servicio de VM los permisos mínimos necesarios para operar con Dataproc. Se necesitan funciones adicionales para otorgar permisos para leer y escribir datos en recursos de Google Cloud, como BigQuery.
Cuenta de servicio del agente de servicio de Dataproc: Dataproc crea esta cuenta de servicio con la función Agente de servicio de Dataproc en el proyecto de Google Cloud del 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 VM del clúster (consulta Agente de servicio de Dataproc [identidad del plano de control]).
De forma predeterminada, Dataproc usa
service-[project-number]@dataproc-accounts.iam.gserviceaccount.com
como la cuenta de agente de servicio. Si esa cuenta de servicio no tiene permiso, Dataproc usa la cuenta de agente de servicio de las API de Google,[project-number]@cloudservices.gserviceaccount.com
, para las operaciones del plano de control.
Redes de VPC compartidas: Si el clúster usa una red de VPC compartida, un administrador de VPC compartida debe otorgar a ambas cuentas de servicio anteriores la función Usuario de red para el proyecto host de VPC compartida. Para obtener más información, consulte:
- Crea un clúster que use una red de VPC en otro proyecto
- Documentación de VPC compartida: cómo configurar cuentas de servicio como Administradores de proyectos de servicio
Permisos de acceso a la VM de Dataproc
Los permisos de acceso a VM y las funciones de IAM trabajan en conjunto para limitar el acceso de VM a las APIs de
Google Cloud. Por ejemplo, si a las VM del clúster se les otorga solo el permiso https://www.googleapis.com/auth/storage-full
, las aplicaciones que se ejecutan en las VM 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ó una función de BigQuery con permisos amplios.
Una práctica recomendada es otorgar el permiso cloud-platform
amplio (https://www.googleapis.com/auth/cloud-platform
) a las VM y, luego, limitar el acceso a las VM mediante el otorgamiento de funciones de IAM específicas a la cuenta de servicio de VM.
Permisos de VM predeterminados de Dataproc. Si los alcances no se especifican cuando se crea un clúster (consulta gcloud dataproc cluster create --scopes), las VM de Dataproc tienen el siguiente conjunto predeterminado de alcances:
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). Usar una cuenta de servicio de VM con funciones de IAM asignadas te permite proporcionarle a tu clúster un acceso detallado a los recursos del proyecto.
Pasos preliminares
Crea la cuenta de servicio de VM personalizada dentro del proyecto en el que se creará el clúster.
Otorga a la cuenta de servicio de VM personalizada la función de trabajador de Dataproc en el proyecto y cualquier función adicional que necesiten tus trabajos, como las funciones de lector y escritor de BigQuery (consulta Permisos y funciones de IAM de Dataproc).
Ejemplo de la CLI de gcloud:
- El siguiente comando de muestra otorga a la cuenta de servicio de VM personalizada en el proyecto de clúster la función 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 una función personalizada: En lugar de otorgar a la cuenta de servicio la función predefinida
Worker
de Dataproc, puedes otorgar a la cuenta de servicio una función personalizada que contenga permisos de función de trabajador, pero limita los permisosstorage.objects.*
.- La función personalizada debe otorgar, como mínimo, a la cuenta de servicio de VM los permisos
storage.objects.create
,storage.objects.get
ystorage.objects.update
sobre los objetos en los buckets temporales y de etapa de pruebas de Dataproc y en cualquier bucket adicional que necesiten los trabajos que se ejecutarán en el clúster.
- La función personalizada debe otorgar, como mínimo, a la cuenta de servicio de VM los permisos
Cree 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 minúsculas, números y guiones. No puede terminar con un guion. El nombre de un clúster borrado se puede volver a usar.
- REGION: 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 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: Permisos de acceso para instancias de VM de clústeres (por ejemplo,
https://www.googleapis.com/auth/cloud-platform
)
API de REST
Cuando completes la GceClusterConfig
como parte de la solicitud a la API clusters.create
, configura los siguientes campos:
serviceAccount
: La cuenta de servicio se ubicará en el proyecto en el que se creará el clúster, a menos que uses una cuenta de servicio de VM de un proyecto diferente.serviceAccountScopes
: Especifica los permisos de acceso para las instancias de VM de clúster (por ejemplo,https://www.googleapis.com/auth/cloud-platform
).
Consola
No se admite la configuración de una cuenta de servicio de VM de Dataproc
en la consola de Google Cloud. Puedes configurar el permiso de acceso cloud-platform
en las VMs del clúster cuando creas el clúster si haces clic en “Habilita el permiso de Cloud Platform en 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 Google Cloud Console.
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 el 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). Usar una cuenta de servicio de VM personalizada con funciones de IAM asignadas te permite proporcionarle a tu clúster un acceso detallado a los recursos del proyecto.
Pasos preliminares
En el proyecto de la cuenta de servicio (el proyecto en el que se encuentra la cuenta de servicio de la VM personalizada), haz lo siguiente:
Habilita las cuentas de servicio para vincular entre proyectos.
Habilita Dataproc API.
Otorga a tu cuenta de correo electrónico (el usuario que crea el clúster) la función de usuario de cuenta de servicio en el proyecto de cuenta de servicio o, para un control más detallado, a la cuenta de servicio de VM personalizada en el proyecto de cuenta de servicio.
Para obtener más información: Consulta Administra el acceso a proyectos, carpetas y organizaciones para otorgar funciones a nivel de proyecto y Administra el acceso a las cuentas de servicio para otorgar funciones a nivel de cuenta de servicio.
Ejemplos de la CLI de gcloud:
- El siguiente comando de muestra otorga al usuario la función de 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 electrónico de tu cuenta de usuario en el formatouser:user-name@example.com
.- El siguiente comando de muestra otorga al usuario la función 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 formatouser:user-name@example.com
.Otorga a la cuenta de servicio de VM personalizada la función 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"
Otorga a la cuenta de servicio del agente de servicio de Dataproc en el proyecto de clúster las funciones Usuario de cuenta de servicio y Creador de tokens de cuenta de servicio en el proyecto de cuenta de servicio o, para un control más detallado, en la cuenta de servicio de VM personalizada en el proyecto de 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 la 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 funciones a nivel de proyecto y Administra el acceso a las cuentas de servicio para otorgar funciones a nivel de 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 las funciones de 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 muestra otorgan a la cuenta de servicio del agente de servicio de Dataproc en el proyecto del clúster las funciones de usuario de cuenta de servicio y creador de tokens de cuenta de servicio a nivel de 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"
Otorga a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto de clúster la función Creador de tokens de cuenta de servicio en el proyecto de cuenta de servicio o, para un control más detallado, a la cuenta de servicio de VM personalizada en el proyecto de 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 personalizada de la VM de Dataproc 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 funciones a nivel de proyecto y Administra el acceso a las cuentas de servicio para otorgar funciones a nivel de 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 de clúster la función de creador de tokens de cuentas de servicio 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 muestra otorga a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto de clúster la función de creador de tokens de cuentas de servicio a nivel de cuenta de servicio de 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"
Cree el clúster
¿Qué sigue?
- Cuentas de servicio
- Permisos de Dataproc y funciones de IAM
- Principales de Dataproc y sus funciones
- Multiusuario de seguridad basado en la cuenta de servicio de Dataproc
- Autenticación del clúster personal de Dataproc
- IAM detallada de Dataproc