Cloud Storage 使用 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.create |
允许服务账号将对象添加到存储桶。 |
storage.objects.delete |
允许服务账号删除存储桶中的对象。
将 请注意,如果目标存储桶启用了对象版本控制,则 |
storage.objects.list |
允许服务账号列出存储桶中的对象。将 overwriteObjectsAlreadyExistingInSink 设置为 false 或将 deleteObjectsUniqueInSink 设置为 true 时,此权限是必需的。 |
以下预定义角色可授予所需的权限:
- Storage Legacy Bucket Writer (
roles/storage.legacyBucketWriter
)
标记为 legacy
角色的任何 Cloud Storage 角色只能在存储桶级层授予。
如需查看 Cloud Storage 角色及其权限的完整列表,请参阅 IAM 角色。
授予所需权限
如需向服务代理授予 Storage Legacy Bucket Writer 角色,请按照以下步骤操作。
找到服务代理的电子邮件地址
前往
googleServiceAccounts.get
参考页面。系统会打开标题为试用此方法的交互式面板。
在该面板的请求参数下,输入您的项目 ID。您在此处指定的项目必须是您用于管理 Storage Transfer Service 的项目,该项目可能与目标存储桶的项目不同。
点击执行。
服务代理的电子邮件地址会作为
accountEmail
的值返回。复制此值。服务代理的电子邮件地址采用
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
格式。
将服务代理添加到存储桶级层政策
控制台
- 在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
点击您要授予角色的主账号所属存储桶关联的存储桶溢出菜单 (
)。选择修改访问权限。
点击 + 添加主账号按钮。
在新建主账号字段中,输入您的服务代理的账号电子邮件地址。
从选择角色下拉菜单中选择
Storage Legacy Bucket Writer
。点击保存。
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.legacyBucketWriter
其中:
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.legacyBucketWriter", "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
。
如需详细了解如何将 IAM 角色分配给 Cloud Storage 资源,请参阅 Cloud Storage IAM 文档。