小编iov*_*ero的帖子

如何使用服务帐户跨项目访问GCS存储桶对象?

我创建了一个Google App Engine应用程序,该应用程序侦听Google Cloud Storage通知,并且每当在GCS上创建新对象时,该应用程序都需要打开新对象并根据其内容执行操作。当应用程序和gcs存储桶位于不同项目中时,我无法访问对象内容。

组态:

我已经在具有存储对象管理权限的项目A中创建了一个服务帐户,并将GAE应用程序与之关联,并使用以下方法激活了该服务帐户:

gcloud auth激活服务帐户[ACCOUNT] --key-file = KEY_FILE

然后,我在与我的GAE应用程序相同区域的项目B中创建了存储桶gs:// some_bucket,并将我的服务帐户添加为该存储桶的所有者。

我将我的服务帐户添加为具有“存储对象管理”权限的项目B的成员。

我使用以下方法在应用程序和存储桶之间创建了一个监视桶通道

gsutil通知watchbucket -i [ChannelId] -t [Token] https:// [app-name] .appspot.com / gs:// some_bucket

我的应用程序现在正在接收发布请求,我可以解析它们,找到源存储桶,大小,对象名称等,但是我无法读取对象本身。我收到以下错误。

{地点: ””; 消息:“访问被拒绝:文件gs:// some_bucket / some_object:访问被拒绝”;原因:“ accessDenied”}

我在同一个项目(项目A)中测试了上述配置,并且能够读取对象并对其进行操作。这是我无法解决的权限问题。

google-app-engine google-cloud-storage gcloud

5
推荐指数
1
解决办法
1098
查看次数