pio*_*ekw 6 google-app-engine google-cloud-storage google-compute-engine google-cloud-platform
考虑以下情况:
我有一个带有以下ACL的云存储桶:
<?xml version="1.0" ?>
<AccessControlList>
<Owner>
<ID>id-of-the-user-who-created-the-bucket</ID>
</Owner>
<Entries>
<Entry>
<Scope type="UserByEmail">
<EmailAddress>app-A-service-account-name</EmailAddress>
</Scope>
<Permission>FULL_CONTROL</Permission>
</Entry>
<Entry>
<Scope type="UserByEmail">
<EmailAddress>app-B-service-account-name</EmailAddress>
</Scope>
<Permission>FULL_CONTROL</Permission>
</Entry>
</Entries>
</AccessControlList>
Run Code Online (Sandbox Code Playgroud)我的GAE应用程序是用Python编写的,他们使用的是GCS Client Library
现在,这就是我想要实现的目标:我希望应用程序A在存储桶中创建文件,然后应用程序B来读取它们.
起初我尝试简单地创建一个文件,cloudstorage.open(file_name, 'w')然后用它读取它的状态cloudstorage.stat(file_name, 'r'),但这样我在阅读时最终会出现以下错误:
ForbiddenError at /.../
Expect status [200] from Google Storage. But got status 403.
Run Code Online (Sandbox Code Playgroud)
(错误消息还提供请求/响应信息:路径,标题,正文和额外信息.如果您认为它们可能有助于解决此案例,请告诉我)
然后我通过x-googl-acl在创建文件时设置选项来开始试验ACL ,例如:
cloudstorage.open(file_name, 'w', options={'x-goog-acl': 'authenticated-read'})
Run Code Online (Sandbox Code Playgroud)
尽管ACL按预期工作,但可用的选项似乎都不符合我的要求:
private - 只有存储桶拥有者具有访问权限,B无法读取public-read - 匿名用户可以访问文件,这是不可接受的public-read-write - 与上述相同authenticated-read - 每个拥有经过身份验证的帐户的人都能够阅读(即使是不属于该项目的人),所以它与之前的选项没有什么不同bucket-owner-read - 看起来很完美,但事实证明"桶主"不是通过云控制台设置为"所有者"的用户,而是创建存储桶的用户bucket-owner-full-control - 与上述相同看起来我没有选择,但我无法相信云存储无法实现这么简单的事情.我想到的唯一解决方案是改变系统的架构,但我想避免它.还有其他建议吗?
将访问者服务帐户(例如app1@appspot.gserviceaccount.com或1234567890-compute@developer.gserviceaccount.com用于计算引擎)添加为具有要使用的GCS存储桶的项目的"编辑者"权限的成员.这可以在拥有该存储桶的项目的IAM页面中完成:https://console.developers.google.com/iam-admin/iam/project? project =app1
| 归档时间: |
|
| 查看次数: |
1250 次 |
| 最近记录: |