如何查询GCP服务账号(service account)有权限访问的项目?
GCP 指定服务账号可访问项目查询方案
GCP 没有提供直接查询单个服务账号关联的所有项目的原生独立接口,可通过以下两种实操路径完成查询:
方法1:gcloud CLI 遍历查询(适合项目量少的场景)
- 提前完成gcloud 本地认证,确保你当前使用的操作账号拥有所有待排查项目的
iam.serviceAccounts.getIamPolicy权限 - 拉取当前账号可见的所有项目ID,存入临时变量:
PROJECT_IDS=$(gcloud projects list --format="value(projectId)") - 遍历所有项目,匹配指定服务账号的IAM绑定关系,输出匹配到的项目:
for PROJECT in $PROJECT_IDS; do gcloud projects get-iam-policy $PROJECT --filter="bindings.members:serviceAccount:<替换为你的服务账号邮箱>" --format="value(projectId)" | grep . && echo "匹配成功项目ID: $PROJECT"; done - 注意:该方案的执行速度和项目数量正相关,项目量级过百时查询耗时会明显增加
方法2:Cloud Asset Inventory 批量查询(适合项目量大的场景)
- 前置要求:你所在的GCP组织已开启Cloud Asset API,你的操作账号拥有组织层面的
cloudasset.assets.searchAllIamPolicies权限 - 执行单条命令直接拉取全组织范围内绑定了目标服务账号的项目:
gcloud asset search-all-iam-policies --scope="organizations/<替换为你的组织ID>" --query="policy.bindings.members:serviceAccount:<替换为你的服务账号邮箱>" --format="value(resource)" | grep "projects/" - 该方案直接调用组织层面的资产快照接口,千级项目场景下也可在数秒内返回完整结果
注意:两种方案返回的结果仅包含你当前操作账号有权限查看的项目,若目标服务账号绑定了你无访问权限的项目,对应项目不会出现在结果列表中。
内容的提问来源于stack exchange,提问作者Alexander Tissen
相关产品推荐
相关产品推荐

