环境变量为何需要加密
Docker Compose 常用 .env 文件保存数据库密码、API密钥等敏感信息。但该文件默认未加密,一旦被提交到Git仓库或泄露到不可信环境,账号凭据将直接暴露。因此,对敏感环境变量进行加密存放是必要的安全措施。
明文 .env 的常见风险
- 开发人员误将 .env 推送至公开仓库
- 备份文件、IDE工具或日志意外泄露内容
- 运维审计缺失,无法追踪读取记录
加密方案对比
Docker Secrets
Docker Swarm 提供 Secrets 机制,但单机版 Compose 并不原生支持加密存储,仍需额外工具管理 secret 文件。
SOPS + age/PGP
SOPS 是开源的加密工具,支持 YAML/JSON/ENV 格式,可以针对键值加密。配合 age 或 PGP,可在 CI/CD 中方便解密。推荐用于 Compose 项目的环境变量管理。
实现步骤
- 安装 SOPS 和 age,并生成 age 密钥对。
- 将明文 .env 内容写入临时文件,通过
sops --encrypt .env 生成加密文件,如 .env.enc。 - 配置
.sops.yaml 指定加密规则,确保每个键值都被加密。 - 在启动容器前,使用 SOPS 解密并输出环境变量文件,然后在
docker compose --env-file 中加载。 - 在 CI/CD 流程中,通过密钥管理服务注入 age 私钥,避免手工接触。
安全建议
- 绝不将 .env 或私钥文件提交到版本库,建议在 .gitignore 中忽略。
- 限制解密权限,仅授权给需要发布的服务或人员。
- 定期轮换密钥和数据库密码,并重新生成加密文件。
- 在日志中过滤环境变量内容,防止误打印。
通过以上方式,可以显著降低凭据泄露风险,同时保持 Docker Compose 的工作流程不变。