Use Sops to manager your accounts

Posted on Fri 21 March 2025 in Journal • 1 min read

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 国际许可协议进行许可。