我正在使用 Mozilla SOPS 来加密机密,其结果将提交到项目其他成员共享的 git 存储库中。当在个人项目中使用 SOPS 时,我使用
age
来加密/解密我的 SOPS 文件的内容;如果我有一个名为 my-secrets.sops.yaml
的文件并且我想向其中添加一个新的键/值对,我的正常工作流程是:
sops -d -i my-secrets.sops.yaml
就地解密文件,以便值是纯文本。new_secret: "ThisIsASecret"
添加到文件中。sops -e -i my-secrets.sops.yaml
就地加密文件。这适用于我的个人项目,因为我自己生成
age
秘密和公钥,因此我可以访问两者。我知道加密时只需要 age
公钥,但解密时需要私钥。
现在我的问题是:如果我想在已包含加密值的现有 SOPS 文件中添加键/值对(或更新现有值),我是否需要首先解密该文件?我知道我可以创建一个全新的文件并对其进行加密,但这看起来很混乱,尤其是在协作环境中。
简而言之:是否可以向仅使用可用公钥(即不解密)使用 SOPS 加密的 YAML 文件添加新值?
对于上下文,我的用例的一些背景信息:该项目使用 Terraform 来管理基础设施,并且秘密保存在位于 terraform 项目目录中的 SOPS 加密文件中(对于那些感兴趣的人,我正在使用 this提供者用秘密值做事)。我们的 CI 环境运行 terraform,并且可以访问
age
私钥,以便 Terraform 可以(例如)在数据库资源等上设置密码。我想让开发人员可以添加新的秘密,但无法解密秘密添加后。
您可以使用 sops --set '["foo"]["bar"] "test"' ./test.enc.yaml 仅设置或更新 foo.bar 值,而不解密或更改其他条目。 这意味着通过 PGP,您可以使用公钥来设置新值,而无需访问私有值
在现有文件上,您可以简单地运行
sops ./filename.yaml
编辑文件并在保存/退出时更新。我只在
sops 3.7.3
中对此进行了测试,但我认为它适用于所有版本。