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

3
在Google Cloud Storage中,我希望PUBLIC(所有用户)能够上传新文件并下载现有文件,但是我不希望PUBLIC能够覆盖已有文件。
背景:通常情况下,上传和下载URL由我的应用程序确定。因此在正常情况下没有问题,因为应用程序保证写入时URL始终是唯一的。但是恶意用户可能会黑掉我的应用程序,从而有可能上传文件(不好),并覆盖现有文件(非常糟糕)。
我知道可以通过代理App Engine或使用签名URL来解决这个问题,但由于时间限制,我正在尝试避免这些方法。及时处理对我很重要,因为我的应用程序几乎实时地处理文件,连续两个请求的额外延迟仅1,000毫秒就太长了。
是否可能以一种配置云存储的方式,以便在上传期间发现已经存在的文件时返回错误,例如:
Bucket:PUBLIC具有写访问权限 单个文件:PUBLIC具有读取访问权限
那样行吗?如果bucket和文件ACL存在矛盾,GCS会发生什么?在上面的例子中,bucket将允许写访问,但是如果上传命中只读访问的已存在文件,GCS会接受这样的请求吗?还是GCS会认为此时文件已不存在,并用新内容替换它?
非常感谢任何其他有可能起作用的方法。

时间问题很有趣。您的服务器是否可以提前分发多个签名URL,以便在需要时使用? - Brandon Yarbrough
是的,@Brandon,谢谢你的建议。我也一直在考虑这个问题,如果没有其他更好的选择,那么我可能会采用这种方法。 - Oliver Hausler
1
我最终采纳了您提出的提前保留多个已签名URL的建议。尽管签名需要相当大的CPU负载,但到目前为止,这似乎确实是唯一可行的解决方案。[为了收集您的积分@BrandonYarbrough,请发布一个答案,以便我确认它是正确的。] - Oliver Hausler
1个回答

2

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

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

https://cloud.google.com/storage/docs/access-control/iam-roles 上提到:

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

该页面是关于谷歌云存储的访问控制及IAM角色的说明文档,详细介绍了如何使用各种IAM角色来控制资源的访问权限。

请参阅以上链接以获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接