Azure Key Vault最佳实践:密钥每次提取还是存入OS环境变量更优?
从Azure安全最佳实践以及合规要求来看,优先选择「应用程序每次使用密钥时从Key Vault实时提取」的方案,将密钥写入OS环境变量属于高风险的不推荐操作。
为什么不建议把密钥存到OS环境变量
- 环境变量属于明文存储,所有能访问该操作系统实例的用户、同主机其他进程、容器 sidecar 程序都可以直接读取,没有细粒度权限管控,违背最小权限原则
- 密钥写入环境变量后会长期留存,很容易被意外泄漏到程序日志、进程dump文件、运维快照、配置巡检记录中,密钥泄漏的窗口期极长
- 密钥轮转后必须重启应用、重新加载环境变量才能生效,无法实现无感轮转,很容易因为配置更新不及时导致业务中断
- 不符合等保2.0、PCI-DSS、HIPAA等合规规范中「敏感凭证不得明文存储在应用运行环境、禁止长期持久化存储非必要的敏感密钥」的相关要求
实时从Key Vault拉取密钥的优势
- 密钥仅在应用内存中存在极短的使用周期,使用完成后即可立即清理,大幅缩小泄漏风险窗口
- 可以复用Key Vault原生的细粒度权限控制能力,仅给应用对应的托管身份授予最小必要的密钥访问权限,所有密钥访问操作都有完整的审计日志可追溯,完全满足合规审计要求
- 支持密钥无感轮转,应用每次拉取都可以拿到最新版本的密钥,不需要重启应用、修改运行环境配置
- 可以搭配Azure Key Vault SDK内置的缓存机制(默认缓存周期24小时,可自定义调整),平衡安全和性能开销,不需要每次使用都真正发起远程请求,实际性能损耗极低
补充提示:如果是离线运行、无法持续访问Key Vault的极端场景,也建议将加密后的密钥缓存到应用内存或加密的本地存储中,不要明文写入环境变量或本地配置文件。
内容的提问来源于stack exchange,提问作者Nesan Mano
相关产品推荐
相关产品推荐

