我在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的访问权限。
那么,为什么选择的角色在这种情况下是不够的呢?
问题显然是服务号与太多角色相关联,这可能是以前配置尝试的结果。
这些步骤解决了问题:
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"