能否允许团队使用SOPS加密密钥文件但禁止解密?
我正尝试创建可提交至Git的secrets.json文件,希望团队成员能向该密钥文件添加并加密值,但无法解密其中内容。我们使用Google Cloud管理加密密钥权限,仅授予Cloud KMS CryptoKey Encrypter权限时,运行以下命令会报错:
sops --set '["app2"]["key"] "app2keystringvalue"' secrets.enc.json
错误信息:
Failed to get the data key required to decrypt the SOPS file.
Group 0: FAILED
projects/example-project/locations/global/keyRings/example/cryptoKeys/sops-key: FAILED
- | Error decrypting key: googleapi: Error 403: Permission
| 'cloudkms.cryptoKeyVersions.useToDecrypt' denied on resource
| 'projects/example-project/locations/global/keyRings/example/cryptoKeys/sops-key'
| (or it may not exist)., forbiddenRecovery failed because no master key was able to decrypt the file. In
order for SOPS to recover the file, at least one key has to be successful,
but none were.
授予Cloud KMS CryptoKey Decrypter权限后,操作可正常执行。请问是否有办法实现仅允许成员添加加密内容,而无需授予解密权限?
没办法直接通过修改现有加密的secrets.enc.json实现这个需求——因为SOPS在修改加密文件时,必须先解密文件里存储的数据密钥(这个数据密钥用于加密文件内容,本身由KMS主密钥加密),这一步强制要求cloudkms.cryptoKeyVersions.useToDecrypt权限。
要实现成员仅能添加加密内容但无法解密主文件,可以采用以下两种方案:
- 方案一:提交独立加密片段
让团队成员创建单独的小型加密文件(例如app2-secrets.enc.json),仅包含自己需要新增的密钥对,使用团队的KMS密钥加密(仅需Encrypter权限即可完成)。成员提交该片段文件后,由拥有解密权限的管理员定期将这些片段内容合并到主secrets.enc.json中,重新加密后提交至Git。 - 方案二:基于明文模板生成加密内容
维护一个不含敏感内容的明文模板文件(例如secrets-template.json),成员基于模板添加自己负责的密钥内容后,用SOPS将其加密为独立的加密文件并提交。管理员定期将这些加密文件中的内容合并到主加密文件,全程成员无需接触主文件的解密操作。
内容的提问来源于stack exchange,提问作者Scott Pierce

