Storage Transfer Service 使用服务代理从 Cloud Storage 源存储桶移动数据。首次调用 googleServiceAccounts.get 时系统会创建此服务代理。
源存储桶不需要与服务代理属于同一项目。无论存储桶位于哪个项目中,步骤都是相同的。
用户权限
要向服务代理授予所需的权限,您必须拥有来源存储桶的相关权限:
storage.buckets.getIamPolicystorage.buckets.setIamPolicy
Storage Legacy Bucket Owner 角色 (roles/storage.legacyBucketOwner) 或 Storage Admin 角色 (roles/storage.admin) 可提供所需的权限。
在 Cloud de Confiance 控制台中自动授予权限
如果您使用 Cloud de Confiance 控制台创建转移作业,并且拥有用户权限中列出的权限,则系统会自动向服务代理授予来源存储桶的所需权限。
您可以跳过此页面上的步骤,直接前往创建转移作业部分。
所需权限
该服务代理必须具有针对源存储桶的以下权限:
| 权限 | 说明 |
|---|---|
storage.buckets.get |
允许服务代理获取存储桶的位置。 |
storage.objects.list |
允许服务代理列出存储桶中的对象。 |
storage.objects.get |
允许服务代理读取存储桶中的对象。 |
storage.objects.create |
允许服务代理在存储桶中创建对象。如果要转移到文件系统,则必须拥有此权限。 Storage Transfer Service 会在源存储桶中创建并填充两个文件夹: |
storage.objects.delete |
允许服务代理删除存储桶中的对象。如果您将 deleteObjectsFromSourceAfterTransfer 设置为 true,则必须拥有此权限。 |
storage.objects.getIamPolicy |
允许服务代理读取源对象上的 ACL。如果启用了对象 ACL 保留 (ACL_PRESERVE),则此字段为必填字段。
|
以下预定义角色可共同授予所需的权限:
- 以下角色之一:
- 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 (
- 此外,如果使用
ACL_PRESERVE保留对象 ACL,则:- Storage Legacy Object Owner (
roles/storage.legacyObjectOwner)
- Storage Legacy Object Owner (
标记为 legacy 角色的任何 Cloud Storage 角色只能在存储桶级层授予。
如需查看 Cloud Storage 角色及其权限的完整列表,请参阅 IAM 角色。
授予所需权限
如需向服务代理授予所需的权限,请按照以下步骤操作。
找到服务代理的电子邮件地址
前往
googleServiceAccounts.get参考页面。系统会打开标题为试用此方法的交互式面板。
在该面板的请求参数下,输入您的项目 ID。您在此处指定的项目必须是您用于管理 Storage Transfer Service 的项目,该项目可能与来源存储桶的项目不同。
点击执行。
服务代理的电子邮件地址会作为
accountEmail的值返回。复制此值。服务代理的电子邮件地址采用
project-PROJECT_NUMBER@storage-transfer-service.s3ns-system.iam.gserviceaccount.com格式。
将服务代理添加到存储桶级层政策
控制台
- 在 Cloud de Confiance 控制台中,转到 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 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
C#
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Go
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Java
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Node.js
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
PHP
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Python
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Ruby
如需了解如何安装和使用 Cloud Storage 客户端库,请参阅 Cloud Storage 客户端库。 如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Rust
JSON
安装并初始化 gcloud CLI,以便为
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.s3nsapis.fr/storage/v1/b/BUCKET_NAME/iam"
替换以下内容:
JSON_FILE_NAME是您在第 2 步中创建的文件的路径。OAUTH2_TOKEN是您在第 1 步中生成的访问令牌。BUCKET_NAME是您要为主账号授予对其访问权限的存储桶的名称。例如my-bucket。