提问者:小点点

服务号没有谷歌云存储的存储. object.get访问权限


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

gcloud项目get-iam-policymy_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

留档明确表示角色角色/存储. admin包含权限存储.对象。*(以及存储.桶。*)。

但是,当我尝试将该服务号与Google Cloud Storage Client LibraryPython结合使用时,我会收到以下错误消息:

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

那么,为什么选择的角色在这种情况下是不够的呢?


共3个答案

匿名用户

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

这些步骤解决了问题:

  • 删除了违规服务号(成员)my_sa下的所有(三个)角色IAM

效果是这样的:

  • my_sa下显示一个角色(存储管理员)IAM

匿名用户

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

1234567890-compute@developer.gserviceaccount.com 

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

  • 云存储-存储管理
  • 云存储-存储对象管理
  • 云存储-存储对象创建器

然后,您应该有足够的权限对存储桶进行更改。

匿名用户

值得注意的是,如果您刚刚分配了权限,您需要等待几分钟才能使权限正常工作。至少这就是后来发生在我身上的事情:

gcloud projects add-iam-policy-binding xxx --member
"serviceAccount:xxx@xxx.iam.gserviceaccount.com" --role "roles/storage.objectViewer"