密钥是有生命周期的凭证
密钥不是碰巧敏感的配置值。它有负责人、作用域、轮换流程和审计记录。把密钥存入专用管理器或平台密钥库,只授权给特定工作负载身份,并在运行时注入,而不是在构建时注入。
const secret = await secretManager.accessSecretVersion(
`projects/app/secrets/${name}/versions/latest`
);
示例展示运行时读取;具体 API 各异。关键属性是访问控制、审计,以及镜像和仓库中不出现密钥。
不要通过日志和错误泄漏
大多数泄漏是意外发生的:异常里的连接字符串、请求日志里的授权头、被复制进容器的 .env 文件。配置脱敏,避免记录配置对象,并扫描仓库和构建产物中的密钥模式。出现在 CI 日志里的密钥应视为已泄露。
轮换与吊销
例行轮换限制未发现泄漏的生命周期。怀疑泄露时,先吊销,确认旧凭证失败,再分发新凭证。尽可能自动化轮换,同时保留应急人工流程。平台支持时,使用短时凭证或工作负载身份代替静态密钥。
何时使用
每个能访问生产数据或基础设施的凭证都应使用密钥管理器。优点是集中控制、审计和轮换;代价是多一个依赖,以及引导凭证问题。与环境文件相比,密钥管理器更复杂,但审计和吊销容易得多。