是否可以在不先解密的情况下更新 SOPS 加密的文件?

Tyl*_*ler 6 security encryption terraform mozilla-sops

我正在使用 Mozilla SOPS 来加密机密,其结果将提交到项目其他成员共享的 git 存储库中。当在个人项目中使用 SOPS 时,我用来age加密/解密我的 SOPS 文件的内容;如果我有一个名为的文件my-secrets.sops.yaml并且我想向其中添加一个新的键/值对,我的正常工作流程是:

  1. 运行sops -d -i my-secrets.sops.yaml以就地解密文件,以便值是纯文本。
  2. 添加new_secret: "ThisIsASecret"到文件中。
  3. 运行sops -e -i my-secrets.sops.yaml以就地加密文件。
  4. 将更改提交到 git。

这适用于我的个人项目,因为我age自己生成密钥和公钥,因此我可以访问两者。我知道age加密时只需要公钥,但解密时需要私钥。

现在我的问题是:如果我想在已包含加密值的现有 SOPS 文件中添加键/值对(或更新现有值),我是否需要首先解密该文件?我知道我可以创建一个全新的文件并对其进行加密,但这看起来很混乱,尤其是在协作环境中。

简而言之:是否可以向仅使用可用公钥(即无需解密)使用 SOPS 加密的 YAML 文件添加新值?


对于上下文,我的用例的一些背景信息:该项目使用 Terraform 来管理基础设施,并且秘密保存在位于 terraform 项目目录中的 SOPS 加密文件中(对于那些感兴趣的人,我正在使用此提供程序来用秘密值做事)。我们的 CI 环境运行 terraform,并且可以访问age私钥,以便 Terraform 可以(例如)在数据库资源上设置密码等。我想让开发人员可以添加新的秘密,但一旦他们有了秘密就无法解密已添加。

Dav*_*ton 1

您可以使用 sops --set '["foo"]["bar"] "test"' ./test.enc.yaml 仅设置或更新 foo.bar 值,而不解密或更改其他条目。这意味着通过 PGP,您可以使用公钥来设置新值,而无需访问私有值