Dataproc 服务帐号

本页面介绍服务帐号和虚拟机访问权限范围,以及它们如何与 Dataproc 配合使用。

什么是服务帐号?

服务帐号是一种特殊帐号,在 Compute Engine 虚拟机 (VM) 实例上运行的服务和应用可以使用此帐号与其他 Google Cloud API 进行交互。应用可以使用服务帐号凭据向自身授权使用一组 API,并在已授予服务帐号的权限中对虚拟机执行操作。

Dataproc 服务帐号

为以下服务帐号授予在集群所在的项目中执行 Dataproc 操作所需的权限。

  • Dataproc Service Agent 服务帐号:Dataproc 在 Dataproc 用户的 Google Cloud 项目中创建具有 Dataproc Service Agent 角色的此服务帐号。当您创建集群时,不能将此服务帐号替换为用户指定的服务帐号。 此服务帐号代理可用于执行 Dataproc 控制平面操作,例如创建、更新和删除集群虚拟机的操作(请参阅 Dataproc Service Agent(控制平面身份))。

    默认情况下,Dataproc 使用 service-[project-number]@dataproc-accounts.iam.gserviceaccount.com 作为服务帐号。如果该服务帐号不存在,Dataproc 会将 Google API 服务代理帐号 [project-number]@cloudservices.gserviceaccount.com 用于控制平面操作。

共享 VPC 网络:如果集群使用共享 VPC 网络,Shared VPC Admin 必须向以上两个服务帐号授予共享 VPC 主项目的 Network User 角色。有关详情,请参阅:

Dataproc 虚拟机访问权限范围

虚拟机访问权限范围用于授予或限制虚拟机实例对 API 的访问权限。它们与虚拟机服务帐号协同工作来确定 API 访问权限。例如,如果仅向集群虚拟机授予 https://www.googleapis.com/auth/storage-full 范围,则在集群虚拟机上运行的应用可以调用 Cloud Storage API,但是它们无法向 BigQuery 发出请求,即使用于运行它们的虚拟机服务帐号将被授予具有广泛权限的 BigQuery 角色也不例外。

默认 Dataproc 虚拟机范围。如果在创建集群时未指定范围(请参阅 gcloud dataproc 集群创建 --范围),Dataproc 虚拟机将具有以下默认范围集:

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

如果您在创建集群时指定了范围,则集群虚拟机将拥有您指定的范围以及下面的必需的最小范围集(即使您未指定这些范围):

https://www.googleapis.com/auth/cloud.useraccounts.readonly
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/logging.write

使用用户管理的虚拟机服务帐号创建集群

您可以在创建集群时指定虚拟机服务帐号。Dataproc 不支持在创建集群后指定或更改虚拟机服务帐号。

为什么要指定用户管理的虚拟机服务帐号?服务帐号具有授予它们的 IAM 角色。在创建 Dataproc 集群时指定用户管理的虚拟机服务帐号,可让您创建对项目资源具有精细访问权限和控制的集群。通过不同的用户管理的虚拟机服务帐号和不同的 Dataproc 集群,您可以设置对 Cloud 资源具有不同访问权限的集群。

在创建集群之前,请在将在其中创建集群的项目中创建服务帐号。向服务帐号授予 Dataproc Worker 角色以及作业所需的任何其他角色,例如,允许在 Google Cloud 资源(例如 BigQuery)中读写数据。

gcloud 命令

使用 gcloud clusters create 命令创建具有用户指定的虚拟机服务帐号和虚拟机访问权限范围的新集群。

gcloud dataproc clusters create cluster-name \
    --region=region \
    --service-account=service-account-name@project-id.iam.gserviceaccount.com \
    --scopes=scope[, ...]

REST API

clusters.create API 请求的 GceClusterConfig 对象中设置 serviceAccountserviceAccountScopes

控制台

目前不支持在 Cloud Console 中设置用户管理的 Dataproc 虚拟机服务帐号。您可以点击 Cloud Console 中 Dataproc 创建集群页面上管理安全性面板的项目访问权限部分中的“允许 API 访问同一个项目中的所有 Google Cloud 服务”,设置集群中虚拟机上的“cloud-platform”范围。

后续步骤