基础设施、云与 DevOps · 进阶

管理密钥与凭据

一句话: 代码仓库里的密钥就是已经泄漏的密钥——即便仓库是私有的,即便你之后删掉了它。

存在哪里

存在一个托管的密钥存储里,在运行时注入值,按服务和按环境分权限,并且有访问日志。环境变量是一种传递机制,不是存放地点。

周期性轮换

每个密钥都需要一个能在几分钟内执行完的轮换流程。它在有人离职时、怀疑泄漏时,以及日常例行中都会用到。如果轮换需要停机,那么真正需要的时候就不会去做。

短时间内支持两把同时有效的密钥,让轮换过程平滑。

提前防止泄漏

构建流程里的密钥扫描器,以及保存变更之前的钩子,好让密钥在进入历史之前就被拦住。如果已经进去了——就当作已泄漏,立即轮换,然后才去清理历史。

深入一层

把密钥按环境彻底分开。一把可以从开发环境访问到的生产密钥,会让「隔离」这件事失去意义,而大多数内部泄漏正是这样发生的——不是出于恶意,而是某个脚本被误指向了错误的地址。