本页面介绍服务帐号和虚拟机访问权限范围,以及它们如何与 Dataproc 配合使用。
什么是服务帐号?
服务帐号是一种特殊帐号,在 Compute Engine 虚拟机 (VM) 实例上运行的服务和应用可以使用此帐号与其他 Google Cloud API 进行交互。应用可以使用服务帐号凭据向自身授权使用一组 API,并在已授予服务帐号的权限中对虚拟机执行操作。
Dataproc 服务帐号
为以下服务帐号授予在集群所在的项目中执行 Dataproc 操作所需的权限。
Dataproc 虚拟机服务帐号:Dataproc 集群中的虚拟机将此服务帐号用于 Dataproc 数据平面操作,例如在 Cloud Storage 和 BigQuery 中读写数据(请参阅 Dataproc 虚拟机服务帐号(数据平面身份))。Compute Engine 默认服务帐号
[project-number]-compute@developer.gserviceaccount.com
用作 Dataproc 虚拟机服务帐号,除非您在创建集群时指定用户管理的虚拟机服务帐号。Dataproc Worker 角色可为虚拟机服务帐号提供使用 Dataproc 所需的最低权限。如需授予对 Google Cloud 资源(例如 BigQuery)的数据读写权限,还需具备其他角色。
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 对象中设置 serviceAccount
和 serviceAccountScopes
。
控制台
目前不支持在 Cloud Console 中设置用户管理的 Dataproc 虚拟机服务帐号。您可以在 Cloud Console 中 Dataproc 创建集群页面上的管理安全性面板的项目访问权限部分,点击“允许 API 访问同一项目中的所有 Google Cloud 服务”,从而为集群中的虚拟机设置“云平台”范围。

后续步骤
- 服务帐号
- Dataproc 权限和 IAM 角色
- Dataproc 主帐号和角色
- 基于 Dataproc 服务帐号的安全多租户
- Dataproc 个人集群身份验证
- Dataproc Granular IAM