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