Google cloud storage 为什么gsutil cp需要版本化存储桶上的storage.objects.delete?
我正在使用一个服务帐户将一个文件上传到具有版本控制的Google云存储桶。我想保持服务帐户权限最小,它只需要上传文件,所以我不想给它删除文件的权限,但上传失败(只有在流式传输所有内容之后!)说它需要删除权限 它不应该创建一个新版本而不是删除吗 命令如下:Google cloud storage 为什么gsutil cp需要版本化存储桶上的storage.objects.delete?,google-cloud-storage,gsutil,Google Cloud Storage,Gsutil,我正在使用一个服务帐户将一个文件上传到具有版本控制的Google云存储桶。我想保持服务帐户权限最小,它只需要上传文件,所以我不想给它删除文件的权限,但上传失败(只有在流式传输所有内容之后!)说它需要删除权限 它不应该创建一个新版本而不是删除吗 命令如下: cmd-that-streams | gsutil cp -v - gs://my-bucket/${FILE} 我已经仔细检查了bucket上是否启用了版本控制 > gsutil versioning get gs://my-buck
cmd-that-streams | gsutil cp -v - gs://my-bucket/${FILE}
我已经仔细检查了bucket上是否启用了版本控制
> gsutil versioning get gs://my-bucket
gs://my-bucket: Enabled
如果按照执行
gsutl cp
命令,则需要权限storage.objects.delete
命令:cp
所需权限:
- storage.objects.list*(用于目标存储桶)
- storage.objects.get(用于源对象)
- storage.objects.create(针对目标存储桶)
- storage.objects.delete**(针对目标存储桶)
存储.objects.delete
。但是您的用例使用版本控制,您将需要覆盖,因此您将需要添加
我用一个启用了bucket版本控制并且只有一个版本的bucket进行了测试。具有角色的服务帐户
有关命令和输出,请参见屏幕截图:
如果您正在按照执行gsutl cp
命令,则需要权限storage.objects.delete
命令:cp
所需权限:
- storage.objects.list*(用于目标存储桶)
- storage.objects.get(用于源对象)
- storage.objects.create(针对目标存储桶)
- storage.objects.delete**(针对目标存储桶)
**只有在不使用-n标志并且插入了与已插入的对象同名的对象时,才需要此权限
存在于桶中
谷歌文档建议使用-n(不要覆盖现有文件),这样就不需要存储.objects.delete
。但是您的用例使用版本控制,您将需要覆盖,因此您将需要添加
我用一个启用了bucket版本控制并且只有一个版本的bucket进行了测试。具有角色的服务帐户
有关命令和输出,请参见屏幕截图:
如果要覆盖对象,无论其父存储桶是否启用了版本控制,都必须具有该对象的存储.objects.delete
权限
版本控制的工作方式是,当您删除对象的“活动”版本时,该版本被标记为“非当前”版本(并被填充)。为了在已存在实时版本(即覆盖对象)时创建对象的新版本,发生的事务是:
- 删除当前版本
- 创建成为“实时”或“当前”版本的新版本
如果要覆盖对象,无论其父存储桶是否启用了版本控制,都必须具有该对象的存储.objects.delete
权限
版本控制的工作方式是,当您删除对象的“活动”版本时,该版本被标记为“非当前”版本(并被填充)。为了在已存在实时版本(即覆盖对象)时创建对象的新版本,发生的事务是:
- 删除当前版本
- 创建成为“实时”或“当前”版本的新版本
谢谢。我希望我做错了什么,因为当我的目标是保存东西时,我需要授予我的服务帐户删除东西的特权,这看起来很疯狂谢谢。我希望我做错了什么,因为当我的目标是保存内容时,我需要授予我的服务帐户删除内容的特权,这看起来很疯狂
> gsutil versioning get gs://my-bucket
gs://my-bucket: Enabled