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

如何自动获取GCP中服务账号的名称、角色及密钥?

GCP全项目服务账号信息批量获取方案

前提要求

  • 已安装并完成gcloud CLI初始化,拥有全项目/组织级IAM权限(至少包含roles/iam.serviceAccountViewer、roles/iam.securityReviewer、roles/cloudasset.viewer)
  • 若按组织范围获取项目,需提前准备组织ID

批量获取脚本(Bash)

以下脚本会遍历指定范围的所有项目,输出每个服务账号的项目ID、邮箱、名称、绑定角色、密钥创建时间、密钥状态,结果为CSV格式便于后续分析:

#!/bin/bash

# 配置:替换为你的组织ID,无需组织则注释此行并启用下一行
ORG_ID="your-organization-id"
PROJECTS=$(gcloud projects list --filter="parent.type=organization" --organization=$ORG_ID --format="value(projectId)")
# PROJECTS=$(gcloud projects list --format="value(projectId)") # 无组织时,获取所有有权限的项目

# 输出CSV表头
echo "项目ID,服务账号邮箱,服务账号名称,绑定角色,密钥创建时间,密钥状态"

# 遍历每个项目
for PROJECT in $PROJECTS; do
  echo "处理项目: $PROJECT"
  
  # 获取当前项目下所有服务账号的邮箱和显示名称
  SERVICE_ACCOUNTS=$(gcloud iam service-accounts list --project=$PROJECT --format="value(email,displayName)")
  
  # 遍历每个服务账号
  while read -r SA_EMAIL SA_NAME; do
    # 获取该服务账号绑定的所有项目级角色(多角色用逗号分隔)
    ROLES=$(gcloud projects get-iam-policy $PROJECT --filter="bindings.members:serviceAccount:$SA_EMAIL" --format="value(bindings.role)" | tr '\n' ',' | sed 's/,$//')
    
    # 获取服务账号的密钥信息
    KEY_INFO=$(gcloud iam service-accounts keys list --iam-account=$SA_EMAIL --project=$PROJECT --format="value(validAfterTime,keyState)")
    
    if [ -z "$KEY_INFO" ]; then
      # 无密钥时输出基础信息
      echo "$PROJECT,$SA_EMAIL,$SA_NAME,$ROLES,,无密钥"
    else
      # 有密钥时逐行输出密钥详情
      while read -r CREATE_TIME STATE; do
        echo "$PROJECT,$SA_EMAIL,$SA_NAME,$ROLES,$CREATE_TIME,$STATE"
      done <<< "$KEY_INFO"
    fi
  done <<< "$SERVICE_ACCOUNTS"
done

关键说明

  1. 解决重复问题:脚本直接从每个项目的服务账号列表拉取信息,每个服务账号归属于唯一项目,不会出现Asset Inventory中因跨层级引用导致的重复条目
  2. 角色获取逻辑:默认获取项目级绑定的角色,若需包含组织/文件夹级的继承角色,可将角色获取命令替换为:
    ROLES=$(gcloud asset search-all-iam-policies --query="policy:bindings.members:serviceAccount:$SA_EMAIL" --format="value(bindings.role)" | sort -u | tr '\n' ',' | sed 's/,$//')
    
    该命令会返回所有层级绑定的唯一角色,避免重复角色条目
  3. 权限兼容:若部分项目权限不足,脚本会跳过对应项目的信息获取,可通过控制台补充权限后重新运行

使用建议

  • 大组织下项目较多时,建议后台运行并输出到文件:./sa-scan.sh > sa-info.csv &
  • 可通过gcloud config set project PROJECT_ID单独测试单个项目的信息获取,验证脚本有效性

内容的提问来源于stack exchange,提问作者jweckl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:27