【问题标题】:Google cloud storage delete only own objects谷歌云存储只删除自己的对象
【发布时间】:2019-11-14 23:59:54
【问题描述】:

我有一个存储桶,多个服务帐户可以在其中上传他们的对象,因此它们有 storage.objects.create 和 ACL 设置为 projectPrivate。但我希望他们能够只覆盖(删除)他们上传的对象,所以他们不会覆盖其他人的对象。所有对象都需要每个人都可以阅读。但是如果我给他们 storage.objects.delete,他们可以覆盖这个桶中的任何对象。

我可以设置一些权限,以便他们只能删除他们是创建者的项目吗?

【问题讨论】:

    标签: google-cloud-platform google-cloud-storage


    【解决方案1】:

    根据 GCP documentation:

    覆盖一个对象,执行覆盖的人(并且是 通过这样做获得对象的所有权)必须具有 WRITER 或 OWNER 上传对象的bucket的权限。

    由于对存储桶拥有 writerowner 权限将授予对存储桶内其他文件的访问权限,恐怕您要问的不是可能。

    但是,您可以为不同的服务帐号使用不同的存储桶。

    【讨论】:

    • 这就是我所害怕的
    【解决方案2】:

    如果我们查看此处找到的文档:

    https://cloud.google.com/storage/docs/access-control/lists#predefined-acl

    我们发现 ACL projectPrivate 根据用户/serviceAccount 的角色授予权限。但是,有一个名为 private 的备用 ACL,记录为:

    授予存储桶或对象所有者 OWNER 对存储桶或 对象,并删除所有其他访问权限。

    如果我没看错,这听起来像你想要的。尤其是它删除所有其他访问权限的概念,我认为这意味着它删除了其他用户的所有其他访问权限。

    【讨论】:

    • 抱歉,我编辑了我的问题:所有对象都需要每个人都可以阅读。
    • 例如:我的存储桶是细粒度的,我的对象只有“用户 - 我的用户 - 所有者”并且使用具有“storage.objects.delete”的服务帐户我可以删除那个对象。
    【解决方案3】:

    很好的问题。我想这会对你有所帮助。

    有一种叫做默认对象 ACL

    默认情况下,任何拥有 OWNER 权限或 WRITER 权限的人 存储桶可以将对象上传到该存储桶中。上传对象时, 您可以提供预定义的 ACL 或根本不指定 ACL。如果你 不指定 ACL,Cloud Storage 会应用存储分区的默认值 对象 ACL 到对象。 每个存储桶都有一个默认对象 ACL, 并且此 ACL 适用于上传到该存储桶的所有对象,而无需 预定义的 ACL 或请求中指定的 ACL(仅限 JSON API)。 每个存储桶的默认对象 ACL 的初始值为 项目私人。

    根据对象的上传方式,相应地应用对象 ACL:

    经过身份验证的上传

    如果您在上传对象时发出经过身份验证的请求,并且在上传对象时未指定任何对象 ACL,那么您将被列为对象的所有者,并且默认情况下将预定义的 projectPrivate ACL 应用于对象。这意味着:

    • 您(上传对象的人)被列为对象 所有者。不能通过修改 ACL 来更改对象所有权。你可以 仅通过覆盖对象来更改对象所有权。
    • 您(对象所有者)被授予对象的 OWNER 权限。如果 您尝试向所有者 Cloud 授予少于 OWNER 的权限 存储会自动将权限升级给 OWNER。
    • 项目所有者和项目编辑组拥有 OWNER 权限 对象。
    • 项目团队成员组对该对象具有 READER 权限。

      来源和更多信息:Click here

    【讨论】:

    • 这甚至可以解决您的问题,我猜,所有对象都可以被所有人读取。你必须更多地挖掘这个以正确实施。但我很确定,这可以解决您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多