git-crypt工作流程-部署到多个服务器或circleci / travisci

时间:2018-07-04 07:25:41

标签: security deployment continuous-deployment gnupg git-crypt

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

该工具本身在开发机上运行时效果很好,甚至可以扩展到多个开发人员。

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

  1. 在新服务器上无人值守创建GPG密钥的挑战(有人需要创建密码,或者是在源代码管理中,比这还值多少钱?)

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

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

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

1 个答案:

答案 0 :(得分:1)

与许多Linux工具一样,git-crypt是仅做一件事并且做得很好的一个示例。 This philosophy指出,任何一个实用程序都不会尝试提供整套工具或生态系统,而只是一个可以与您喜欢的其他函数链接的函数。在这种情况下,git-crypt不会将自己当作部署工具,也不会将其集成到工作流程中。它的工作只是允许git存储库存储敏感数据,这些数据可以在某些签出中使用,而不能在其他签出中使用。用例可能会有所不同,您如何将其与其他工具链接在一起。

根据您所提问题的措辞,我还要澄清一下,git-crypt不是“保密方案”。实际上,它根本不保留您的秘密,而只是允许您在保留秘密的地方进行改组。在这种情况下,它使您可以将保密数据与非保密信息一起保留在存储库中,但是这样做的代价是将保密的负担加到了另一个工具上。它将一个秘密换成另一个秘密:将项目的版本控制秘密组件换成GPG密钥。如何管理机密仍然取决于您,但是现在您需要处理的机密是GPG密钥。

持有的秘密仍然由您决定。对于您和其他开发人员而言,这可能意味着您的主目录中会出现GPG私钥文件,希望该密码受到输入到代理中的密码的保护,然后分配给其他程序,例如git-crypt它。

如果能够将软件自动部署到服务器,则必须使用真实机密信任某个地方。这通常是顶级工具,例如AnsiblePuppet,或者可能是CI环境,例如GitlabTravisCircle。通常,除了顶级部署工具以外,您什么都不信任,只要知道何时在环境中注入秘密,什么时候不注入(或者在开发/登台/生产环境中,注入哪些秘密)即可。 )。

我对Circle并不熟悉,但是我知道Travis在您的项目设置标签下有一个环境变量部分,您可以使用该部分将私人信息传递到虚拟机。有some documentation用于说明如何使用它。 Gitlab的内置CI系统具有something similar,并且可以传递不同的秘密来测试与部署环境等。

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

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

对于开发人员的个人计算机,它将找到他们的密钥,对于自动创建的计算机,它将找到部署密钥。无论哪种方式,您都可以像在项目上再聘请一名开发人员一样来管理对部署环境中机密的访问。

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

>