5

试图了解基于 git-crypt 的保密解决方案的完整工作流程。

该工具本身在开发机器上运行良好,即使扩展到多个开发人员似乎也能正常工作。

但是,我不清楚将其部署到云上的多个服务器时如何工作,其中一些是按需创建的:

  1. 在新服务器上无人值守创建 GPG 密钥的挑战(有人需要创建密码,或者它在源代码控制中,而且,这一切还有什么价值?)

  2. 创建 GPG 后,如何将其添加到环中?

  3. 假设我们决定跳过 #1 并在服务器之间共享一个密钥,那么密码是如何作为“git-crypt unlock”过程的一部分提供的?

我真的尝试过搜索,但找不到一个好的端到端工作流程。

4

1 回答 1

2

像许多 Linux 工具一样,git-crypt它是一个只做一件事并且做得很好的例子。这一理念表明,任何一个实用程序都不会尝试提供一整套工具或生态系统,而只是提供一个可以随心所欲地与其他人链接的功能。在这种情况下git-crypt,不会将自己标榜为部署工具,也不会将任何特定集成到工作流中。它的工作只是允许 git 存储库存储敏感数据,这些数据可用于某些结帐,但不能用于其他结帐。用例可能会有所不同,您如何将其与其他工具链接起来也会有所不同。

根据您问题的措辞,我还要澄清这git-crypt不是“保密解决方案”。事实上,它根本不保守你的秘密,它只是让你在你保留它们的地方随意移动。在这种情况下,它使您能够将机密数据与非机密信息一起保存在存储库中,但这样做的代价是会将机密保存负担交给另一个工具。它用一个秘密交换另一个秘密:您项目的版本控制秘密组件用于 GPG 密钥。您如何管理秘密仍然取决于您,但现在您需要处理的秘密是 GPG 密钥。

掌握秘密仍然取决于您。对于您和其他开发人员来说,这可能意味着在您的主目录中存在一个 GPG 私钥文件,希望在被分配给类似的其他程序之前通过输入代理的密码来保护git-crypt它。

在能够自动将软件部署到服务器的情况下,必须信任某个地方的真实秘密。这通常是像AnsiblePuppet这样的顶级工具,或者可能是像GitlabTravisCircle这样的 CI 环境。通常,除了您的顶级部署工具知道何时在环境中注入秘密以及何时不注入(或者在开发/登台/生产环境的情况下,要注入哪些秘密)之外,您通常不会信任任何东西。

我不熟悉 Circle,但我知道 Travis 在您的项目设置选项卡下有一个环境变量部分,您可以使用该部分将私人信息传递到虚拟机中。有一些关于如何使用它的文档。Gitlab 内置的 CI 系统有类似的东西,可以传递不同的秘密来测试和部署环境等。

我建议您的工作流程最可能的用例是:

  • 创建一个特殊的秘密变量以在您的生产机器上使用,该变量具有仅用于部署的 GPG 密钥的密码。无论您使用什么来创建您的机器,都应该将此密钥的副本放入系统中,并使用此变量来解锁它并将其添加到代理中。
  • 您项目的部署脚本将检查您的 git 项目代码,然后检查 GPG 代理。如果加载了代理,它可以尝试解密结帐。

对于开发人员的个人机器,这将找到他们的密钥,对于自动创建的机器,它将找到部署密钥。无论哪种方式,您都可以像项目中的另一位开发人员一样管理对部署环境中机密的访问。

无论您使用什么工具来创建机器,都将负责保存和注入秘密,可能是以私钥文件和用于将密钥文件加载到代理的环境变量中的密码的形式。

于 2018-07-10T14:51:20.443 回答