服务帐户没有对Google Cloud Storage的storage.objects.get访问权限

Dru*_*rux 6 python google-cloud-storage service-accounts google-cloud-platform

我已经在Google Cloud Console中创建了一个服务帐户并选择了角色Storage/ Storage Admin(即,完全控制GCS资源)。

gcloud projects get-iam-policy my_project似乎表明实际上已选择了该角色:

- members:
  - serviceAccount:my_sa@my_project.iam.gserviceaccount.com
  role: roles/storage.admin
- members:
  - serviceAccount:my_sa@my_project.iam.gserviceaccount.com
  role: roles/storage.objectAdmin
- members:
  - serviceAccount:my_sa@my_project.iam.gserviceaccount.com
  role: roles/storage.objectCreator
Run Code Online (Sandbox Code Playgroud)

并且文档清楚地表明角色roles/storage.admin包含权限storage.objects.*(以及storage.buckets.*)。

但是,当我尝试将该服务帐户与适用于Python的Google Cloud Storage客户端库结合使用时,会收到以下错误消息:

my_sa@my_project.iam.gserviceaccount.com没有对my_project / my_bucket的storage.objects.get访问权限。

那么,为什么所选角色在这种情况下不够用?

小智 32

转到您的存储桶的权限部分,然后打开为您的存储桶添加权限部分。例如,gcloud 告诉您的服务不足是;

1234567890-compute@developer.gserviceaccount.com 
Run Code Online (Sandbox Code Playgroud)

添加此服务作为用户,然后赋予这些角色;

  • 云存储 - 存储管理员
  • 云存储 - 存储对象管理
  • 云存储 - 存储对象创建者

那么您应该有足够的权限来对您的存储桶进行更改。

  • 谢谢,这对我有用。虽然我的实际用户名已添加所有权限,但仅当我添加 1234567890-compute@developer.gserviceaccount.com 此主体时它才有效 (3认同)

Dru*_*rux 17

问题显然是服务帐户与太多角色相关联,这可能是先前配置尝试的结果。

这些步骤解决了这个问题:

  • 删除了/my_sa下违规服务帐户(成员)的所有(三个)角色IAM & AdminIAM
  • my_saIAM & Admin/下删除Service accounts
  • 重新创建my_sa(再次使用角色Storage/ Storage Admin

效果是这样的:

  • my_saStorage AdminIAM & Admin/下显示一个角色 ( )IAM
  • my_saStorage/ Browser/ my_bucket/下显示为成员Edit bucket permissions

  • 很高兴听到你解决了这个问题。原则上,如果服务帐户具有存储管理员角色,则无论它具有什么其他角色,它都应该能够创建存储桶。我尝试重现此问题,使用具有三个角色 storage.admin、storage.objectAdmin 和 storage.objectCreator 的服务帐户;我确认我可以使用该服务帐户创建一个存储桶。如果问题在您这边仍然存在,您能否通过添加这些额外角色来仔细检查? (3认同)

0Pa*_*Pat 9

值得注意的是,如果您刚刚分配了权限,您需要等待一分钟或其他时间才能使权限生效。至少这就是我之后发生的事情:

gcloud projects add-iam-policy-binding xxx --member
"serviceAccount:xxx@xxx.iam.gserviceaccount.com" --role "roles/storage.objectViewer"
Run Code Online (Sandbox Code Playgroud)