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

如何排查GCP第二代Node.js函数调用所用的服务账号密钥?

排查GCP第二代Node.js函数使用的服务账号密钥

一、先明确核心前提

第二代Cloud Functions默认采用工作负载身份机制,如果你仅在HttpsOptions中指定服务账号、未配置额外密钥相关内容,函数运行时不会使用IAM中创建的服务账号持久化密钥——它会自动从GCP元数据服务器获取短期有效、动态生成的临时凭证,这类凭证不关联你看到的已生成/禁用的密钥。

只有当函数代码中显式加载了服务账号密钥文件时,才会用到持久化密钥。

二、排查实际使用的密钥(若确实用了持久化密钥)

1. 检查函数代码

搜索代码中是否存在加载密钥的逻辑,比如:

const {GoogleAuth} = require('google-auth-library');
// 显式指定密钥文件
const auth = new GoogleAuth({keyFilename: './your-key-file.json'});
// 或直接传入密钥内容
const auth = new GoogleAuth({credentials: require('./your-key-file.json')});

找到对应的密钥文件名或private_key_id字段,即可对应到IAM中服务账号的具体密钥。

2. 查看函数运行日志

在Cloud Logging中筛选函数日志,查找包含密钥ID的条目:

  • 使用过滤器:resource.type="cloud_function" AND resource.labels.function_name="你的函数名" AND (textPayload:"private_key_id" OR jsonPayload.private_key_id)
  • 若函数加载了密钥,部分客户端库会在日志中记录密钥的private_key_id(注意:禁止在日志中输出完整密钥,这会引发安全风险)。

3. 核对密钥的最后使用时间

进入IAM控制台的目标服务账号详情页,查看密钥列表中的最后使用时间:

  • 路径:IAM > 服务账号 > 目标账号 > 密钥
  • 结合函数的活跃运行时段,对比密钥的最后使用时间,可推断哪个密钥被函数调用过。

三、多活跃密钥的清理建议

  • 若函数未使用持久化密钥,建议禁用/删除所有服务账号的持久化密钥,降低安全风险。
  • 若必须使用密钥,仅保留当前在用的1个密钥,定期轮换,并将密钥文件存储在Secret Manager中,避免硬编码到代码或部署包内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:52:33