使用场景:对另一个项目中的 Dataproc 集群的访问权限控制

本页面介绍如何在部署和运行在其他 Google Cloud 项目中使用 Dataproc 集群的流水线时管理访问权限控制。

情况

默认情况下,在 Google Cloud 项目中启动 Cloud Data Fusion 实例时,该实例使用同一项目中的 Dataproc 集群部署和运行流水线。但是,您的组织可能要求您使用其他项目中的集群。对于此使用场景,您必须管理项目之间的访问权限。以下页面介绍了如何更改基准(默认)配置并应用适当的访问权限控制。

准备工作

如需了解此使用场景中的解决方案,您需要以下背景信息:

假设和范围

此用例具有以下要求:

  • 私有 Cloud Data Fusion 实例。出于安全考虑,组织可能会要求您使用此类实例。
  • BigQuery 来源和接收器。
  • 使用 IAM 进行访问权限控制,而不是使用基于角色的访问权限控制 (RBAC)。

解决方案

本解决方案比较了特定于基准和用例的架构和配置。

架构

下图比较了通过租户项目 VPC 在同一项目(基准)和不同项目中使用集群时,用于创建 Cloud Data Fusion 实例和运行流水线的项目架构。

基准架构

下图显示了项目的基准架构:

Cloud Data Fusion 中的租户、客户和 Dataproc 项目架构。

对于基准配置,您需要创建一个私有 Cloud Data Fusion 实例并运行流水线,无需进行其他自定义:

  • 您使用的是某个内置计算配置文件
  • 来源和接收器与实例位于同一项目中
  • 尚未向任何服务账号授予其他角色

如需详细了解租户和客户项目,请参阅网络

用例架构

此图显示了在另一个项目中使用集群时的项目架构:

Cloud Data Fusion 中的租户、客户和 Dataproc 项目架构。

配置

以下部分将基准配置与用例特定配置进行比较,这些配置用于通过默认的租户项目 VPC 在其他项目中使用 Dataproc 集群。

在以下用例说明中,客户项目是运行 Cloud Data Fusion 实例的位置,Dataproc 项目是启动 Dataproc 集群的位置。

租户项目 VPC 和实例

基准 使用场景
在上述基准架构图中,租户项目包含以下组件:
  • 默认 VPC,系统会自动创建。
  • Cloud Data Fusion 实例的物理部署。
此用例不需要额外配置。

客户项目

基准 使用场景
Google Cloud 项目是您部署和运行流水线的位置。默认情况下,当您运行流水线时,系统会在此项目中启动 Dataproc 集群。 在此用例中,您管理两个项目。在本页面上,客户项目是指运行 Cloud Data Fusion 实例的位置。
Dataproc 项目是指 Dataproc 集群启动的位置。

客户 VPC

基准 使用场景

从您(客户的)角度来看,客户 VPC 是 Cloud Data Fusion 在逻辑上所处的位置。


要点总结
您可以在项目的“VPC 网络”页面中找到客户 VPC 详细信息。

前往 VPC 网络

此用例不需要额外配置。

Cloud Data Fusion 子网

基准 使用场景

从您(客户的)角度来看,该子网在逻辑上是 Cloud Data Fusion 的逻辑位置。


要点
:此子网的区域与租户项目中 Cloud Data Fusion 实例的位置相同。
此用例不需要额外配置。

Dataproc 子网

基准 使用场景

运行流水线时启动 Dataproc 集群的子网。


重点小结
  • 对于此基准配置,Dataproc 在与 Cloud Data Fusion 实例相同的子网中运行。
  • Cloud Data Fusion 会将子网放置在 Cloud Data Fusion 的实例和子网所在的区域中。如果此区域中只有一个子网,则这些子网是相同的。
  • Dataproc 子网必须具有专用 Google 访问通道。

这是一个新子网,当您运行流水线时,系统会在该子网中启动 Dataproc 集群。


重点小结
  • 对于此新子网,将专用 Google 访问通道设置为开启
  • Dataproc 子网不需要与 Cloud Data Fusion 实例位于同一位置。

来源和接收器

基准 使用场景

提取数据的来源和加载数据的接收器,例如 BigQuery 来源和接收器。


要点总结
  • 提取和加载数据的作业必须在与数据集相同的位置进行处理,否则返回错误结果。
此页面上特定于用例的访问权限控制配置适用于 BigQuery 来源和接收器。

Cloud Storage

基准 使用场景

客户项目中的存储桶,有助于在 Cloud Data Fusion 和 Dataproc 之间传输文件。


重点小结
  • 您可以在临时集群的计算配置文件设置中,通过 Cloud Data Fusion 网页界面指定此存储桶。
  • 对于批处理和实时流水线或复制作业:如果您未在计算配置文件中指定存储桶,则 Cloud Data Fusion 会出于此目的在实例所在的项目中创建一个存储桶。
  • 即使对于静态 Dataproc 集群,在此基准配置中,存储桶也由 Cloud Data Fusion 创建,并且与 Dataproc 暂存存储桶和临时存储桶不同。
  • Cloud Data Fusion API Service Agent 具有内置权限,可在包含 Cloud Data Fusion 实例的项目中创建此存储桶。
此用例不需要额外配置。

来源和接收器使用的临时存储分区

基准 使用场景

由插件为您的来源和接收器创建的临时存储分区,例如由 BigQuery 接收器插件启动的加载作业。


重点小结
  • 您可以在配置来源和接收器插件属性时定义这些存储分区。
  • 如果您未定义存储桶,系统会在运行 Dataproc 的同一项目中创建一个存储桶。
  • 如果数据集是多区域数据集,则在同一范围内创建存储桶。
  • 如果在插件配置中定义了存储桶,则存储桶的区域必须与数据集的区域一致。
  • 如果您未在插件配置中定义存储桶,则流水线运行完毕后,系统会删除为您创建的存储桶。
对于此使用场景,您可以在任何项目中创建存储桶。

作为插件数据来源或接收器的存储分区

基准 使用场景
客户存储分区,您在插件(例如 Cloud Storage 插件和 FTP 到 Cloud Storage 插件)的配置中指定。 此用例不需要额外配置。

IAM:Cloud Data Fusion API 服务代理

基准 使用场景

启用 Cloud Data Fusion API 后,系统会自动将 Cloud Data Fusion API Service Agent 角色 (roles/datafusion.serviceAgent) 授予主要服务代理 Cloud Data Fusion 服务帐号


重点小结
  • 此角色包含与实例位于同一项目中的服务(例如 BigQuery 和 Dataproc)的权限。如需了解所有受支持的服务,请参阅角色详情
  • Cloud Data Fusion 服务帐号会执行以下操作:
    • 数据平面(流水线设计和执行)与其他服务通信(例如,在设计时与 Cloud Storage、BigQuery 和 Datastream 通信)。
    • 预配 Dataproc 集群。
  • 如果您要从 Oracle 来源进行复制,则还必须在执行该作业的项目中向此服务帐号授予 Datastream Admin 和 Storage Admin 角色。本页面未涉及复制功能使用场景。

对于此使用场景,请向 Dataproc 项目中的服务帐号授予 Cloud Data Fusion API Service Agent 角色。然后授予该项目中的以下角色:

  • Compute Network User 角色
  • Dataproc Editor 角色

IAM:Dataproc 服务帐号

基准 使用场景

用于在 Dataproc 集群中将流水线作为作业运行的服务帐号。默认情况下,它是 Compute Engine 服务帐号。


可选:在基准配置中,您可以将默认服务帐号更改为同一项目中的另一个服务帐号。请向新服务帐号授予以下 IAM 角色:

  • Cloud Data Fusion Runner 角色。此角色可让 Dataproc 与 Cloud Data Fusion API 通信。
  • Dataproc Worker 角色。此角色允许作业在 Dataproc 集群上运行。
重点小结
  • 必须为新服务的 API 代理服务帐号授予 Dataproc 服务账号的 Service Account User 角色,以便服务 API 代理可以使用该账号启动 Dataproc 集群。

此使用场景示例假设您使用 Dataproc 项目的默认 Compute Engine 服务帐号 (PROJECT_NUMBER-compute@developer.gserviceaccount.com)。


向 Dataproc 项目中的默认 Compute Engine 服务账号授予以下角色。

  • Dataproc Worker 角色
  • Storage Admin 角色(或者至少拥有“storage.buckets.create”权限),可让 Dataproc 为 BigQuery 创建临时存储分区。
  • BigQuery Job User 角色。此角色允许 Dataproc 创建加载作业。默认情况下,这些作业在 Dataproc 项目中创建。
  • BigQuery 数据集编辑者角色。此角色可让 Dataproc 在加载数据时创建数据集。

将 Service Account User 角色授予 Dataproc 项目默认 Compute Engine 服务帐号上的 Cloud Data Fusion 服务帐号。此操作必须在 Dataproc 项目中执行。

将 Dataproc 项目的默认 Compute Engine 服务帐号添加到 Cloud Data Fusion 项目中。此外,请授予以下角色:

  • Storage Object Viewer 角色,用于从 Cloud Data Fusion 使用方存储桶中检索流水线作业相关工件。
  • Cloud Data Fusion Runner 角色,以便 Dataproc 集群在运行时可与 Cloud Data Fusion 通信。

API

基准 使用场景
启用 Cloud Data Fusion API 时,以下 API 也会一并启用。如需详细了解这些 API,请转到项目中的“API 和服务”页面。

前往“API 和服务”

  • Cloud Autoscaling API
  • Dataproc API
  • Cloud Dataproc Control API
  • Cloud DNS API
  • Cloud OS Login API
  • Pub/Sub API
  • Compute Engine API
  • 容器文件系统 API
  • Container Registry API
  • Service Account Credentials API
  • Identity and Access Management API
  • Google Kubernetes Engine API

启用 Cloud Data Fusion API 后,系统会自动将以下服务帐号添加到您的项目中:

  • Google API 服务代理
  • Compute Engine Service Agent
  • Kubernetes Engine Service Agent
  • Google Container Registry Service Agent
  • Google Cloud Dataproc Service Agent
  • Cloud KMS Service Agent
  • Cloud Pub/Sub Service Account
对于此使用场景,请在包含 Dataproc 项目的项目中启用以下 API:
  • Compute Engine API
  • Dataproc API(可能在此项目中已启用)。当您启用 Dataproc API 时,Dataproc Control API 会自动启用。
  • Resource Manager API。

加密密钥

基准 使用场景

在基准配置中,加密密钥可以由 Google 管理,也可以由 CMEK 管理


重点小结

如果您使用 CMEK,则基准配置需要满足以下要求:

  • 密钥必须是区域级密钥,并且是在 Cloud Data Fusion 实例所在的区域中创建的。
  • 在创建 Cloud KMS CryptoKey Encrypter/Decrypter 角色的项目中,在密钥级别(而不是在 Google Cloud 控制台的 IAM 页面)向以下服务帐号授予该角色:
    • Cloud Data Fusion API 服务帐号
    • Dataproc 服务帐号,默认为 Compute Engine 服务代理 (service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com)
    • Google Cloud Dataproc 服务代理 (service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com)
    • Cloud Storage 服务代理 (service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

根据流水线中使用的服务(如 BigQuery 或 Cloud Storage),服务帐号还必须被授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色:

  • BigQuery 服务帐号 (bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com)
  • Pub/Sub 服务帐号 (service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com)
  • Spanner 服务帐号 (service-PROJECT_NUMBER@gcp-sa-spanner.iam.gserviceaccount.com)

如果您不使用 CMEK,则不需要对此使用场景进行额外的更改。

如果使用 CMEK,必须在创建该账号的项目中的密钥级别为以下服务帐号提供 Cloud KMS CryptoKey Encrypter/Decrypter 角色:

  • Cloud Storage 服务代理 (service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

根据流水线中使用的服务(如 BigQuery 或 Cloud Storage),其他服务账号还必须在密钥级别被授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色。例如:

  • BigQuery 服务帐号 (bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com)
  • Pub/Sub 服务帐号 (service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com)
  • Spanner 服务帐号 (service-PROJECT_NUMBER@gcp-sa-spanner.iam.gserviceaccount.com)

完成这些特定于用例的配置后,您的数据流水线就可以开始在另一个项目中的集群上运行。

后续步骤