iov*_*ero 5 google-app-engine google-cloud-storage gcloud
我创建了一个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)中测试了上述配置,并且能够读取对象并对其进行操作。这是我无法解决的权限问题。
GCS 存储桶权限与 GCS 对象权限不同,存储桶所有者并不意味着对象所有者或拥有对象访问权限。您可以使用以下命令递归地向存储桶中的所有现有 GCS 对象授予读取权限:
gsutil -m acl ch -u name@project.iam.gserviceaccount.com:R -r gs://example-bucket
这将递归地授予服务帐户对存储桶中所有对象的读取权限。
人们可能还想更改存储桶对象的默认权限,以便将来进入 GCS 存储桶的所有对象都具有所需的权限
gsutil defacl ch -u name@project.iam.gserviceaccount.com:READ gs://example-bucket
更改对象 ACL:https ://cloud.google.com/storage/docs/gsutil/commands/acl
更改默认对象 ACL:https ://cloud.google.com/storage/docs/gsutil/commands/defacl
| 归档时间: |
|
| 查看次数: |
1098 次 |
| 最近记录: |