如何查看与服务账号关联的GCS存储桶及权限?
如何从服务账号出发查询关联的GCS存储桶及权限
你的问题根源在于:你给服务账号赋予的是存储桶级别的IAM权限,而非项目级别的IAM绑定,所以用项目级的gcloud projects get-iam-policy命令自然查不到这些权限——这个命令只能返回绑定在项目层面的角色,无法覆盖存储桶这类具体资源级别的IAM配置。
下面是两种直接从服务账号出发,查询其关联存储桶及对应权限的实用方法:
方法1:遍历所有存储桶并筛选目标服务账号
如果你的项目存储桶数量不多,可以用gcloud storage命令直接遍历所有桶的IAM政策,筛选出包含目标服务账号的条目:
gcloud storage buckets get-iam-policy gs://* \ --flatten="bindings[].members" \ --filter="bindings.members:serviceAccount:test-sa@<PROJECT>.iam.gserviceaccount.com" \ --format="value(name, bindings.role)"
这个命令会:
- 遍历当前项目下所有GCS存储桶(
gs://*) - 展开每个桶的IAM绑定成员列表
- 筛选出包含目标服务账号的绑定规则
- 以简洁的格式返回存储桶名称和对应的角色
如果你更习惯使用gsutil,也可以结合shell循环实现类似效果:
for bucket in $(gsutil ls); do gsutil iam get "$bucket" | grep -q "test-sa@<PROJECT>.iam.gserviceaccount.com" && echo "Bucket: $bucket" && gsutil iam get "$bucket" | jq '.bindings[] | select(.members[] | contains("test-sa@<PROJECT>.iam.gserviceaccount.com"))' done
方法2:使用Cloud Asset Inventory高效查询
如果你的项目有大量存储桶,逐个遍历的效率会很低,推荐使用Cloud Asset Inventory(CAI)的命令——它基于Google Cloud的资产索引,可以批量搜索所有资源的IAM政策,精准定位目标服务账号的权限:
gcloud asset search-all-iam-policies \ --query="policy:test-sa@<PROJECT>.iam.gserviceaccount.com" \ --asset-types=storage.googleapis.com/Bucket \ --format="value(resourceName, binding.role)"
这个命令的优势很明显:
- 查询速度远快于遍历单个桶,适合大规模资源场景
- 可以精准限定只搜索存储桶类型的资源
- 返回结果包含存储桶的完整资源路径和对应的角色
补充说明
要记住:Google Cloud的IAM权限可以绑定在多个层级(项目、文件夹、组织、具体资源),如果你要查询一个身份(服务账号/用户)的所有权限,需要覆盖所有可能的绑定层级。项目级的IAM查询只是其中一部分,资源级的权限需要专门针对资源类型查询,或者用CAI这种全局工具来汇总。
内容的提问来源于stack exchange,提问作者Jason Stanley
相关产品推荐
相关产品推荐

