google-app-engine - 配置 GCS 存储桶以允许公开写入但不允许覆盖

标签 google-app-engine google-cloud-storage

在 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/

相关文章:

google-bigquery - 计划从 Google BigQuery 导出到 Google Cloud Storage

redis - GCP MemoryStore 上的数据迁移

javascript - 当尝试在 firebase 函数中获取图像链接时, promise 返回未定义

python - 如何在 Dataflow/Beam 的 gcs 中将结果写入 JSON 文件

node.js - js应用程序API错误: Forbidden accessing App Engine datastore from local Node.

python - gae、python、onesignal --- onesignal 玩家标签不会在仪表板上更新?

python - 在 python/webapp2 中获取 referer url 以获取发布请求

java - 是否为每个请求重复静态初始化?

python - GAE中的后台进程

php - 应用程序引擎更新破坏了 dev php env 中的 CloudStorage