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

如何通过gcloud判断项目所有者账户状态并批量筛选废弃项目

批量判断GCP项目所有者账户活跃状态的方法

你已经能批量获取GCP项目的所有者,但要判断这些账户是否活跃,需要结合gcloud identity users describe命令来实现,具体步骤和修改后的脚本如下:

核心思路

  1. 从get-iam-policy返回的成员中,过滤出用户类型的成员(格式为user:xxx@yourdomain.com),排除服务账号、群组等非个人用户类型
  2. 提取用户邮箱,调用gcloud identity users describe命令获取用户状态,该命令会返回用户的isSuspended字段(true表示账户已停用,false表示活跃)
  3. 整合逻辑,批量输出每个项目对应的活跃/非活跃所有者列表

修改后的脚本

# 先获取所有项目ID
PROJECTS=$(gcloud projects list --format="value(projectId)")

# 缓存已查询过的用户状态,避免重复查询提升效率
declare -A USER_STATUS_CACHE

for PROJECT in ${PROJECTS}; do
  echo "=== 处理项目: ${PROJECT} ==="
  # 获取项目的所有者成员,过滤出user类型的成员
  OWNERS=$(gcloud projects get-iam-policy ${PROJECT} --flatten=bindings \
    --filter="bindings.role:roles/owner AND bindings.members:user:*" \
    --format='value(bindings.members)')
  
  for OWNER in ${OWNERS}; do
    # 提取用户邮箱(去掉前缀user:)
    USER_EMAIL=${OWNER#user:}
    
    # 先查缓存,没有再调用命令查询
    if [[ -z "${USER_STATUS_CACHE[$USER_EMAIL]}" ]]; then
      USER_STATUS=$(gcloud identity users describe ${USER_EMAIL} --format='value(isSuspended)')
      USER_STATUS_CACHE[$USER_EMAIL]=$USER_STATUS
    fi
    
    # 转换状态描述
    if [[ "${USER_STATUS_CACHE[$USER_EMAIL]}" == "false" ]]; then
      STATUS="活跃"
    else
      STATUS="非活跃(已停用)"
    fi
    
    echo "所有者: ${USER_EMAIL} - 状态: ${STATUS}"
  done
done

关键说明

  • 过滤用户类型:通过--filter增加bindings.members:user:*,只保留个人用户,排除serviceAccount:、group:等类型的成员
  • 缓存优化:用关联数组USER_STATUS_CACHE存储已查询过的用户状态,避免同一个用户被多次查询,大幅提升数千个项目的处理效率
  • 状态判断:isSuspended为false代表账户正常活跃,true代表账户已被停用(非活跃)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:40