现在有很多很棒的开源工具可以用来在 Git 中存储密钥。很难确定哪一个适合你和你的组织——这取决于你的用例和要求。为了帮助你比较和选择,我们将介绍四种最流行的密钥管理开源工具,看看它们是如何相互竞争的。
我们不会评测像 HashiCorp Vault 这样的大型解决方案。一个生产就绪的 Vault 可能是一个相当大的障碍,特别是如果你的组织刚刚开始进行密钥管理。上面的工具易于使用且可以快速设置。
加密类型
这些密钥管理工具使用 GNU Privacy Guard (GPG)、对称密钥加密和/或云密钥服务。
- 基于 GPG 的工具要求用户创建 GPG 密钥对。公钥用于加密并与其他用户共享,而私钥用于解密且只有一位用户知道。
- 对称密钥工具是基于密码的,并在给出正确密码时工作。
- 云密钥服务——Amazon Key Management Service (KMS)、Google Cloud KMS 和基于 Azure Key Vault 的工具——允许与云提供商的服务集成。
这些密钥管理工具使用的加密类型是
GPG | 对称密钥 | Amazon KMS | Google KMS | Azure Key Vault | |
---|---|---|---|---|---|
Git-crypt | X | X | |||
BlackBox | X | ||||
SOPS | X | X | X | X | |
Transcrypt | X |
正如你所看到的,Git-crypt 和 SOPS 使用多种加密基础。这意味着 Git-crypt 可以通过使用 GPG *或* 对称密钥来实现加密,而 SOPS 可以使用 GPG *或* 其中一种云服务。
目标
这些工具有相似的目标
对 Git 的透明性 | 全文件加密 | 部分文件加密 | |
---|---|---|---|
Git-crypt | X | X | |
BlackBox | X | X | |
SOPS | X | X | |
Transcrypt | X | X |
除了 SOPS 之外,所有工具都对 Git 具有透明性,这意味着它们具有内置机制,可确保源代码控制中的文件经过加密,而无需用户付出太多努力。 它们有助于防止 git push 意外地将明文密钥推送到 Git。
此时,你可能想知道,“如果 SOPS 不以透明方式使用 Git 加密,那么它为什么会出现在这里? 这不是一篇关于 Git 加密工具的文章吗?”原因是它处理基于键值的文件的方式,例如 YAML 和 JSON。 在加密这些类型的文件时,SOPS 将保持密钥未加密,但将加密值。 通常在配置管理中,经常需要加密 Git 中的这些类型的文件,但查看它们包含的信息类型也很方便。 虽然 SOPS 不提供原生 Git 透明性,但可以使用 git-secrets 等工具与 SOPS 一起使用,以帮助确保明文密钥不会推送到 Git。
最后,所有这些工具都支持全文件加密,其中密钥文件被完全加密。
工作流程和差异
这些工具都不难使用,但它们都有需要考虑的怪癖和操作上的挑战。
GPG
基于 GPG 的工具的基本工作流程是
- 使用加密工具初始化存储库
- 为允许管理密钥文件的用户创建 GPG 密钥
- 将相应的公钥添加到该工具
- 指定应视为“密钥”的文件
- 使用该工具加密文件
- 为每个获得授权的新用户重复步骤 2、3 和 5
- 要撤销用户,请删除该用户并重复步骤 5
理论上,这个工作流程很简单。一个操作问题是 GPG 密钥维护。你的团队需要备份其 GPG 密钥,以防止 GPG 密钥被意外删除导致锁定。如果你将该工具用于自动化,你还需要考虑谁将负责为该服务创建和维护密钥。此外,如果你需要添加、删除或轮换密钥,则需要重新加密每个文件才能使更改生效。
基于 GPG 的工具的优点和缺点包括
- Git-crypt 无法以原生方式删除 GPG 用户,这意味着上面的步骤 7 不容易做到。 有可用的解决方法,但这不是内置功能。
- Git-crypt 将透明地在 git push 上执行上面的步骤 5——即使添加了新用户。
- BlackBox 提供了一个 blackbox_update_all_files 命令,可以通过一个命令重新加密所有密钥文件来执行步骤 5。 这在密钥轮换和添加/删除 GPG 密钥时派上用场,在这种情况下,所有文件都需要重新加密。
- SOPS 使密钥轮换和添加/删除 GPG 密钥变得最困难,因为它需要手动重新加密每个文件。
- BlackBox 有一个 blackbox_list_admins 命令,该命令返回与注册用户的 GPG 密钥对应的电子邮件地址。 这使得更容易辨别谁有权访问密钥,而不是试图映射纯 GPG 指纹。
云密钥服务
这是一个使用带有 Amazon KMS 的 SOPS 的示例工作流程
- 创建身份和访问管理 (IAM) 实体
- 创建 KMS 主密钥
- 授予 IAM 实体对主密钥的访问权限
- 使用 SOPS 将主密钥添加到每个密钥文件并加密该文件(添加密钥和加密通常是 SOPS 的一个步骤过程)
- 在添加或删除主密钥时重新加密
在这四种工具中,SOPS 是唯一允许用户配置使用基于云的密钥服务进行加密的工具。 云密钥服务减轻了基于 GPG 的解决方案带来的许多操作负担。 以 Amazon KMS 为例:主密钥被添加到 SOPS,并且对密钥文件的访问通过 IAM 策略来控制。 添加和删除用户就像使用 IAM 授予或撤销权限一样简单,这意味着在更改权限时无需重新加密密钥文件,因为从 SOPS 的角度来看没有任何变化。 然而,此解决方案确实有其自身的一系列操作挑战。 团队的每个成员都必须拥有 AWS 帐户才能访问密钥文件。 此外,管理员必须配置和维护 IAM 策略和 KMS 主密钥。
对称密钥加密
基于对称密钥的工具的工作流程可能最简单
- 使用加密工具初始化存储库
- 指定应视为“密钥”的文件
- git push 以透明地加密文件
- 与其他需要访问权限的用户共享对称密钥
- 每次撤销用户访问权限时都轮换密钥
Git-crypt 和 Transcrypt 都提供了一个复杂的密码作为对称密钥。 操作上的挑战是找到一种安全的方式来共享对称密钥,并确保每次删除用户时都轮换密钥。
以下是 Git-crypt 和 Transcrypt(我们的对称密钥兼容工具)之间的一些差异
- Git-crypt 兼容 GPG 和对称密钥加密
- Git-crypt 不支持对称密钥轮换,因此如果你将它与对称密钥一起使用,则无法完成步骤 5
- Transcrypt 提供了一个方便的 --rekey 命令来进行密钥轮换
其他功能
该工具的其他功能和特点包括
就地编辑器 | 审计 | 存储库级别权限 | 文件级别权限 | |
---|---|---|---|---|
Git-crypt | X | |||
BlackBox | X | X | ||
SOPS | X | X | X | |
Transcrypt | X |
BlackBox 和 SOPS 都具有“就地编辑器”工具,该工具解密文件并打开由 $EDITOR 环境变量指定的文本编辑器。 这使用户能够对文件进行就地编辑,然后再保存和重新加密,因此用户无需先“就地解密”即可修改密钥文件。
SOPS 是唯一提供审计功能的工具。 此功能通过将事件转发到数据库来跟踪和监视 SOPS 的使用情况。 它需要一定的设置量,因此请查看 SOPS 的 README 了解更多信息。
Git-crypt、BlackBox 和 Transcrypt 在存储库级别处理访问权限,这意味着如果你可以查看一个解密的文件,则可以查看所有解密的文件。 根据你的用例,这要么是一个功能,要么是一个误用。 SOPS 在文件级别处理权限,这意味着仅仅因为用户可以查看一个文件,他们不一定可以查看存储库中的其他文件。
更多信息
希望对四种开源密钥管理工具的这种高级概述可以帮助你对适合你的工具做出明智的决定。 有关该工具的更多信息,请查看它们的 GitHub 页面(链接位于本文顶部)。
评论已关闭。