用例:对其他项目中的 Dataproc 集群进行访问权限控制
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
本页介绍了在其他项目中部署和运行使用 Dataproc 集群的流水线时如何管理访问权限。 Google Cloud
场景
默认情况下,在Google Cloud 项目中启动 Cloud Data Fusion 实例时,它会使用同一项目中的 Dataproc 集群部署和运行流水线。不过,贵组织可能要求您在其他项目中使用集群。对于此用例,您必须管理项目之间的访问权限。以下页面介绍了如何更改基准(默认)配置并应用适当的访问权限控制。
准备工作
如需了解此使用情形中的解决方案,您需要了解以下背景信息:
假设和范围
此用例具有以下要求:
解决方案
此解决方案比较基准架构和特定于用例的架构和配置。
架构
以下图表比较了在以下两种情况下用于创建 Cloud Data Fusion 实例和运行流水线的项目架构:在同一个项目中使用集群(基准);通过租户项目 VPC 在其他项目中使用集群。
基准架构
下图显示了项目的基准架构:
![Cloud Data Fusion 中的租户、客户和 Dataproc 项目架构。](https://cloud.google.com/static/data-fusion/docs/images/use-case/diagram-data-fusion-projects@1x.png?authuser=7&hl=zh-cn)
对于基准配置,您需要创建一个私有 Cloud Data Fusion 实例,并运行一个流水线,而无需进行任何其他自定义:
- 您使用的是某个内置计算配置
- 源和接收器与实例位于同一项目中
- 未向任何服务账号授予其他角色
如需详细了解租户项目和客户项目,请参阅网络。
用例架构
下图显示了在其他项目中使用集群时的项目架构:
![Cloud Data Fusion 中的租户、客户和 Dataproc 项目架构。](https://cloud.google.com/static/data-fusion/docs/images/use-case/diagram-dataproc-data-fusion-projects@1x.png?authuser=7&hl=zh-cn)
配置
以下部分将基准配置与通过默认的租户项目 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 )
|
进行这些特定于用例的配置后,您的数据流水线就可以开始在其他项目中的集群上运行了。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-02-14。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["很难理解","hardToUnderstand","thumb-down"],["信息或示例代码不正确","incorrectInformationOrSampleCode","thumb-down"],["没有我需要的信息/示例","missingTheInformationSamplesINeed","thumb-down"],["翻译问题","translationIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-02-14。"],[],[]]