Google Cloud旧服务账号使用查询及安全删除方案问询
完全理解你的顾虑——直接动服务账号或密钥确实容易踩坑,尤其是不确定它们是否还在被使用的时候。下面是我在处理这类问题时常用的方法,既能摸清账号的使用状态,又能安全清理:
一、查看服务账号的上次使用时间与使用频率
要确认服务账号是否活跃,Cloud Audit Logs是最可靠的工具,因为几乎所有Google Cloud API调用都会留下日志记录:
通过Log Explorer查询活动日志
打开Cloud Console的Log Explorer,输入以下筛选条件(替换成你的服务账号邮箱):protoPayload.authenticationInfo.principalEmail: "your-service-account@PROJECT-ID.iam.gserviceaccount.com"你可以调整时间范围(比如选过去30天、90天),日志会按时间倒序排列,最新的活动会显示在最顶部。从这里你能清楚看到账号的使用频率和上次活跃时间。
用gcloud命令快速查询
如果习惯用命令行,直接运行以下命令就能获取最近的活动记录:gcloud logging read 'protoPayload.authenticationInfo.principalEmail="your-service-account@PROJECT-ID.iam.gserviceaccount.com"' --limit=20 --order=desc输出结果里的
timestamp字段就是每条活动的时间,一眼就能找到最新的使用记录。查看密钥的使用记录
在Cloud Console的「IAM & Admin > Service Accounts」页面,点击目标账号进入详情页,切换到「Keys」标签。这里会列出所有密钥的创建时间,以及上次使用时间(仅当密钥用于调用Google Cloud API时才会记录,第三方服务调用不会显示)。如果某个密钥很久没被使用,那它对应的使用场景大概率已经废弃了。
二、安全清理的最优方案:避免直接删除密钥
直接删密钥风险太高,万一有隐藏的服务在依赖它,瞬间就会导致服务中断。我通常推荐以下循序渐进的流程:
先禁用服务账号,而非删除
在服务账号详情页点击「Disable」按钮。禁用后,该账号的所有密钥都会失效,但账号本身还在,你有足够的缓冲期验证是否有依赖。监控异常日志,确认无依赖
禁用后的几天到几周内,用Log Explorer筛选和该账号相关的错误日志,比如:protoPayload.authenticationInfo.principalEmail: "your-service-account@PROJECT-ID.iam.gserviceaccount.com" AND protoPayload.status.code=16这个条件会筛选出该账号的认证失败请求。如果连续几天都没有这类日志,基本可以确定没有服务在使用它了。
检查资源绑定情况
别忘记检查项目里的云资源是否绑定了这个服务账号:比如Compute Engine实例的默认服务账号、Cloud Functions/Cloud Run的运行账号、BigQuery的作业服务账号等。可以通过资源的配置页面逐一确认,确保没有遗漏的依赖。彻底清理
确认无任何依赖后,你可以选择:- 先删除所有关联密钥,再删除服务账号;
- 直接删除服务账号(删除账号会自动清理所有密钥)。
这样一套流程下来,既能保证不会误删正在使用的账号,又能安全清理废弃的资源。
内容的提问来源于stack exchange,提问作者Christiaan




