搬瓦工 VPS SOPS 配置文件加密管理教程

SOPS(Secrets OPerationS)是由 Mozilla 开发的开源配置文件加密工具,专为在 Git 仓库中安全存储敏感配置信息而设计。它的核心特点是只加密配置文件中的值(Value),而保持键名(Key)可见,这样加密后的文件仍然可以进行有意义的代码审查和版本对比。SOPS 支持 Age、GPG、AWS KMS、GCP KMS 等多种加密后端。

一、安装 SOPS

# 下载安装
wget https://github.com/getsops/sops/releases/download/v3.9.0/sops-v3.9.0.linux.amd64
mv sops-v3.9.0.linux.amd64 /usr/local/bin/sops
chmod +x /usr/local/bin/sops

# 验证安装
sops --version

# 安装 Age(推荐的加密后端)
apt install age -y

二、使用 Age 作为加密后端

2.1 生成密钥

# 生成 Age 密钥
age-keygen -o ~/.sops/age-key.txt

# 设置环境变量
export SOPS_AGE_KEY_FILE=~/.sops/age-key.txt

# 获取公钥
AGE_PUBKEY=$(age-keygen -y ~/.sops/age-key.txt)
echo $AGE_PUBKEY

2.2 创建 SOPS 配置文件

cat > .sops.yaml <<EOF
creation_rules:
  - path_regex: \.enc\.yaml$
    age: >-
      age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
  - path_regex: \.enc\.json$
    age: >-
      age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
EOF

三、加密和解密配置文件

3.1 加密 YAML 文件

# 创建明文配置文件
cat > secrets.yaml <<'EOF'
database:
  host: db.example.com
  port: 5432
  username: admin
  password: SuperSecretPass123
api:
  key: sk-abcdef123456
  secret: api-secret-value
EOF

# 加密配置文件
sops -e secrets.yaml > secrets.enc.yaml

# 查看加密后的文件(键名可见,值被加密)
cat secrets.enc.yaml

3.2 解密文件

# 解密到标准输出
sops -d secrets.enc.yaml

# 解密到文件
sops -d secrets.enc.yaml > secrets.yaml

# 提取特定值
sops -d --extract '["database"]["password"]' secrets.enc.yaml

3.3 编辑加密文件

# 直接编辑(自动解密 -> 编辑 -> 重新加密)
sops secrets.enc.yaml

# 设置编辑器
EDITOR=vi sops secrets.enc.yaml

四、加密 JSON 文件

# 加密 Docker Compose 的 env 文件
cat > env.json <<'EOF'
{
  "DB_PASSWORD": "mysecretpassword",
  "REDIS_PASSWORD": "redispass123",
  "JWT_SECRET": "jwt-secret-key-here"
}
EOF

sops -e env.json > env.enc.json

五、部分加密

# 使用 encrypted_regex 只加密特定字段
sops --encrypt --encrypted-regex '^(password|secret|key|token)$' \
  config.yaml > config.enc.yaml

六、在部署脚本中使用

cat > /opt/deploy.sh <<'EOF'
#!/bin/bash
export SOPS_AGE_KEY_FILE=/root/.sops/age-key.txt

# 解密配置并生成 .env 文件
sops -d /opt/app/secrets.enc.yaml | \
  yq -r 'to_entries | .[] | .key + "=" + (.value | tostring)' > /opt/app/.env

# 重启应用
cd /opt/app && docker compose up -d

# 清理明文文件
rm -f /opt/app/.env
EOF
chmod +x /opt/deploy.sh

七、Git 集成

# .gitignore 中排除明文文件
echo "secrets.yaml" >> .gitignore
echo "*.key" >> .gitignore
echo ".sops/age-key.txt" >> .gitignore

# 提交加密后的文件
git add secrets.enc.yaml .sops.yaml
git commit -m "Add encrypted secrets"

八、多接收者配置

# .sops.yaml 中配置多个接收者
cat > .sops.yaml <<'EOF'
creation_rules:
  - path_regex: secrets/prod/.*
    age: >-
      age1...(ops-team),
      age1...(admin)
  - path_regex: secrets/dev/.*
    age: >-
      age1...(dev-team),
      age1...(ops-team)
EOF

九、密钥轮转

# 更新接收者列表后重新加密
sops updatekeys secrets.enc.yaml

# 使用新密钥轮转所有文件
find . -name "*.enc.yaml" -exec sops updatekeys {} \;

总结

SOPS 完美解决了在 Git 仓库中存储敏感信息的安全问题,配合 Age 加密后端使用简单高效。对于更复杂的密钥管理需求,可以结合 HashiCorp Vault 使用。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,通过 bwh81.net 进入官网购买。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。