在 Google Cloud Storage 上,我希望 PUBLIC (allUsers) 能够上传新文件和下载现有文件,但我不希望 PUBLIC 能够覆盖现有文件。
背景:上传和下载 URL 通常由我自己的应用程序确定。所以在正常情况下没有问题,因为应用程序保证 URL 在写入时始终是唯一的。但是恶意用户可以破解我的应用程序,然后可能能够将文件(坏)上传到我的云存储并覆盖现有文件(非常坏)。
我知道我可以通过 App Engine 代理或使用签名 URL 来解决这个问题,由于时间限制,我试图避免这种情况。及时处理至关重要,因为我的应用程序(几乎)实时处理文件,处理两个连续请求的额外延迟仅 1,000 毫秒就太长了。
是否可以将云存储配置为在上传过程中遇到现有文件时返回错误,例如:
存储桶:PUBLIC 具有 WRITE 访问权限 单个文件:PUBLIC 具有 READ 访问权限
那行得通吗?如果存储桶和文件 ACL 相互矛盾,GCS 会发生什么情况?在上面的示例中,存储桶将允许写入访问权限,但是如果上传命中一个具有只读访问权限的现有文件,GCS 是否会接受此类请求,或者 GCS 是否会认为该文件此时已经不存在并将其替换为新内容?
任何其他可能有效的方法将不胜感激。
最佳答案
您想在存储桶上设置这些 IAM 角色:
- roles/storage.objectCreator
- 角色/storage.objectViewer
https://cloud.google.com/storage/docs/access-control/iam-roles状态:
“objectCreator 允许用户创建对象。不授予查看、删除或覆盖对象的权限。”
关于google-app-engine - 配置 GCS 存储桶以允许公开写入但不允许覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25352935/