基于代理的转移权限

在创建基于代理的转移之前,您必须为以下实体配置权限:

  • 用于创建转移的用户账号或用户代管式服务。这是登录 Google Cloud 控制台的账号,或在对 gcloud CLI 进行身份验证时指定的账号。用户账号可以是普通用户账号,也可以是用户代管式服务账号。

  • Storage Transfer Service 使用的 Google 代管式服务(也称为服务代理)。此账号通常由其电子邮件地址(采用 project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com 格式)标识。

  • 用于向转移代理提供 Google Cloud 权限的转移代理账号。转移代理账号使用安装它们的用户的凭据或用户代管式服务账号的凭据进行身份验证。

如需详细了解如何授予 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 权限和角色:

角色/权限 用途 备注
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 的方法会因您使用的具体界面而异。

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

角色/权限 用途 备注
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 管理的服务账号访问完成转移作业所需的资源,请将以下角色或等效权限分配给该服务账号。

角色/权限 用途 备注
Storage Object Creator (roles/storage.objectCreator) 允许 Storage Transfer Service 在与此转移作业关联的 Cloud Storage 存储桶中创建转移作业日志 授予转移作业中使用的所有 Cloud Storage 存储桶。如果适合您的情况,您可以将项目级层的角色授予运行 Storage Transfer Service 的项目。

如需查看这些角色授予的权限的详细列表,请参阅 Cloud Storage 预定义角色
Storage Object Viewer (roles/storage.objectViewer) 允许 Storage Transfer Service 确定是否已向/从 Cloud Storage 转移文件。
Storage Transfer Service Agent (roles/storagetransfer.serviceAgent) 允许 Storage Transfer Service 自动创建和修改 Pub/Sub 主题,从而在 Google Cloud 与转移代理之间进行通信。 将项目级层的角色应用于运行 Storage Transfer Service 的项目。

如需查看此角色授予的权限的详细列表,请参阅权限和角色
Storage Legacy Bucket Reader (roles/storage.legacyBucketReader) 允许 Storage Transfer Service 读取 Cloud Storage 存储桶元数据。

授予转移作业中使用的每个 Cloud Storage 存储桶。

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

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

转移代理账号权限

可以使用用户账号或服务账号运行 Storage Transfer Service 转移代理。

要设置转移代理服务账号或运行转移代理的用户账号,请分配以下角色:

角色/权限 用途 备注
Storage Transfer Agent (roles/storagetransfer.transferAgent) 向转移代理授予完成转移所需的 Storage Transfer Service 和 Pub/Sub 权限。 将此角色授予代理使用的用户或服务账号。

如需查看此角色授予的权限的详细列表,请参阅使用 IAM 进行访问权限控制

源和目标位置的权限

您还必须确保代理账号具有访问源数据和写入目标位置的正确权限。

文件系统、与 S3 兼容的存储空间或 HDFS 到 Cloud Storage

如果转移作业的目标位置是 Cloud Storage 存储桶,则转移代理需要目标存储桶的以下权限。如需查看说明,请参阅将主账号添加到存储桶级层政策中

权限 说明
storage.objects.create 允许代理账号在转移期间写入 Cloud Storage 对象。
storage.objects.get 允许代理账号读取对象数据和元数据。
storage.objects.list 允许代理账号列出 Cloud Storage 存储桶中的对象。
storage.objects.delete 如果您的转移作业配置为覆盖或删除接收器中的对象,则此权限是必需的。例如,如果在转移作业的 transferOptions 配置中设置了 overwriteObjectsAlreadyExistingInSinkdeleteObjectsUniqueInSink

如需授予这些权限,请授予以下角色:

或者,创建具有特定权限的自定义角色并授予自定义角色。

如需启用分段上传,您还需要具备其他权限。

Cloud Storage 到文件系统

如果转移作业的来源是 Cloud Storage 存储桶,则转移代理需要源存储桶的以下权限。

权限 说明
storage.objects.create 允许代理账号将转移日志和转移相关元数据写入 Cloud Storage 源存储桶。
storage.objects.get 允许代理账号读取对象数据和元数据。
storage.objects.list 允许代理账号列出 Cloud Storage 存储桶中的对象。
storage.objects.delete 如果您的转移作业配置为从来源删除对象,则此权限是必需的。请参阅: deleteObjectsFromSourceAfterTransfer

要授予此权限,请授予以下角色:

或者,创建具有此权限的自定义角色并授予自定义角色。

文件系统到文件系统

如果在两个文件系统之间转移,则转移代理需要中间存储桶的以下权限。

权限 说明
storage.objects.create 允许代理账号在转移期间写入 Cloud Storage 对象。
storage.objects.get 允许代理账号读取对象数据和元数据。
storage.objects.list 允许代理账号列出 Cloud Storage 存储桶中的对象。
storage.objects.delete 如果您的转移作业配置为在转移完成后删除中间存储桶中的对象,则此权限是必需的。

如需授予这些权限,请授予以下角色:

或者,创建具有特定权限的自定义角色并授予自定义角色。

如需启用分段上传,您还需要具备其他权限。

分段上传

如需在将数据从文件系统转移到 Cloud Storage 或在文件系统之间转移数据的过程中启用分段上传,请额外向代理授予以下权限。

  • 若要将数据转移到 Cloud Storage,您需要向目标存储桶分配相应权限。
  • 若要在文件系统之间转移数据,您需要向中间存储桶分配相应权限。
分段上传权限名称 说明
storage.multipartUploads.create 在多个段中上传对象。
storage.multipartUploads.abort 中止分段上传会话。
storage.multipartUploads.listParts 在分段上传会话中列出已上传的对象部分。
storage.multipartUploads.list 列出存储桶中的分段上传会话。

如需授予这些权限,请授予以下角色:

或者,创建具有特定权限的自定义角色并授予自定义角色。