SOPS 是一个加密文件编辑器,支持多种文件格式的加密,并与密钥管理服务 (KMS) 兼容。我们在处理秘密管理时的建议一直是要将其与源代码解耦。然而,当面临在完全自动化(符合基础设施即代码) 的精神下)和一些手动步骤(使用像 vaults 这样的工具)之间进行选择以管理、种子和轮换种子机密时,团队常常需要权衡。例如,我们的团队使用 SOPS 来管理引导基础设施的种子凭证。然而,在某些情况下,无法从遗留代码库中移除 Secret。在这些情况下,我们使用 SOPS 来加密文本文件中的 Secret。SOPS 可以与云管理的密钥存储(如 AWS 和 GCP 密钥管理服务 (KMS) 或 Azure Key Vault)集成, 作为加密密钥的来源。它还支持跨平台使用,并支持 PGP 密钥。我们的几个团队在需要管理代码库中的秘密时默认使用 SOPS。
当谈到密钥管理的时候,我们总是建议密钥与代码解耦。然而,团队却时常面临着取舍权衡,一种方式是基于基础设施即代码思想的全自动化,另一种方式是使用一些手动步骤和诸如 vaults 的工具去管理、生成、更新密钥。例如,我们的团队使用 SOPS 工具生成构建基础设施所需要的根密钥。然而在某些情况下,从遗留代码仓库中移除密钥并不现实。对于这类需求,我们发现 Mozilla SOPS 是一个很好的工具,可以用来加密文本文件中的密钥。SOPS 集成了诸如 AWS、KMS、Azure Key Vault 等密钥仓库作为待加密密钥源。它支持跨平台运行,也支持 PGP 密钥。
把密钥当作普通文本放到版本控制(通常是 Github)中是开发者最常犯的错误之一。在某些难以将误提交的密钥内容从遗留代码库移除的情况下,我们认为 Mozilla Sops 工具所提供的加密文本文件中的密钥功能是很有用的。我们在过去也多次提到有类似功能的工具(Blackbox, git-crypt),而 Sops 因几项功能脱颖而出。比如,Sops 集成了 AWS KMS,GCP KMS,以及 Azure Key Vault 等全托管密钥存储服务,可将其作为加密密钥的来源。Sops 也支持跨平台使用,并且支持 PGP key。这使得用户可以在单个文件级别上对密钥进行细粒度的访问控制。同时,Sops 也以纯文本的方式留下了识别密钥,以便通过 git 来定位和比对文本中的原始密钥。我们始终支持能更容易确保开发者安全的事情。但是,也请记住,你并不需要在一开始就把密钥放到源码中。请参阅我们于 2007 年11 月发布的雷达内容 Decoupling secret management from source code。