GCP未过期令牌排查:离职用户令牌滥用及长有效期令牌检索
GCP令牌排查脚本化解决方案
1. 查找特定暂停用户名下所有已签发令牌
1.1 查询用户OAuth2刷新令牌
使用gcloud identity users list-refresh-tokens获取目标用户的所有刷新令牌,包含关键时间信息:
gcloud identity users list-refresh-tokens USER_EMAIL \ --format="table(id, createdTime, expiryTime, clientId)"
替换USER_EMAIL为离职用户邮箱,输出会展示令牌ID、创建时间、过期时间及关联客户端ID,可快速识别长期有效令牌。
1.2 查询用户关联的服务账号密钥
先定位该用户作为所有者的服务账号,再逐个列出密钥:
# 获取用户拥有的服务账号列表 SERVICE_ACCOUNTS=$(gcloud iam service-accounts list \ --filter="owner.email=USER_EMAIL" \ --format="value(email)") # 遍历输出每个服务账号的密钥 for SA in $SERVICE_ACCOUNTS; do echo "=== 服务账号: $SA ===" gcloud iam service-accounts keys list \ --iam-account=$SA \ --format="table(keyId, createdTime, expiryTime, keyType)" done
替换USER_EMAIL后,脚本会输出该用户关联服务账号的所有密钥,其中expiryTime为空的即为永久有效密钥。
2. 检索全平台长有效期令牌
以下以有效期超过90天或永久有效为长有效期判定标准,可根据需求调整时间阈值。
2.1 全平台服务账号长有效期密钥
# 过滤永久有效或有效期超90天的服务账号密钥 gcloud iam service-accounts keys list \ --filter="expiryTime>=$(date -d '+90 days' +%Y-%m-%dT%H:%M:%SZ) OR expiryTime:''" \ --format="table(iamAccount, keyId, createdTime, expiryTime, keyType)"
expiryTime:''匹配永久有效密钥,date -d '+90 days'生成90天后的时间戳,精准过滤长有效期密钥。
2.2 全平台用户长有效期OAuth2刷新令牌
遍历所有用户,筛选过期时间超90天的刷新令牌:
# 获取所有用户邮箱 USERS=$(gcloud identity users list --format="value(primaryEmail)") # 逐个用户查询并过滤 for USER in $USERS; do echo "=== 用户: $USER ===" gcloud identity users list-refresh-tokens $USER \ --filter="expiryTime>=$(date -d '+90 days' +%Y-%m-%dT%H:%M:%SZ)" \ --format="table(id, createdTime, expiryTime, clientId)" done
脚本会遍历所有用户,输出符合条件的长有效期刷新令牌,便于批量排查。
内容的提问来源于stack exchange,提问作者gcp-cloud-engineer
相关产品推荐
相关产品推荐

