如何使用 Storage Transfer Service 跨不同项目的 bucket 复制数据?

How can I use the Storage Transfer Service to copy data across buckets in different projects?

我正在尝试使用 Google Cloud 的存储传输服务根据正在发出的事件在不同项目的存储桶之间传输数据。此事件指向属于项目 A 的存储桶的子目录,我想将其复制到项目 B 中的目标存储桶,因此自然而然地,STS 看起来非常适合。

我已经成功地制作了请求,包括前缀表达式,我相信我现在只是在处理权限错误,因为当我使用我的代码在同一项目中的存储桶之间复制时,它会创建并启动传输如预期。但是,当我使用我的服务帐户进行跨存储桶传输时,出现以下错误:

Error creating the transfer job: 
Failed to obtain the location of the destination Google Cloud Storage (GCS) bucket due to insufficient permissions.  
Please verify that the necessary permissions have been granted.

因此,我从这里查看了我的服务帐户的权限。我已将该服务帐户手动添加为第二个项目的项目编辑者(然后是所有者),并将该帐户添加到我尝试转移到的目标存储桶的 ACL 中。

还有什么我想念的其他途径吗?我在谷歌上搜索其他遇到我情况的人并没有取得多大成功。

您可能 运行 遇到的一个问题是您可能授予了错误的服务帐户访问权限。为每个项目创建一个服务帐户。可以使用记录在 here 中的 get googleServiceAccounts 命令找到服务帐户。它应该看起来像

storage-transfer-{UID}@partnercontent.gserviceaccount.com

每个项目的 UID 会有所不同。尝试验证具有特定于您在 transferJobs create 请求中指定的 projectId 的 UID 的服务帐户在源存储桶中具有 READ/LIST 访问权限,在接收器存储桶中具有 READ/WRITE/LIST 访问权限。

如果您需要设置的传输数量相对较少,您也可以尝试使用控制台,这是一个旨在简化传输设置过程的 GUI。可以找到有关使用控制台的说明 here