我有一个存储桶,多个服务帐户可以在其中上载其对象,以便它们将storage.objects.create和ACL设置为projectPrivate。但我希望他们能够仅覆盖(删除)他们上传的对象,因此它们不会覆盖其他人的对象。所有对象都必须为所有人可读。但是,如果我给他们提供storage.objects.delete,它们可以覆盖此存储桶中的所有对象。
我可以设置一些权限,以便他们只能删除自己是创作者的项目吗?
我有一个存储桶,多个服务帐户可以在其中上载其对象,以便它们将storage.objects.create和ACL设置为projectPrivate。但我希望他们能够仅覆盖(删除)他们上传的对象,因此它们不会覆盖其他人的对象。所有对象都必须为所有人可读。但是,如果我给他们提供storage.objects.delete,它们可以覆盖此存储桶中的所有对象。
我可以设置一些权限,以便他们只能删除自己是创作者的项目吗?
根据GCP documentation:
覆盖对象,执行覆盖的人( 通过这样做获得对象的所有权)必须具有WRITER或OWNER 在存储桶上上传对象的权限。
由于对存储桶具有 writer 或 owner 权限将授予对存储桶中其他文件的访问权限,因此您担心的不是可能。
但是,您可以为不同的服务帐户使用不同的存储桶。
,如果我们查看此处找到的文档:
https://cloud.google.com/storage/docs/access-control/lists#predefined-acl
我们发现ACL projectPrivate
根据其角色向user / serviceAccount授予权限。但是,还有一个名为private
的备用ACL,记录为:
为存储桶或对象授予存储桶或对象所有者OWNER权限 对象,并删除所有其他访问权限。
如果我正确阅读了此内容,听起来就像您想要的一样。尤其是删除所有其他访问权限的概念,我指的是它删除了其他用户的所有其他访问权限。
,很好的问题。我认为这会对您有所帮助。
有一个叫做默认对象ACL的东西
默认情况下,对某文件拥有OWNER权限或WRITER权限的任何人 存储桶可以将对象上传到该存储桶。当您上传对象时, 您可以提供预定义的ACL,也可以完全不指定ACL。如果你 不指定ACL,云存储将应用存储桶的默认值 对象到对象的ACL。 每个存储桶都有一个默认的对象ACL , 并且此ACL适用于所有上传到该存储桶的对象,而无需 预定义ACL或在请求中指定的ACL(仅JSON API)。 每个存储桶的默认对象ACL的初始值为 projectPrivate。
根据对象的上传方式,相应地应用对象ACL:
经过验证的上传
如果您提出了上载对象的经过身份验证的请求,并且在上载对象时未指定任何对象ACL,则您将被列为对象的所有者,并且默认情况下将预定义的projectPrivate ACL应用于该对象。这意味着: