本页面介绍服务账号和虚拟机访问权限范围,以及它们如何与 Dataproc 配合使用。
什么是服务账号?
服务账号是一种特殊账号,在 Compute Engine 虚拟机 (VM) 实例上运行的服务和应用可以使用此账号与其他 Google Cloud API 进行交互。应用可以使用服务账号凭据向自身授权使用一组 API,并在已授予服务账号的权限中对虚拟机执行操作。
Dataproc 服务账号
为以下服务账号授予在集群所在的项目中执行 Dataproc 操作所需的权限。
Dataproc 虚拟机服务账号: Dataproc 集群中的虚拟机将此服务账号用于 Dataproc 数据平面操作。 Compute Engine 默认服务账号。
[project-number]-compute@developer.gserviceaccount.com
,已使用 作为 Dataproc 虚拟机服务账号,除非您指定 虚拟机服务账号 集群状态默认情况下,Compute Engine 系统会为默认服务账号授予 Project Editor 角色, 这包括为大多数 Google Cloud 服务创建和删除资源的权限 服务,包括执行 Dataproc 数据所需的权限 执行这方面的操作自定义服务账号:如果您指定 自定义服务账号时,您必须向自定义服务账号授予所需的权限 Dataproc 数据平面操作所需的资源。为此,您可以将 向服务账号授予 Dataproc Worker 角色 因为此角色拥有 Dataproc 数据所需的最低权限 执行这方面的操作还需要其他角色,才能授予 操作,例如在 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
,适用于控制平面 operations.
共享 VPC 网络:如果集群使用共享 VPC 网络,Shared VPC Admin 必须向以上两个服务账号授予共享 VPC 主项目的 Network User 角色。如需了解详情,请参阅以下主题:
Dataproc 虚拟机访问权限范围
虚拟机访问权限范围和 IAM 角色协同工作,限制对 Google Cloud 的虚拟机访问权限
API。例如,如果系统仅向集群虚拟机授予
https://www.googleapis.com/auth/storage-full
范围,多个应用正在运行
可以调用 Cloud Storage API,但无法
向 BigQuery 发出请求,即使它们以虚拟机服务账号身份运行也是如此
这个角色已被授予具有广泛权限的 BigQuery 角色。
最佳做法
授予宽泛的 cloud-platform
范围 (https://www.googleapis.com/auth/cloud-platform
)
然后向虚拟机授予特定访问权限
为虚拟机服务账号授予的 IAM 角色。
默认 Dataproc 虚拟机范围。如果范围不是 (请参阅 gcloud dataproc cluster create --scopes), Dataproc 虚拟机具有以下默认范围集:
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
如果您在创建集群时指定了范围,则集群虚拟机将拥有您指定的范围以及下面的必需的最小范围集(即使您未指定这些范围):
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
使用自定义虚拟机服务账号创建集群
创建集群时,您可以指定自定义 虚拟机服务账号 供集群用于 Dataproc 数据平面操作 默认虚拟机服务账号 (集群一经创建,您便无法更改虚拟机服务账号 )。使用具有已分配 IAM 角色的虚拟机服务账号 可让您为集群提供对项目资源的精细访问权限。
初步步骤
创建自定义虚拟机服务账号 将在其中创建集群
向自定义虚拟机服务账号授予 Dataproc 工作器 以及您的作业所需的任何其他角色,例如 BigQuery 读取者和写入者 角色(请参阅 Dataproc 权限和 IAM 角色)。
gcloud CLI 示例:
- 以下示例命令会授予自定义虚拟机服务账号 集群项目中的项目级 Dataproc Worker 角色:
gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role="roles/dataproc.worker"
- 考虑使用自定义角色:无需向服务授予
为该账号分配预定义的 Dataproc
Worker
角色,您可以向账号授予 服务账号 - 包含工作器角色权限的自定义角色 但会限制storage.objects.*
权限。- 自定义角色必须至少授予虚拟机服务账号
storage.objects.create
、storage.objects.get
和storage.objects.update
中 Dataproc 暂存存储分区和临时存储分区 以及将在 集群。
- 自定义角色必须至少授予虚拟机服务账号
创建集群
- 在项目中创建集群。
gcloud 命令
使用 gcloud dataproc clusters create 命令以使用自定义虚拟机服务账号创建集群。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --scopes=SCOPE
请替换以下内容:
- CLUSTER_NAME:集群名称,该名称在项目中必须是唯一的。 名称必须以小写字母开头,最多可以包含 51 个小写字母 字母、数字和连字符。但不能以连字符结尾。 可以重复使用的集群
- REGION:区域 集群所在的位置
- SERVICE_ACCOUNT_NAME:服务账号名称。
- PROJECT_ID:您的 Cloud SDK 所属的项目的 Google Cloud 项目 ID 虚拟机服务账号。这将是 将在其中创建集群的项目,或者是另一个项目的 ID(如果您是 在另一个集群中使用自定义虚拟机服务账号创建集群。
- SCOPE:集群虚拟机实例的访问权限范围(例如
https://www.googleapis.com/auth/cloud-platform
)。
REST API
在完成
GceClusterConfig
作为
clusters.create
API 请求中,请设置以下字段:
serviceAccount
:服务账号将位于 除非您使用的是 其他项目中的虚拟机服务账号。serviceAccountScopes
:指定 访问权限范围 (例如https://www.googleapis.com/auth/cloud-platform
)。
控制台
设置 Dataproc 虚拟机服务账号
不支持 Google Cloud 控制台中的资源。您可以将 cloud-platform
对集群的访问权限范围
创建集群时
“为此集群启用 cloud-platform 范围”
在管理安全设置的项目访问权限部分中
Dataproc 面板上的
创建集群
页面。
![](https://cloud.google.com/static/dataproc/images/console-scope.png?authuser=1&hl=zh-cn)
使用其他项目中的自定义虚拟机服务账号创建集群
创建集群时,您可以指定自定义 虚拟机服务账号 供集群用于 Dataproc 数据平面操作 默认虚拟机服务账号 (您不能在集群之后指定自定义虚拟机服务账号 )。使用已分配 IAM 角色的自定义虚拟机服务账号 可让您为集群提供对项目资源的精细访问权限。
初步步骤
在服务账号项目(自定义虚拟机服务账号所在的项目)中:
启用 Dataproc API。
向您的电子邮件账号(创建集群的用户)授予 Service Account User 角色 或者为了更精细地控制 服务账号项目中的自定义虚拟机服务账号。
有关详情,请参阅 管理对项目、文件夹和组织的访问权限 授予项目级角色 管理对服务账号的访问权限 在服务账号级别授予角色。
gcloud CLI 示例:
- 以下示例命令向用户授予 Service Account User 角色 在项目级拥有以下角色:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
注意:
USER_EMAIL
:按以下格式提供您的用户账号电子邮件地址:user:user-name@example.com
.- 以下示例命令向用户授予 Service Account User 角色 角色:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
注意:
USER_EMAIL
:按以下格式提供您的用户账号电子邮件地址:user:user-name@example.com
.向自定义虚拟机服务账号授予 Dataproc 工作器 角色。
gcloud CLI 示例:
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"
授予 Dataproc 服务代理服务账号 在集群项目中,Service Account User 角色 和 Service Account Token Creator 角色 为服务账号项目分配不同的角色,或者,为了更精细地控制 服务账号项目中的自定义虚拟机服务账号。如此一来, 则允许集群项目中的 Dataproc 服务代理服务账号 在服务账号项目中为自定义 Dataproc 虚拟机服务账号创建令牌。
有关详情,请参阅 管理对项目、文件夹和组织的访问权限 授予项目级角色 管理对服务账号的访问权限 在服务账号级别授予角色。
gcloud CLI 示例:
- 以下示例命令将向 Dataproc 服务代理授予 Service Account User 和 Service Account Token 项目级别的 Creator 角色:
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"
- 以下示例命令将向 Dataproc 服务代理授予 Service Account User 和 Service 虚拟机服务账号级别的 Account Token Creator 角色:
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"
授予 集群项目中的 Google API 服务代理服务账号 Service Account Token Creator 指定不同的角色 服务账号项目中的自定义虚拟机服务账号。 执行此操作后,您会在集群中向 Google API 服务代理服务账号授予 项目:为自定义 Dataproc 虚拟机服务创建令牌的功能 创建服务账号
有关详情,请参阅 管理对项目、文件夹和组织的访问权限 授予项目级角色 管理对服务账号的访问权限 在服务账号级别授予角色。
gcloud CLI 示例:
- 以下示例命令会授予 Google API 服务代理服务账号 在集群项目中拥有项目级别的 Service Account Token Creator 角色:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:CLUSTER_PROJECT_NUMBER@cloudservices.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
- 以下示例命令会授予 Google API 服务代理服务账号 在集群项目中,拥有虚拟机服务账号级别的 Service Account Token Creator 角色:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:CLUSTER_PROJECT_NUMBER@cloudservices.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
授予 集群项目中的 Compute Engine Service Agent 服务账号 Service Account Token Creator 指定不同的角色 服务账号项目中的自定义虚拟机服务账号。 这样,您就可以在集群中向 Compute Agent Service Agent 服务账号授予 项目:为自定义 Dataproc 虚拟机服务创建令牌的功能 创建服务账号
有关详情,请参阅 管理对项目、文件夹和组织的访问权限 授予项目级角色 管理对服务账号的访问权限 在服务账号级别授予角色。
gcloud CLI 示例:
- 以下示例命令会授予 Compute Engine Service Agent 服务账号 在集群项目中拥有项目级别的 Service Account Token Creator 角色:
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"
- 以下示例命令会授予 Compute Engine Service Agent 服务账号 在集群项目中,拥有虚拟机服务账号级别的 Service Account Token Creator 角色:
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"
创建集群
后续步骤
- 服务账号
- Dataproc 权限和 IAM 角色
- Dataproc 主账号和角色
- 基于 Dataproc 服务账号的安全多租户
- Dataproc 个人集群身份验证
- Dataproc Granular IAM