如何为GCP服务账号配置资源级权限实现仅可访问指定Cloud Storage存储桶
配置错误根因
你遇到的403问题完全由Deployment Manager配置的结构错误导致,GCP完全支持给服务账号授予单个存储桶的访问权限,不需要开放项目内所有存储桶的权限。
核心错误有2处:
bindings字段要求为数组类型,你当前配置为单个对象,不符合GCP资源的IAM绑定字段规范- 单个绑定内的成员字段为复数
members(值为成员列表),你错误使用了单数member字段
错误格式的bindings会被Deployment Manager直接忽略,因此你实际没有成功给存储桶配置对应权限,这也是Policy Analyzer查询不到权限记录的原因。你之前查看到的权限绑定大概率是手动临时配置或者看错了资源。
修正后的配置代码
def GenerateConfig(context): """Generate configuration for a cloud storage bucket for experiment data.""" resources = [] resources.append({ 'type': 'storage.v1.bucket', 'name': 'mybucket', 'properties': { 'predefinedAcl': 'projectPrivate', 'projection': 'full', 'location': 'europe-west2', 'storageClass': 'STANDARD', 'bindings': [ { 'role': 'roles/storage.objectCreator', 'members': ['serviceAccount:my-service@my-project.iam.gserviceaccount.com'] } ] } }) return {'resources': resources}
部署后验证步骤
- 部署完成后执行命令
gsutil iam get gs://mybucket,确认返回的绑定列表中存在对应服务账号的roles/storage.objectCreator权限 - 用服务账号身份执行测试写入命令
gsutil cp test_file gs://mybucket/验证权限是否生效
内容的提问来源于stack exchange,提问作者LlamaD
相关产品推荐
相关产品推荐

