配置GCS存储桶以允许公共写入但不允许覆盖

时间:2014-08-17 19:37:24

标签: google-app-engine google-cloud-storage

在Google云端存储上,我希望PUBLIC(allUsers)能够上传新文件并下载现有文件,但我不希望PUBLIC能够覆盖现有文件。

背景:上传和下载网址通常由我自己的应用确定。因此,在正常情况下,没有问题,因为应用程序保证URL在写入时始终是唯一的。但是恶意用户可能会破解我的应用程序,然后可能会将文件(坏)上传到我的云存储并覆盖现有文件(非常糟糕)。

我知道我可以通过App Engine代理或使用签名网址来解决这个问题,我试图通过时间限制来避免这种情况。及时处理是必不可少的,因为我的应用程序(几乎)实时处理文件,并且处理两个连续请求的额外延迟仅1000毫秒将太长。

是否有可能以在上传过程中遇到现有文件的情况下返回错误的方式配置云存储,例如:

Bucket:PUBLIC具有WRITE访问权限 单个文件:PUBLIC具有READ访问权限

那会有用吗?如果存储桶和文件ACL相互矛盾,GCS会发生什么?在上面的示例中,存储桶将允许写访问,但如果上传命中已经存在的具有只读访问权限的文件,那么此类请求是否会被GCS尊重,或者GCS会认为该文件在该点已经不存在并将其替换为新内容?

非常感谢任何其他可行的方法。

1 个答案:

答案 0 :(得分:0)

您要在存储桶上设置以下IAM角色:

  • roles / storage.objectCreator
  • roles / storage.objectViewer

https://cloud.google.com/storage/docs/access-control/iam-roles状态:

“ objectCreator允许用户创建对象。不授予查看,删除或覆盖对象的权限。”