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

问题描述 投票:0回答:2

我正在使用 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 加密文件中(对于那些感兴趣的人,我正在使用 this提供者用秘密值做事)。我们的 CI 环境运行 terraform,并且可以访问

age
私钥,以便 Terraform 可以(例如)在数据库资源等上设置密码。我想让开发人员可以添加新的秘密,但无法解密秘密添加后。

security encryption terraform mozilla-sops
2个回答
0
投票

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


0
投票

在现有文件上,您可以简单地运行

sops ./filename.yaml

编辑文件并在保存/退出时更新。我只在

sops 3.7.3
中对此进行了测试,但我认为它适用于所有版本。

© www.soinside.com 2019 - 2024. All rights reserved.