Use Sops to manager your accounts

Posted on Fri 21 March 2025 in Journal

Abstract Use Sops to manager your accounts
Authors Walter Fan
 Category    learning note  
Status v1.0
Updated 2025-03-21
License CC-BY-NC-ND 4.0

管理众多的贴号和密码是件麻烦的事, 随着年龄的增长, 记忆力逐渐减退, 我再也记不住那么多密码了, 老是存在 chrome 浏览器里也不是事儿. 我用过 1password, ansible vault 和自己写的一个小程序来管理密码, 但都存在一些问题, 前者挺贵, 后面两个有点麻烦, 都放弃了. 最近发现了 SOPS, 相对简单易用, 使用 SOPS 来安全地管理包含用户名、密码和 API Key 的账户信息很方便。以下是详细的操作步骤:


1. 安装 SOPS

根据你的操作系统安装 SOPS:
- macOSbrew install sops
- Linux:使用适合你的包管理器,或者从 SOPS 发布页面 下载
- Windows:可以使用 scoop install sops,或者手动下载


2. 配置加密后端

SOPS 需要使用加密后端来对文件进行加密,支持以下几种方式:
- AWS KMS(适用于 AWS 用户)
- GCP KMS(适用于 GCP 用户)
- Azure Key Vault(适用于 Azure 用户)
- PGP(GnuPG)(适用于 PGP 密钥管理)
- Age 加密(推荐,简单易用)

使用 Age 作为加密后端(推荐)

先安装 age:

  • macOS: brew install age
  • linux: apt install age
  • windows: choco install age.portable

  • 生成 Age 密钥:
    sh age-keygen -o ~/.config/sops/age/keys.txt

  • 获取公钥(用于加密):
    sh cat ~/.config/sops/age/keys.txt | grep public | cut -d' ' -f4 复制这个公钥,后续加密时需要用到。

3. 创建账户信息文件

使用 YAML 或 JSON 格式存储你的账号信息,例如创建 secrets.yaml 文件:

accounts:
  service1:
    username: myuser
    password: mypassword
    api_key: myapikey123
  service2:
    username: anotheruser
    password: anotherpassword
    api_key: anotherapikey456

4. 使用 SOPS 加密文件

运行以下命令对 secrets.yaml 进行加密:

sops --encrypt --age <你的-age-公钥> -i secrets.yaml

这会用你的 Age 公钥加密 secrets.yaml 文件,并直接替换原文件。

示例加密后的 secrets.yaml 文件(加密部分示例):

accounts:
    service1:
        username: ENC[AES256_GCM,data:XXXXX,iv:XXXXX,...]
        password: ENC[AES256_GCM,data:XXXXX,iv:XXXXX,...]
        api_key: ENC[AES256_GCM,data:XXXXX,iv:XXXXX,...]

你可以安全地将加密后的 secrets.yaml 放入 Git 进行版本管理。


5. 解密和编辑

解密文件

当你需要查看账号信息时,可以运行:

export SOPS_AGE_KEY_FILE=~/.config/sops/age/keys.txt
sops --decrypt secrets.yaml

安全地编辑文件

如果你想修改加密文件,不需要手动解密,直接运行:

sops secrets.yaml

SOPS 会自动解密,编辑完成后再次加密保存。


6. 在代码或脚本中使用加密信息

你可以在脚本中动态解密并使用账号信息,例如提取某个服务的 API Key:

export MY_API_KEY=$(sops -d --extract 'accounts.service1.api_key' secrets.yaml)

这样可以在脚本或应用程序中安全使用 API Key,而不会直接暴露明文。


7. 安全存储密钥

  • 加密后的 secrets.yaml 可以安全地存入 Git 进行版本管理
  • Age 私钥(或 KMS/PGP 密钥)必须妥善保管,可以存放在:
  • 物理安全的设备(如硬件钱包)
  • 安全的密码管理工具(如 Bitwarden、1Password)
  • 服务器环境变量或 Kubernetes Secret 中

总结

使用 SOPS,你可以: * 轻松加密账号信息,确保数据安全
版本管理加密文件,不泄露敏感信息
通过安全的解密方式在代码中动态获取账号信息

SOPS 是一个强大的工具,可以帮助你更好地管理和保护敏感数据。


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。