You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看与服务账号关联的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:46:56