配置GCS存储桶以允许公共写入但不允许覆盖
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置GCS存储桶以允许公共写入但不允许覆盖相关的知识,希望对你有一定的参考价值。
在Google云端存储上,我希望PUBLIC(allUsers)能够上传新文件并下载现有文件,但我不希望PUBLIC能够覆盖现有文件。
背景:上传和下载网址通常由我自己的应用确定。因此,在正常情况下,没有问题,因为应用程序保证URL在写入时始终是唯一的。但是恶意用户可以破解我的应用程序,然后可能将文件(坏)上传到我的云存储并覆盖现有文件(非常糟糕)。
我知道我可以通过App Engine代理或使用签名URL来解决这个问题,我试图通过时序限制来避免这些问题。及时处理是必不可少的,因为我的应用程序(几乎)实时处理文件,并且处理两个连续请求的额外延迟仅1000毫秒将太长。
如果在上载过程中遇到已存在的文件,则可以以返回错误的方式配置云存储,例如:
Bucket:PUBLIC具有WRITE访问权限个人文件:PUBLIC具有READ访问权限
那会有用吗?如果存储桶和文件ACL相互矛盾,GCS会发生什么?在上面的示例中,存储桶将允许写访问,但如果上传命中已经存在的具有只读访问权限的文件,那么此类请求是否会被GCS尊重,或者GCS会认为该文件在该点已经不存在并将其替换为新内容?
任何其他可能有用的方法都将非常感激。
您想在存储桶上设置这些IAM角色:
- 角色/ storage.objectCreator
- 角色/ storage.objectViewer
https://cloud.google.com/storage/docs/access-control/iam-roles说:
“objectCreator允许用户创建对象。不授予查看,删除或覆盖对象的权限。”
以上是关于配置GCS存储桶以允许公共写入但不允许覆盖的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 存储安全规则,允许公共或所有者私有文件访问