无代理转移权限

无代理转移包括 Cloud Storage 内的转移,或从 Amazon S3、Azure Blob Storage、Data Lake Storage Gen2 或公开对象的网址列表到 Cloud Storage 的转移。这些转移作业不需要转移代理或代理池。

通过无代理转移作业在云服务提供商之间转移数据时,您必须向两个实体授予权限:

  • 创建或管理转移作业的用户或用户管理的服务账号
  • 首次与 Storage Transfer Service 交互时系统自动创建的 Google 管理的服务账号

此外,您还必须配置对 AWS S3、Microsoft Azure 或 Cloud Storage 中源文件的访问权限。

如需了解如何授予 IAM 角色,请参阅授予、更改和撤消对资源的访问权限

最简单的权限授予方法

gcloud CLI 可用于向用户/用户管理的服务账号以及向 Google 管理的服务账号授予所需的权限。这些权限允许用户创建、修改和删除转移作业,以及设置或修改带宽限制。

如果这些权限对于您组织的政策而言过于宽泛,请参阅本文档后面部分,了解 Storage Transfer Service 所需的最低权限。

如需检查现有权限并输出任何缺少的角色,请运行以下命令:

gcloud transfer authorize

如需自动应用这些角色,请使用 --add-missing 标志:

gcloud transfer authorize --add-missing

如需向用户管理的服务账号授予权限,请传递服务账号的密钥文件:

gcloud transfer authorize --add-missing --creds-file=path/to/key.json

如需了解如何创建服务账号,请参阅创建和管理服务账号

该命令会向下面两个实体授予以下权限。

  • 对于用户/用户管理的服务账号:

    • roles/owner
    • roles/storagetransfer.admin
    • roles/storagetransfer.transferAgent
    • roles/storage.objectAdmin
    • roles/pubsub.editor
  • 对于 Google 管理的服务账号:

    • roles/storage.admin
    • roles/storagetransfer.serviceAgent

如需了解如何安装 gcloud CLI,请参阅 gcloud 快速入门

用户权限或用户管理的服务账号权限

本部分介绍管理和执行转移作业的账号所需的角色。您组织的具体要求将决定每个职能角色所需的确切权限角色;本部分假定您需要创建管理员和用户。

管理员账号

Storage Transfer Service 管理员账号可以设置带宽用量限额,还可以删除转移作业。

如需设置管理员账号,请分配以下 IAM 权限和角色:

角色/权限 用途 Notes
resourcemanager.projects.getIamPolicy 此权限用于确认 Google 管理的服务账号是否具有转移所需的权限。 要授予此权限,请授予 Role Viewer (roles/iam.roleViewer) 预定义角色,或者创建具有此权限的自定义角色并授予自定义角色。
Storage Transfer Admin (roles/storagetransfer.admin) 在转移项目中启用管理操作,例如项目设置。 如需查看授予的权限的详细列表,请参阅 Storage Transfer Service 预定义角色

用户账号

Storage Transfer Service 用户账号可用于创建和执行转移作业。这些账号通常无权删除转移作业。

用户账号可以是 Google Cloud 控制台用户,也可以是服务账号。如果使用的是服务账号,则将凭据传递给 Storage Transfer Service 的方法会因您使用的具体界面而异。

如需设置用户账号,请为该账号分配以下权限和角色:

角色/权限 用途 Notes
resourcemanager.projects.getIamPolicy 用于确认 Google 管理的服务账号是否具有转移所需的 Pub/Sub 权限。 要授予此权限,请授予 Role Viewer (roles/iam.roleViewer) 预定义角色,或者创建具有此权限的自定义角色并授予自定义角色。
Storage Transfer User (roles/storagetransfer.user) 允许用户创建、获取、更新和列出转移作业。 如需查看授予的权限的详细列表,请参阅 Storage Transfer Service 预定义角色

Google 管理的服务账号权限

Storage Transfer Service 使用 Google 管理的服务账号转移数据。首次创建转移作业、调用 googleServiceAccounts.get 或访问 Google Cloud 控制台中的作业创建页面时,系统会自动创建此服务账号。

服务账号的格式通常为 project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com。如需检索您的服务账号标识符,请使用 googleServiceAccounts.get API 调用。

自动分配角色

您可以通过以下两种方式自动为 Google 管理的服务账号分配正确的角色:

  • 使用 Google Cloud 控制台创建转移作业。控制台会自动应用所需的权限。

  • 使用 gcloud transfer authorize --add-missing。请参阅最简单的权限授予方法

手动分配角色

如需允许 Google 管理的服务账号访问完成转移作业所需的资源,请将以下角色或等效权限分配给该服务账号。

角色/权限 用途 备注
存储空间旧存储分区写入者 (roles/storage.legacyBucketWriter) 允许 Storage Transfer Service 读取存储桶元数据、列出存储桶中的对象以及将对象写入目标存储桶。 授予对 Cloud Storage 目标存储桶的权限。
Storage Object Viewer (roles/storage.objectViewer) 允许 Storage Transfer Service 确定是否已向/从 Cloud Storage 转移文件。 如果您要从 Cloud Storage 转移数据,请授予对 Cloud Storage 源存储桶的权限。如果适合您的情况,您可以将项目级层的角色授予运行 Storage Transfer Service 的项目。
Storage Legacy Bucket Reader (roles/storage.legacyBucketReader) 允许 Storage Transfer Service 读取 Cloud Storage 存储桶元数据。

如果您要从 Cloud Storage 转移数据,请授予对 Cloud Storage 源存储桶的权限。

Cloud Storage legacy 角色只能在存储桶级层授予。

如需查看相关说明,请参阅授予所需权限

跨项目 Cloud Storage 转移作业

如需在不同项目中的 Cloud Storage 存储桶之间转移对象,您必须向单个 Google 管理的服务账号授予源存储桶和目标存储桶上的权限。Google 管理的服务账号属于您要在其中创建转移作业的项目。

用户或用户管理的服务账号只需要创建转移作业的项目上的权限。

如需获取 Google 管理的服务账号的电子邮件,请参阅找到服务代理的电子邮件地址

在源存储桶上,在存储桶级层向 Google 管理的服务账号授予以下角色:

  • Storage Legacy Bucket Reader
  • Storage Object Viewer

在目标存储桶上,在存储桶级层向同一 Google 管理的服务账号授予以下角色:

  • Storage Legacy Bucket Writer

如需了解如何在存储桶级层授予角色,请参阅以下页面:

组织权限限制

如果您的组织已应用组织政策限制条件,例如网域限制 (constraints/iam.allowedPolicyMemberDomains) 或禁止将服务账号附加到其他项目中的资源 (constraints/iam.disableCrossProjectServiceAccountUsage),您必须先更新这些限制,跨项目转移作业才能成功。

您可能还需要更新任何 VPC Service Control 设置,以支持跨项目转移作业。请参阅为云对象存储转移配置 VPC Service Controls

AWS 和 Microsoft 权限

如果源文件位于 AWS S3 或 Microsoft Azure Storage 中,您还必须配置对源文件的访问权限。以下文档详细说明了必要的步骤: