
环境变量便于配置应用,但不天然等于安全。它们可能出现在 Compose 文件、进程信息、错误日志和备份中,需要结合权限、轮换与专用密钥服务管理。
1. 仓库只保留变量模板
提交 .env.example,写明变量含义和格式;真实 .env 加入忽略规则,并限制为仅部署账号可读。
2. 区分普通配置与秘密
端口、日志级别可作为普通环境变量,数据库密码、签名密钥和第三方令牌应进入密钥管理流程。
3. 减少秘密暴露路径
启动脚本不要 echo 整个环境,错误报告不要打印请求头,CI 日志应启用掩码。镜像构建阶段也不要写入长期密钥。
4. 设计轮换和撤销
记录密钥所有者、用途和到期时间。轮换时允许新旧密钥短暂并存,并在验证后彻底撤销旧值。
常见误区
- 真实 .env 被提交
- 多个服务共用同一密钥
- 日志打印完整配置
- 密钥泄露后只删除文件
执行检查清单
- 仓库无有效秘密
- 文件权限最小化
- CI 日志已掩码
- 关键密钥可轮换
总结
密钥管理的目标不是把秘密藏在另一个文件,而是控制谁能读取、在哪里出现,以及泄露后如何快速失效。