Storage Transfer Service 使用 Google 管理的服务账号(称为服务代理)从 Cloud Storage 源存储桶移动数据。首次调用 googleServiceAccounts.get
时系统会创建此服务代理。
源存储桶不需要与服务代理属于同一项目。无论存储桶位于哪个项目中,步骤都是相同的。
用户权限
要向服务代理授予所需的权限,您必须拥有来源存储桶的相关权限:
storage.buckets.getIamPolicy
storage.buckets.setIamPolicy
Storage Legacy Bucket Owner 角色 (roles/storage.legacyBucketOwner
) 或 Storage Admin 角色 (roles/storage.admin
) 可提供所需的权限。
在 Google Cloud 控制台中自动授予权限
如果您使用 Google Cloud 控制台创建转移作业,并且拥有用户权限中列出的权限,则系统会自动向服务代理授予来源存储桶的所需权限。
您可以跳过此页面上的步骤,直接前往创建转移作业部分。
所需权限
该服务代理必须具有针对源存储桶的以下权限:
权限 | 说明 |
---|---|
storage.buckets.get |
允许服务代理获取存储桶的位置。 |
storage.objects.list |
允许服务代理列出存储桶中的对象。 |
storage.objects.get |
允许服务代理读取存储桶中的对象。 |
storage.objects.create |
允许服务代理在存储桶中创建对象。如果要转移到文件系统,则必须拥有此权限。 Storage Transfer Service 会在源存储桶中创建并填充两个文件夹: |
storage.objects.delete |
允许服务代理删除存储桶中的对象。如果您将 deleteObjectsFromSourceAfterTransfer 设置为 true ,则必须拥有此权限。 |
以下预定义角色可共同授予所需的权限:
- 以下角色之一:
- Storage Object Viewer (
roles/storage.objectViewer
)(如果要转移到其他 Cloud Storage 存储桶)。 - Storage Object Creator (
roles/storage.objectCreator
)(如果要转移到文件系统)。
- Storage Object Viewer (
- 另外还需要以下角色之一:
- Storage Legacy Bucket Writer (
roles/storage.legacyBucketWriter
)(如果需要对象删除权限)。 - Storage Legacy Bucket Reader (
roles/storage.legacyBucketReader
)(如果不需要对象删除权限)。
- Storage Legacy Bucket Writer (
标记为 legacy
角色的任何 Cloud Storage 角色只能在存储桶级层授予。
如需查看 Cloud Storage 角色及其权限的完整列表,请参阅 IAM 角色。
对于设置了 ACL_PRESERVE 的对象 ACL,源对象还需要 ACL_PRESERVE 角色 (roles/storage.legacyObjectOwner
)。对于 ACL_PRESERVE,手动添加具有 Storage Legacy Object Owner 角色的服务账号,以向源对象授予 storage.objects.getIamPolicy
权限。
授予所需权限
如需向服务代理授予所需的权限,请按照以下步骤操作。
找到服务代理的电子邮件地址
前往
googleServiceAccounts.get
参考页面。系统会打开标题为试用此方法的交互式面板。
在该面板的请求参数下,输入您的项目 ID。您在此处指定的项目必须是您用于管理 Storage Transfer Service 的项目,该项目可能与来源存储桶的项目不同。
点击执行。
服务代理的电子邮件地址会作为
accountEmail
的值返回。复制此值。服务代理的电子邮件地址采用
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
格式。
将服务代理添加到存储桶级层政策
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
点击您要授予角色的主账号所属存储桶关联的存储桶溢出菜单 (
)。选择修改访问权限。
点击 + 添加主账号按钮。
在新建主账号字段中,输入您的服务代理的账号电子邮件地址。
从选择角色下拉菜单中选择
Storage Object Viewer
或Storage Object Creator
。点击添加其他角色。
选择
Storage Legacy Bucket Writer
或Storage Legacy Bucket Reader
。点击保存。
gcloud
使用 gcloud storage buckets add-iam-policy-binding
命令:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:YOUR_AGENT_EMAIL --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:YOUR_AGENT_EMAIL --role=roles/storage.legacyBucketReader
其中:
BUCKET_NAME
是您要为主账号授予对其访问权限的存储桶的名称。例如my-bucket
。YOUR_AGENT_EMAIL
是您在查找服务代理的电子邮件地址中复制的代理账号电子邮件地址。
代码示例
C++
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 有关详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 有关详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 有关详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 有关详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 有关详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 有关详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 有关详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
JSON
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。或者,您可以创建访问令牌(使用 OAuth 2.0 Playground),并将其包含在
Authorization
标头中。创建一个包含以下信息的 JSON 文件:
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":[ "YOUR_AGENT_EMAIL" ] }, { "role": "roles/storage.legacyBucketReader", "members":[ "YOUR_AGENT_EMAIL" ] } ] }
其中:
YOUR_AGENT_EMAIL
是您在查找服务代理的电子邮件地址中复制的代理账号电子邮件地址。
使用
cURL
,通过PUT setIamPolicy
请求调用 JSON API:curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
其中:
JSON_FILE_NAME
是您在第 2 步中创建的文件的路径。OAUTH2_TOKEN
是您在第 1 步中生成的访问令牌。BUCKET_NAME
是您要为主账号授予对其访问权限的存储桶的名称。例如my-bucket
。