【问题标题】:Allow Creating but not Overriding or Deleting Objects in a bucket in GCS and S3允许在 GCS 和 S3 的存储桶中创建但不允许覆盖或删除对象
【发布时间】:2017-05-06 06:05:55
【问题描述】:

有没有办法允许创建新对象但不删除或覆盖存储桶中的其他现有对象?

我想在不维护后端或签名 URL 的情况下实现这一目标。如果有办法通过 Object Default ACL 和 Bucket ACL 做到这一点。

将存储桶 ACL 设置为允许来自 allUsersWRITING 似乎允许它们删除和覆盖,我希望它们只能创建新对象。

注意:我也很感激 S3 的答案。

【问题讨论】:

    标签: amazon-s3 google-cloud-storage


    【解决方案1】:

    不,没有。目前,对象的上传者是该对象的所有者,并且对象的所有者始终有权删除自己的对象。您可以阻止一组用户覆盖彼此的对象,但目前无法阻止用户覆盖他们之前上传的对象。

    请注意,这完全是 ACL 的问题。不想覆盖现有对象的用户可以确保他们不会。如果使用 XML API,用户将在上传请求中包含标头“x-goog-if-generation-match: 0”,如果同名对象已存在,则会导致上传失败。

    【讨论】:

    • 感谢您的回复,这给了我一些想法。是否可以使用 ACL 上传对象(在创建时),即使用户对它包含的存储桶具有 WRITE 访问权限,也可以防止它在未来被覆盖?如果这是可能的,它可能会实现我正在寻找的体验。
    • 不完全。您永远无法阻止上传对象的同一帐户稍后将其删除。上传者始终是对象不可撤销的所有者,并且所有者始终可以删除。但是,如果您在上传时使用签名的 URL,则所有对象都归为该 URL 签名的服务帐户所有,您可以将其设置为没有其他帐户可以删除该对象。
    • 很遗憾没有。持有私钥的人需要签署请求。这可能是您运营的服务,也可能是 Firebaase 之类的服务,但必须由受信任的人进行签名。
    • 是的。特定代对象的上传者仍然是该特定代对象的所有者。如果另一个用户覆盖它,新用户拥有新的一代,但原来的上传者仍然拥有自己的一代,仍然可以删除它。
    • 表示任何人,甚至是匿名的人,都可以删除桶中的任何对象,或者上传任何对象,或者覆盖任何对象。
    猜你喜欢
    • 2014-10-10
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2022-01-23
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    相关资源
    最近更新 更多