谷歌云服务账号密钥泄露:立刻禁用、轮换、查账单
*-service-account.json 出现在仓库里,按分钟算,不是按天。矿工脚本专门吃这个:它们会定时轮询公开仓库、镜像站和 CI 日志,一旦命中就立刻用你的密钥去开 GPU 实例、拉高配额、对外扫端口。从密钥被推到公开仓库,到账单开始跳字,中间可能只有几分钟。所以处理顺序不是“先分析原因”,而是先止血、再轮换、再对账。
立刻:五步止血
第一步:禁用或删除该密钥。 进入云控制台 → IAM 与管理 → 服务账号 → 选中对应账号 → 密钥(Keys)标签页,找到泄露的那把,先 Disable,确认业务影响范围后 Delete。禁用是秒级生效的,比删除更稳妥——删除不可逆,禁用可以留出观察窗口。如果密钥是通过 Workload Identity Federation 或 ADC 间接使用的,同样要检查对应的信任配置是否被改动。
第二步:查账单和 VM 列表。 打开结算报表,按 SKU 排序,重点看 GPU(如 A100、T4、L4)、高配 CPU、出网流量三项有没有异常尖峰。同时看 Compute Engine 实例列表,是否有你没创建过的机器、是否在陌生区域、是否绑定了外部 IP。再查防火墙规则和 VPC,看有没有被新增的放行规则,尤其是 22、3389、以及对外扫描常用的高位端口。这一步的目的不是“确认损失”,而是确认攻击者是否还在活动。
第三步:轮换所有可能被同一文件碰到的密钥。 不要只换泄露的那一把。同一个仓库、同一个 CI 变量、同一台构建机上出现过的其他服务账号密钥、API Key、OAuth 客户端密钥,都要一起轮换。判断标准很简单:只要它和泄露文件在同一个可读范围内,就默认已泄露。
第四步:把预算告警拉到紧。 设置一个明显低于日常用量的阈值,并绑定邮件和短信通知。具体配置方法见预算告警。预算告警不能阻止消费,但能让你在下一轮异常发生时更早收到信号。
第五步:结算异常走排查流程。 如果已经产生异常费用,先确认账单归属和争议路径,参考结算排查。同时保留好密钥禁用时间、实例创建时间、日志截图,这些是后续沟通的基础材料。
之后:把这类事故的概率压下去
能不用 JSON 文件就不用。优先使用 ADC(应用默认凭据)或 Workload Identity,让工作负载通过平台身份直接获取短期凭据,而不是把长期密钥写进文件、塞进环境变量。CI/CD 里尤其要注意:不要把密钥写进仓库变量后又在日志里打印出来。
权限按最小角色给。不要图省事直接上 Editor 或 Owner。一个只需要读对象存储的任务,就只给 Storage Object Viewer;一个只需要写日志的服务,就只给 Logs Writer。角色越窄,单把密钥泄露后的爆炸半径越小。
密钥要有生命周期。给服务账号密钥设置过期时间,定期轮换,而不是“建一次用到天荒地老”。同时开启审计日志,把服务账号的密钥创建、禁用、使用记录留痕,出问题时能快速定位时间线。
对照表:泄露后先看什么
| 检查项 | 看哪里 | 异常信号 |
|---|---|---|
| 密钥状态 | IAM → 服务账号 → 密钥 | 出现非本人创建的密钥 |
| 计算资源 | Compute Engine 实例列表 | 陌生区域、GPU 机型、外部 IP |
| 网络行为 | 防火墙规则 / VPC | 新增放行规则、对外扫描端口 |
| 费用 | 结算报表按 SKU 排序 | GPU、出网流量尖峰 |
| 身份使用 | 审计日志 | 非预期时间、非预期来源的调用 |
常见问题
如何开通并登录该国际云账号?
先确认使用的是国际站而非中国站。可按本文步骤办理;也可通过申请账号开通并用 USDT-TRC20 支付订单。交付后请立即开启 MFA,并核对账号邮箱与 UID。
国际站账号和中国站账号能通用吗?
通常不能。国际站与中国站多为独立账号体系,控制台、结算与产品权限不互通,请使用对应站点的登录入口,避免串站导致无法登录或资源不可见。
没有海外信用卡能否完成开通或充值?
可以走平台支持的 USDT-TRC20 订单支付与自助充值。支付时务必按订单显示的精确金额转账,并在区块链浏览器确认网络、地址与状态。