为账号授权以进行数据转移

本文档简要介绍 BigQuery Data Transfer Service 如何与不同的账号类型进行交互、执行常规转移任务所需的账号授权类型,以及常见权限错误的问题排查步骤。

如要开始使用 BigQuery Data Transfer Service,请确保与您的项目关联的账号(包括用户账号和服务账号)均已通过身份验证并被授予正确的权限,可以执行您需要的转移任务。如需了解特定于数据源的权限,请参阅每个数据源的转移指南。

主要概念

BigQuery Data Transfer Service 可自动将数据从各种数据源转移到 BigQuery。身份验证和授权模块在两个不同的阶段运行,即控制平面和数据平面,并针对两种类型的用户,即转移作业创建者或转移作业所有者。

控制平面

控制平面代表授权流程中的阶段,其中经过身份验证的用户能够控制和管理转移作业配置和运行。控制平面中的用户必须拥有适当的 Identity and Access Management (IAM) 权限,以控制和管理其转移作业配置和运行:

  • bigquery.transfers.update 权限,可让用户执行以下操作:
    • 设置数据转移作业配置。
    • 管理现有转移作业,例如更新、停用或删除转移作业。
  • bigquery.transfers.get 权限,可让用户监控转移作业运行,例如检查转移作业运行状态或查看转移作业运行历史记录和日志。

如果您要使用 Google Cloud 控制台或 bq 命令行工具创建转移作业,还必须拥有 bigquery.transfers.get 权限。

设置计划查询不需要 bigquery.transfers.update 权限。如需了解详情,请参阅计划查询的所需权限

数据平面

数据平面代表用户无法直接控制的阶段。在数据平面中,BigQuery Data Transfer Service 能够在离线模式下运行数据转移作业,并且可以根据用户指定的时间表自动触发转移作业运行。在数据平面中,转移作业所有者的凭据用于访问源数据,以及(取决于数据源)转移作业所有者的凭据或 BigQuery Data Transfer Service 服务代理用于启动 BigQuery 作业和将数据写入目标数据集。

如需详细了解所需权限,请参阅本指南中的以下部分:

转移作业创建者与转移作业所有者

转移作业创建者是指创建和设置转移作业配置的用户身份。BigQuery Data Transfer Service 用户和转移作业创建者可以是用户账号,也可以是服务账号

转移作业所有者是指 BigQuery Data Transfer Service 用于授权数据转移作业(具体是用于提取源数据)的用户身份。对于支持服务账号的数据源,转移作业所有者可以是用户账号或服务账号。对于其他数据源,转移作业所有者必须是用户账号。

转移作业所有者和转移作业创建者可以具有相同的用户身份,但这不是强制性要求。您可以通过多种方式将转移作业所有者设置为与转移作业创建者不同的用户:

  • 创建转移作业时,如果数据源支持服务账号,您可以将所有者设置为服务账号。
  • 创建转移作业后,任何拥有 bigquery.transfers.update 权限的用户都可以通过更新凭据,将转移作业所有权更改为自己的账号(如果数据源支持服务账号,也可以更改为服务账号)。

授予读取外部数据源的权限

读取源数据所需的权限可能因数据源而异。例如,访问 Google Ads 需要 Google Ads 客户 ID 的读取权限。同样,访问 Google Play 需要 Google Play 管理中心内的报告访问权限。如需详细了解特定于数据源的权限,请参阅每个数据源的转移指南。

根据转移作业所有者的身份类型,需要采用不同的授权方法来检索访问令牌以访问源数据。

转移作业所有者是服务账号

如果将服务账号用作转移作业所有者,当您为项目启用 BigQuery Data Transfer Service API 时,系统会自动授予必要的权限。BigQuery Data Transfer Service 使用 Google 管理的服务账号(也称为服务代理)获取用户提供的服务账号(转移作业所有者)的访问令牌。

当您启用 BigQuery Data Transfer Service API 时,系统会为您的项目创建一个服务代理。系统还会向服务代理授予 BigQuery Data Transfer Service Agent 角色 (roles/bigquerydatatransfer.serviceAgent),该角色具有 iam.serviceAccounts.getAccessToken 权限。该权限允许 BigQuery Data Transfer Service 服务代理模拟转移作业所有者服务账号来检索访问令牌。

如需详细了解 BigQuery Data Transfer Service 服务代理,请参阅服务代理。如需详细了解如何使用服务账号以及支持服务账号的数据源的最新列表,请参阅使用服务账号

转移作业所有者是用户账号

如果创建转移作业配置的转移作业所有者是用户账号(而不是服务账号),您必须手动向 BigQuery Data Transfer Service 授予代表转移作业所有者获取用户账号访问令牌和访问源数据的权限。您可以通过 OAuth 对话框界面手动进行批准。

您只需要在第一次为给定数据源创建转移作业时向 BigQuery Data Transfer Service 授予权限。为新使用的区域创建首个转移作业时,必须再次授予权限,即使使用的是相同的数据源也是如此。

通过更新凭据来更改转移作业所有者时,如果新所有者之前从未在该区域为数据源创建转移作业,则也需要手动批准。

以下屏幕截图显示了创建 Google Ads 转移作业时的 OAuth 对话框界面。对话框显示了要授予的特定于数据源的权限:

允许 BigQuery Data Transfer Service 访问 Google Ads。

如需撤销授予的权限,请按以下步骤操作:

  1. 打开 Google 账号页面
  2. 点击 BigQuery Data Transfer Service
  3. 如需撤消权限,请点击移除访问权限移除您已授予 BigQuery Data Transfer Service 的访问权限。

授予启动 BigQuery 作业的权限

当您从大多数数据源迁移时(使用计划查询数据集副本进行迁移的情况除外),BigQuery Data Transfer Service 依赖于 Google 管理的服务账号来启动项目的 BigQuery 作业。当您为项目启用 BigQuery Data Transfer Service API 时,系统会自动为服务代理授予所需的权限 bigquery.job.create。如需了解详情,请参阅启用 BigQuery Data Transfer Service

当您使用计划查询数据集副本进行迁移时,BigQuery Data Transfer Service 会使用转移作业所有者的凭据来启动 BigQuery 作业。

授予执行 BigQuery 作业并将数据写入目标数据集的权限

当您从大多数数据源迁移时(使用计划查询数据集副本进行迁移的情况除外),BigQuery Data Transfer Service 依赖于服务代理来将数据写入 BigQuery 目标数据集。当您创建转移作业时,BigQuery Data Transfer Service 会向服务代理授予所需的权限 roles/bigquery.dataEditor。您必须拥有目标数据集的 bigquery.datasets.update 权限才能成功授予权限。

当您使用计划查询数据集副本进行迁移时,BigQuery Data Transfer Service 会使用转移作业所有者的凭据来执行 BigQuery 作业并将数据写入 BigQuery 目标数据集。

排查权限错误

如果您的转移作业遇到与授权或权限相关的问题,请参阅授权和权限问题