用例:对其他项目中的 Dataproc 集群进行访问权限控制

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

场景

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

准备工作

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

假设和范围

此用例具有以下要求:

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

解决方案

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

架构

以下图表比较了在以下两种情况下用于创建 Cloud Data Fusion 实例和运行流水线的项目架构:在同一个项目中使用集群(基准);通过租户项目 VPC 在其他项目中使用集群。

基准架构

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

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

基准 使用场景

从您(客户)的角度来看,Cloud Data Fusion 在逻辑上位于客户 VPC 中。


要点
您可以在项目的“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 服务代理具有在包含 Cloud Data Fusion 实例的项目中创建此存储分区的内置权限。
此用例无需进行额外配置。

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

基准 使用场景

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


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

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

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

IAM:Cloud Data Fusion API Service Agent

基准 使用场景

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


要点总结
  • 该角色包含与实例在同一项目中的服务(例如 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 Agent 服务账号授予 Dataproc 服务账号上的“服务账号用户”角色,以便服务 API Agent 可以使用该账号启动 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 Dataset Editor 角色。借助此角色,Dataproc 可以在加载数据时创建数据集。

向 Dataproc 项目的默认 Compute Engine 服务账号中的 Cloud Data Fusion 服务账号授予 Service Account User 角色。此操作必须在 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
  • Container Filesystem 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 实例位于同一区域中创建。
  • 在创建密钥的项目中,在密钥级别(而不是在 Google Cloud 控制台的 IAM 页面中)向以下服务账号授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色:
    • Cloud Data Fusion API 服务账号
    • Dataproc 服务账号,默认是 Compute Engine Service Agent (service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com)
    • Google Cloud Dataproc Service Agent (service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com)
    • Cloud Storage Service Agent (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 Agent (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)

进行这些特定于用例的配置后,您的数据流水线就可以开始在其他项目中的集群上运行了。

后续步骤