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

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

场景

默认情况下,在 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 项目架构。

配置

以下部分将基准配置与用例进行了比较 在集群中使用 Dataproc 集群的特定配置 通过默认的租户项目 VPC 访问不同的项目。

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

租户项目 VPC 和实例

基准 使用场景
在前面的基准架构图中,租户项目 包含以下组件:
  • 自动创建的默认 VPC。
  • Cloud Data Fusion 实例的实际部署。
此用例无需进行额外配置。

客户项目

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

客户 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 Web 指定此存储桶。 界面的 Compute Profile 设置 临时集群
  • 对于批处理和实时流水线或复制作业:如果您未在计算配置中指定存储桶,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 代理服务账号 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 项目中创建。
  • BigQuery Dataset Editor 角色。借助此角色,Dataproc 可以在加载数据时创建数据集。

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

添加 Compute Engine 服务账号的默认 Dataproc 项目关联到 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 控制 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 项目:
  • Compute Engine API
  • Dataproc API(此项目中可能已启用)。在执行下列操作时,Dataproc Control API 会自动启用 启用 Dataproc API。
  • Resource Manager API。

加密密钥

基准 使用场景

在基准配置中,加密密钥可以是 Google 管理的加密密钥或 CMEK


重点小结

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

  • 密钥必须是区域性密钥,且必须在与 Cloud Data Fusion 实例位于同一区域中创建。
  • 将 Cloud KMS CryptoKey Encrypter/Decrypter 角色授予 在密钥级别(而不是 Google Cloud 控制台的 IAM 页面) 创建它的位置:
    • Cloud Data Fusion API 服务账号
    • Dataproc 服务账号,也就是 引擎服务代理 (service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com) 默认
    • Google Cloud Dataproc 服务代理 (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-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)

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

后续步骤