无代理转移权限

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

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

  • 创建或管理转移作业的用户账号
  • 首次与 Storage Transfer Service 交互时系统自动创建的 Google 管理的服务代理。您可以将服务代理权限委托给用户代管式服务账号;请参阅将服务代理权限委托给用户代管式服务

如需了解如何授予 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 操作。您可以通过以下任一角色授予这些权限:Storage Transfer UserStorage Transfer Admin

此外,该账号还需要检索 Google 管理的服务代理的权限,才能检查其权限。

如需设置用户账号或用户代管式服务账号,请授予以下 IAM 权限和角色。

角色/权限 用途 备注
resourcemanager.projects.getIamPolicy 此权限用于确认 Google 管理的服务账号是否具有转移所需的权限。 要授予此权限,请授予 Role Viewer (roles/iam.roleViewer) 预定义角色,或者创建具有此权限的自定义角色并授予自定义角色。
拥有以下任一角色:
Storage Transfer Admin (roles/storagetransfer.admin) 允许执行所有 Storage Transfer Service 操作,包括删除传输作业。 如需查看授予的权限的详细列表,请参阅 Storage Transfer Service 预定义角色
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][googleServiceAccounts.get] API 调用。

自动分配角色

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

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

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

手动分配角色

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

角色/权限 用途 备注
Storage Legacy Bucket Writer (roles/storage.legacyBucketWriter) 允许 Storage Transfer Service 读取存储桶元数据、列出存储桶中的对象以及将对象写入目标存储桶。

授予对 Cloud Storage 目标存储桶的权限。

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

Storage Object Viewer (roles/storage.objectViewer)

允许 Storage Transfer Service 从 Cloud Storage 源复制对象。

此外,还允许 Storage Transfer Service 确定 Cloud Storage 目标位置中是否已存在文件,以及文件是否已更改。

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

如果您的转移作业配置为在接收器中 [覆盖对象](/storage-transfer/docs/reference/rest/v1/TransferOptions#OverwriteWhen)(如果不同)或永不覆盖,请同时授予对 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 存储桶之间转移对象,您必须向单个服务代理授予源存储桶和目标存储桶上的权限。服务代理属于您要在其中创建转移作业的项目。

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

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

在源存储桶上,在存储桶级层向服务代理授予以下角色:

  • Storage Legacy Bucket Reader
  • Storage Object Viewer

在目标存储桶上,在存储桶级层向同一服务代理授予以下角色:

  • Storage Legacy Bucket Writer

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

无法在项目级授予 Cloud Storage Legacy 角色。

组织权限限制

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

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

AWS 和 Microsoft 权限

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