无代理转移包括 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 权限和角色:
角色/权限 | 用途 | 备注 |
---|---|---|
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 Legacy Bucket Writer
(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 |
如需查看相关说明,请参阅授予所需权限。
跨项目 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 中,您还必须配置对源文件的访问权限。以下文档详细说明了必要的步骤: