Skip to content

机密信息管理

安全地管理密码、密钥等敏感信息是生产环境的关键。

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 获取密钥

最佳实践

  1. 使用 Docker Secrets - Swarm 模式推荐
  2. 外部密钥管理 - 生产环境使用专业工具
  3. 不提交密钥 - 密钥文件加入 .gitignore
  4. 定期轮换 - 定期更新密钥
  5. 最小权限 - 只授予必要访问权限
  6. 加密传输 - 使用 TLS 加密
  7. 审计日志 - 记录密钥访问

警告

永远不要在代码、镜像或配置文件中硬编码敏感信息。

BSFC Tech Pro Tip

生产环境应该使用专业的密钥管理服务(如 HashiCorp Vault、AWS Secrets Manager),而不是简单的环境变量。


由 BSFC Tech 提供技术支持