【问题标题】:Configure GCS bucket to allow public write but not overwrite配置 GCS 存储桶以允许公共写入但不允许覆盖
【发布时间】:2014-10-10 18:06:16
【问题描述】:

在 Google Cloud Storage 上,我希望 PUBLIC (allUsers) 能够上传新文件和下载现有文件,但我不希望 PUBLIC 能够覆盖现有文件。

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

我知道我可以通过 App Engine 代理或使用签名 URL 来解决这个问题,由于时间限制,我试图避免这种情况。及时处理至关重要,因为我的应用程序(几乎)实时处理文件,而处理两个连续请求的额外延迟仅为 1,000 毫秒太长了。

是否可以配置云存储,以防在上传过程中遇到已经存在的文件时返回错误,例如:

存储桶:PUBLIC 具有 WRITE 访问权限 单个文件:PUBLIC 具有读取权限

这行得通吗?如果桶和文件 ACL 矛盾,GCS 会发生什么?在上面的示例中,存储桶将允许写入访问,但如果上传访问具有只读访问权限的现有文件,GCS 是否会接受此类请求,或者 GCS 是否会认为该文件此时已不存在并将其替换为新内容?

非常感谢任何其他可能有效的方法。

【问题讨论】:

  • 时间问题很有趣。您的服务器是否可以在需要之前分发多个签名 URL?
  • 是的@Brandon,谢谢你的想法。我也一直在考虑这个问题,如果没有其他问题,我可能会使用这条路线。
  • 我终于同意了您提前保留多个签名 URL 的建议。尽管签名需要相当多的 CPU 负载,但效果很好,但到目前为止,这似乎是唯一可行的解​​决方案。 [要收集您的积分@BrandonYarbrough,请发布答案,以便我确认它是正确的。]

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


【解决方案1】:

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

  • roles/storage.objectCreator
  • roles/storage.objectViewer

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

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

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多