机密信息管理
安全地管理密码、密钥等敏感信息是生产环境的关键。
Docker Secrets(Swarm 模式)
Docker Secrets 是 Docker Swarm 提供的密钥管理功能。
创建 Secret
sh
# 从文件创建
echo "my-secret-password" | docker secret create db_password -
# 从标准输入创建
docker secret create db_password < password.txt
# 从环境变量创建
echo -n "my-secret" | docker secret create api_key -使用 Secret
yaml
version: '3.8'
services:
web:
image: nginx
secrets:
- db_password
- api_key
environment:
- DB_PASSWORD_FILE=/run/secrets/db_password
- API_KEY_FILE=/run/secrets/api_key查看 Secret
sh
# 列出所有 secrets
docker secret ls
# 查看 secret 详情
docker secret inspect db_password删除 Secret
sh
docker secret rm db_password环境变量(不推荐用于敏感信息)
注意
环境变量不适合存储敏感信息,因为:
- 在容器内可见
- 可能被记录到日志
- 可能被其他进程访问
如果必须使用,至少:
yaml
services:
web:
env_file:
- .env.secrets # 不提交到版本控制外部密钥管理
HashiCorp Vault
yaml
services:
web:
image: nginx
environment:
- VAULT_ADDR=http://vault:8200
# 使用 Vault Agent 注入密钥AWS Secrets Manager
yaml
services:
web:
image: nginx
environment:
- AWS_REGION=us-east-1
# 使用 AWS SDK 获取密钥最佳实践
- 使用 Docker Secrets - Swarm 模式推荐
- 外部密钥管理 - 生产环境使用专业工具
- 不提交密钥 - 密钥文件加入
.gitignore - 定期轮换 - 定期更新密钥
- 最小权限 - 只授予必要访问权限
- 加密传输 - 使用 TLS 加密
- 审计日志 - 记录密钥访问
警告
永远不要在代码、镜像或配置文件中硬编码敏感信息。
BSFC Tech Pro Tip
生产环境应该使用专业的密钥管理服务(如 HashiCorp Vault、AWS Secrets Manager),而不是简单的环境变量。