Dataproc 主帐号和角色

当您使用 Dataproc 服务创建集群并在集群上运行作业时,该服务会在您的项目中设置必要的 Dataproc 权限和 IAM 角色,以访问和使用完成这些任务所需的 Google Cloud 资源。但是,如果您要完成跨项目工作(例如,访问另一个项目中的数据),则需要设置必要的角色和权限以访问跨项目资源。

为帮助您成功执行跨项目工作,本文档列出了使用 Dataproc 服务的不同主帐号以及这些主帐号访问和使用 Google Cloud 资源所需的角色和关联权限。

Dataproc API 用户(最终用户身份)

示例:username@example.com

这是调用 Dataproc 服务的最终用户。最终用户通常是个人,但如果 Dataproc 是通过 API 客户端或其他 Google Cloud 服务(如 Compute Engine、Cloud Functions 或 Cloud Composer)调用的,最终用户也可以是服务帐号。

相关角色和权限:

背景知识

  • Dataproc API 提交的作业以 root 身份运行
  • Dataproc 集群继承项目范围的 Compute Engine SSH 元数据,除非您在创建集群时通过设置 --metadata=block-project-ssh-keys=true 明确阻止了该数据。(请参阅集群元数据
  • 如果您使用 gcloud compute ssh 进入 Dataproc 集群以通过命令行提交作业,则作业应在登录的用户名下运行,但默认情况下在虚拟机内并不“强制执行”此身份验证
  • 系统会为每个项目级层的 SSH 用户创建 HDFS 用户目录。这些 HDFS 目录是在集群部署时创建的,而新的(部署后)SSH 用户在现有集群上将无法看到 HDFS 目录

Dataproc 服务代理(控制平面身份)

示例:service-project-number@dataproc-accounts.iam.gserviceaccount.com

Dataproc 会在 Dataproc 用户的 Google Cloud 项目中创建这个具有 Dataproc Service Agent 角色的服务帐号。当您创建集群时,不能将此服务帐号替换为用户指定的服务帐号。除非您要创建使用另一个项目中的 VPC 网络的集群,否则无需配置此服务帐号。

此服务帐号可用于执行一系列广泛的系统操作,包括:

  • get 和 list 操作,用来确认资源(例如映像、防火墙、Dataproc 初始化操作和 Cloud Storage 存储分区)的配置
  • 自动创建 Dataproc 暂存存储分区(如果用户未指定暂存存储分区)
  • 将集群配置元数据写入暂存存储分区
  • 创建 Compute Engine 资源,包括虚拟机实例、实例组和实例模板

相关错误:“服务帐号没有读取或列出资源的权限。”

相关角色和权限:

  • 角色:Dataproc 服务代理

Dataproc 虚拟机服务帐号(数据平面身份)

示例:project-number-compute@developer.gserviceaccount.com

Dataproc 虚拟机以此服务帐号的身份运行。用户作业具有此服务帐号的权限 - 在 Dataproc 工作器虚拟机上,您的应用代码将在此服务帐号下运行。

在执行 Dataproc clusters.create API 请求时,您可以使用可选的 --service-account 标志和 gcloud dataproc clusters create 命令或使用 GceClusterConfig.serviceAccount 字段来指定用户管理的服务帐号。如果您在创建集群时未指定用户管理的服务帐号,则系统会使用上面示例中列出的 Compute Engine 默认服务帐号

虚拟机服务帐号必须具有以下权限:

  • 与 Dataproc 控制平面通信
  • 对 Dataproc 暂存存储分区执行读写操作的权限

根据工作要求,虚拟机服务帐号可能还需要具有以下权限:

  • 对 Cloud Storage、BigQuery、Cloud Logging 和其他 Google Cloud 资源执行读写操作的权限

相关角色和权限:

了解详情