本页面介绍服务账号和虚拟机访问权限范围,以及它们如何与 Managed Service for Apache Spark 配合使用。
从 2020 年 8 月 3 日开始实施安全要求: Managed Service for Apache Spark 用户必须具有服务账号 ActAs 权限才能部署 Managed Service for Apache Spark 资源,例如创建集群和提交作业。
Service Account User 角色包含此权限。如需了解所需的 Managed Service for Apache Spark 角色,请参阅用于服务帐号验证的角色
。
现有 Managed Service for Apache Spark 用户选择启用: 从 2020 年 8 月 3 日起,现有 Managed Service for Apache Spark 用户可以选择启用 此安全要求(请参阅 保护 Managed Service for Apache Spark、Dataflow 和 Cloud Data Fusion)。
什么是服务账号?
服务账号是一种特殊账号 ,在 Compute Engine 虚拟机实例上运行的服务和应用可以使用此账号与其他 Google Cloud API 进行交互。应用可以使用服务帐号凭证向自身授权使用一组 API,并在已授予服务帐号的权限中对虚拟机执行操作。
Managed Service for Apache Spark 集群服务账号
以下服务账号必须具有在集群所在的项目中执行 Managed Service for Apache Spark 操作所需的权限。
Managed Service for Apache Spark 虚拟机服务帐号
Managed Service for Apache Spark 集群中的虚拟机使用服务帐号来执行
Managed Service for Apache Spark 数据平面操作。
除非您在创建集群时指定
自定义服务账号
,否则 Compute Engine 默认服务账号
project_number-compute@将用作虚拟机服务帐号。虚拟机服务帐号必须具有
Managed Service for Apache Spark Worker
角色,该角色包含 Managed Service for Apache Spark 数据
平面操作所需的权限。如需了解详情,请参阅
Managed Service for Apache Spark 角色。
查看虚拟机服务帐号角色
如需查看向 Managed Service for Apache Spark 虚拟机服务账号授予的角色,请执行以下操作:
在 Google Cloud 控制台中,前往 IAM 页面。
点击包括 Google 提供的角色授权。
查看为虚拟机服务帐号列出的角色。下图显示了为 Managed Service for Apache Spark 在默认情况下用作虚拟机服务帐号的 Compute Engine 默认服务账号 (
project_number-compute@) 列出的必需的 Dataproc Worker 角色。
您可以点击服务帐号行上显示的铅笔图标,以 授予或移除服务帐号。
Managed Service for Apache Spark Service Agent 服务帐号
Managed Service for Apache Spark 会创建
Service Agent 服务账号
service-project_number@dataproc-accounts.,并在项目中向该服务帐号授予
Managed Service for Apache Spark Service Agent
角色。 Google Cloud 此服务
账号可执行 Managed Service for Apache Spark 控制平面
操作,例如创建、更新和删除
集群虚拟机。创建集群时,您无法将此服务帐号替换为自定义虚拟机服务账号。
在共享 VPC 网络中向 Service Agent 服务帐号授予角色
如果 Managed Service for Apache Spark 集群使用共享 VPC 网络,则共享 VPC 管理员必须向 Managed Service for Apache Spark Service Agent 服务账号 授予适用于共享 VPC 宿主项目的 Network User 角色。详情请参阅以下内容:
- 创建使用另一个 项目中的 VPC 网络的集群
- 共享 VPC 文档:将服务账号配置为服务项目管理员
创建使用自定义虚拟机服务帐号的集群
创建集群时,您可以指定集群将用于 Managed Service for Apache Spark 数据平面操作的自定义 虚拟机服务账号 ,而不是使用默认虚拟机服务账号 (在创建集群后,您无法更改虚拟机服务帐号)。使用分配有 IAM 角色的虚拟机服务帐号 ,您可以为集群提供精细的项目资源访问权限。
初步步骤
在将要创建集群的项目中 创建自定义虚拟机服务账号。
向自定义虚拟机服务帐号授予适用于该项目的 Managed Service for Apache Spark Worker 角色以及作业所需的任何其他角色,例如 BigQuery Reader and Writer 角色(请参阅Managed Service for Apache Spark roles)。
gcloud CLI 示例:
- 以下示例命令会在项目级别向集群项目中的自定义虚拟机服务帐号授予 Dataproc Worker 角色:
gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID. \ --role="roles/dataproc.worker"
- 考虑使用自定义角色:您可以向服务账号授予包含 Worker 角色权限但限制
storage.objects.*权限的自定义角色,而不是向服务帐号授予预定义的 Dataproc Worker 角色 (roles/dataproc.worker)。- 自定义角色必须至少向虚拟机服务帐号授予对
Managed Service for Apache Spark 暂存存储分区和临时存储分区
以及在
集群上运行的作业所需的任何其他存储分区上的对象的
storage.objects.create、storage.objects.get和storage.objects.update权限。
- 自定义角色必须至少向虚拟机服务帐号授予对
Managed Service for Apache Spark 暂存存储分区和临时存储分区
以及在
集群上运行的作业所需的任何其他存储分区上的对象的
创建集群
- 在项目中创建集群。
Google Cloud 控制台
不支持在控制台中设置 Managed Service for Apache Spark 虚拟机服务帐号。
如需在创建集群时在集群虚拟机上设置
cloud-platform 访问权限范围,请执行以下操作:
- 打开“创建集群”页面。
- 点击其他配置 以展开该部分。
- 修改安全 。
- 在打开的面板中,选择项目访问权限下的为此集群启用 cloud-platform 范围对应的复选框。
gcloud CLI
使用 gcloud dataproc clusters create 命令,创建使用自定义虚拟机服务帐号的集群。
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID. \ --scopes=SCOPE
替换以下内容:
- CLUSTER_NAME:集群名称(在项目中必须是唯一的)。 该名称必须以小写字母开头,最多可包含 51 个小写字母、数字和连字符。它不能以连字符结尾。已删除集群的名称可以再次使用。
- REGION:集群所在的区域。
- SERVICE_ACCOUNT_NAME:服务账号名称。
- PROJECT_ID:包含您的 虚拟机服务账号的项目的 Google Cloud 项目 ID。这是您将在其中创建集群的项目的 ID,或者是另一项目的 ID(如果您要创建使用另一项目中的自定义虚拟机服务帐号的集群)。
- SCOPE:访问权限范围,用于集群虚拟机实例(例如
https://www.googleapis.com/auth/cloud-platform)。
REST API
在 clusters.create API 请求中完成 GceClusterConfig 后,请设置以下字段:
serviceAccount:除非您使用的是来自其他项目的虚拟机服务账号,否则服务账号将位于您要在其中创建集群的项目中。serviceAccountScopes:为集群虚拟机实例指定访问权限范围(例如https://www.googleapis.com/auth/cloud-platform)。
创建使用另一项目的自定义虚拟机服务帐号的集群
创建集群时,您可以指定集群将用于 Managed Service for Apache Spark 数据平面操作的自定义 虚拟机服务账号 ,而不是使用 默认虚拟机服务账号 (在创建集群后,您无法指定自定义虚拟机服务帐号)。使用分配有 IAM 角色的 自定义虚拟机服务帐号,您可以为集群提供精细的项目资源访问权限。
初步步骤
在服务账号项目(自定义虚拟机服务账号所在的项目)中:
启用 Dataproc API。
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则您可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。
向您的电子邮件账号(创建集群的用户)授予适用于服务帐号项目的 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。向自定义虚拟机服务帐号授予适用于集群项目的 Managed Service for Apache Spark Worker 角色。
gcloud CLI 示例:
gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID. \ --role="roles/dataproc.worker"
向集群项目中的 Managed Service for Apache Spark Service Agent 服务账号 授予适用于服务帐号项目的 Service Account User 和 Service Account Token Creator 角色,或者向服务帐号项目中的自定义虚拟机服务帐号授予这些角色,以实现更精细的控制。通过执行此操作,您使集群项目中的 Dataproc 服务代理服务帐号可以为服务帐号项目中的自定义 Dataproc 虚拟机服务帐号创建令牌。
如需了解详情:请参阅管理对项目、文件夹和组织的访问权限,以便在项目级别授予角色,并参阅管理对服务账号的访问权限,以便在服务账号级别授予角色。
gcloud CLI 示例:
- 以下示例命令会在项目级别向集群项目中的 Managed Service for Apache Spark Service Agent 服务帐号授予 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. \ --role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts. \ --role="roles/iam.serviceAccountTokenCreator"
- 以下示例命令会在虚拟机服务帐号级别向集群项目中的 Managed Service for Apache Spark Service Agent 服务帐号授予 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. \ --role="roles/iam.serviceAccountUser"
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts. \ --role="roles/iam.serviceAccountTokenCreator"
向集群项目中的 Compute Engine Service Agent 服务账号授予适用于服务帐号项目的 Service Account Token Creator 角色,或者向服务帐号项目中的 自定义虚拟机服务帐号授予该角色,以实现更精细的控制。通过执行此操作,您使集群项目中的 Compute Engine 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. \ --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. \ --role="roles/iam.serviceAccountTokenCreator"