配置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存储桶以允许公共写入但不允许覆盖的主要内容,如果未能解决你的问题,请参考以下文章

Cloudkit 公共数据库错误:“不允许写入操作”

模拟访问公共 GCS 存储桶的结果

Firebase 存储安全规则,允许公共或所有者私有文件访问

如何禁止公共继承但允许私有(和受保护)继承

如何允许 cognito 身份验证的用户获得对 s3 存储桶的公共访问权限

如何将解析 ACL 设置为公共写入?