无代理转移包括 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 User 或 Storage 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 |
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 |
如需查看相关说明,请参阅授予所需权限。
向用户代管式服务账号委托
您可以将服务代理权限委托给用户代管式服务账号。这样,您就可以在服务账号之间为不同的传输作业分配不同的存储桶权限,而不是将其集中在单个服务代理中。
如需了解详情,请参阅向用户代管式服务委派服务代理权限。
跨项目 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 中,您还必须配置对源文件的访问权限。以下文档详细说明了必要的步骤: