【问题标题】:Overwriting object in google cloud storage failed覆盖谷歌云存储中的对象失败
【发布时间】:2020-04-22 16:29:23
【问题描述】:

我尝试将文件的新版本上传到存储桶。

gsutil cp test.txt gs://mybucket/test.txt

并收到 403 响应:

Copying "direction: ltr;" class="">AccessDeniedException: 403 xxx@yyy.iam.gserviceaccount.com does not have storage.objects.delete access to mybucket/test.txt.

实际上,服务帐户具有对象创建者角色。 还不够吗?

【问题讨论】:

  • 您的存储桶是否具有细粒度或统一访问权限?您在 IAM 控制台或 ACL 中的何处分配了该服务帐户的角色?

标签: google-cloud-storage


【解决方案1】:

根据官方文档

存储对象创建器

允许用户创建对象。不允许查看, 删除或覆盖对象

resourcemanager.projects.get

resourcemanager.projects.list

storage.objects.create

因此,请分配给您的服务帐户Storage Object Admin (roles/storage.objectAdmin),因为您没有storage.objects.delete 访问版本控制过程中使用的存储桶的权限。 当您将文件的新版本上传到 Cloud Storage 存储分区时,对象版本控制会将现有对象移至非当前状态。

我使用在具有Access control Uniform 并启用版本控制的存储桶上具有Object Creator role 的服务帐户复制了您的用例,并得到了相同的错误消息:

service-account.iam.gserviceaccount.com does not have storage.objects.delete access to your-bucket/file

【讨论】:

  • 存储对象管理在我的情况下太多了。我不想让服务帐户执行任何管理操作。例如,定义存储桶 public。
  • 我认为您混淆了 Storage Object Admin (roles/storage.objectAdmin)Storage Admin (roles/storage.admin) link。您还可以通过将storage.objects.delete 添加到Storage Object Creator 的权限来创建自定义角色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 2016-10-12
相关资源
最近更新 更多