我已经在Google Cloud Console中创建了一个服务帐户,并选择了角色Storage
/ Storage Admin
(即,完全控制GCS资源)。
gcloud projects get-iam-policy my_project
似乎indicate实际已选择角色:
- 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
documentation清楚地表明角色roles/storage.admin
包含权限storage.objects.*
(以及storage.buckets.*
)。
但是当我尝试将该服务帐户与适用于Python的Google Cloud Storage客户端库结合使用时,会收到以下错误消息:
my_sa@my_project.iam.gserviceaccount.com没有 storage.objects。获取对my_project / my_bucket的访问权限。
那么为什么所选角色在这种情况下不够?
答案 0 :(得分:3)
转到您的存储桶的权限部分并为您的存储桶打开添加权限部分。例如,gcloud 告诉您的服务不足是;
1234567890-compute@developer.gserviceaccount.com
将此服务添加为用户,然后赋予这些角色;
那么您应该有足够的权限对您的存储桶进行更改。
答案 1 :(得分:1)
问题显然是服务帐户与太多角色相关联,这可能是先前配置尝试的结果。
这些步骤解决了该问题:
my_sa
/ IAM & Admin
下有问题的服务帐户(成员)IAM
的所有(三个)角色my_sa
/ IAM & Admin
下删除了Service accounts
my_sa
(同样是角色Storage
/ Storage Admin
)效果如下:
my_sa
在Storage Admin
/ IAM & Admin
下出现一个角色(IAM
)my_sa
在Storage
/ Browser
/ my_bucket
/ Edit bucket permissions
答案 2 :(得分:0)
值得注意的是,如果您刚刚分配了权限,则需要等待一分钟或一段时间才能使权限正常工作。至少那是我之后发生的事情:
gcloud projects add-iam-policy-binding xxx --member
"serviceAccount:xxx@xxx.iam.gserviceaccount.com" --role "roles/storage.objectViewer"