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

问题描述 投票:3回答:1

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

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

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

如果在上载过程中遇到已存在的文件,则可以以返回错误的方式配置云存储,例如:

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

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

任何其他可能有用的方法都将非常感激。

google-app-engine google-cloud-storage
1个回答
0
投票

您想在存储桶上设置这些IAM角色:

  • 角色/ storage.objectCreator
  • 角色/ storage.objectViewer

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

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

© www.soinside.com 2019 - 2024. All rights reserved.