Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud storage 为什么gsutil cp需要版本化存储桶上的storage.objects.delete?_Google Cloud Storage_Gsutil - Fatal编程技术网

Google cloud storage 为什么gsutil cp需要版本化存储桶上的storage.objects.delete?

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

我正在使用一个服务帐户将一个文件上传到具有版本控制的Google云存储桶。我想保持服务帐户权限最小,它只需要上传文件,所以我不想给它删除文件的权限,但上传失败(只有在流式传输所有内容之后!)说它需要删除权限

它不应该创建一个新版本而不是删除吗

命令如下:

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**(针对目标存储桶)
**只有在不使用-n标志并且插入了与已插入的对象同名的对象时,才需要此权限 存在于桶中

谷歌文档建议使用-n(不要覆盖现有文件),这样就不需要
存储.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