Git-crypt 工作流程 - 部署到多个服务器或 CircleCI/TravisCI

5
尝试理解基于git-crypt的保密解决方案的完整工作流程。在开发机上,这个工具本身运行得非常好,即使扩展到多个开发人员也似乎效果良好。但是,当部署到云上的多个服务器(其中一些是按需创建的)时,我并不清楚它会如何工作:
1. 在新服务器上无人值守创建GPG密钥的挑战(需要有人创建密码,或者它在源代码控制中,那么这到底有什么用处呢?) 2. GPG创建后,它是如何添加到环中的? 3. 假设我们决定跳过#1,并在服务器之间共享一个密钥,密码短语将如何作为“git-crypt unlock”过程的一部分提供?
我真的尽力搜索了,但并没有找到一个好的端到端工作流程。
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代理程序。如果已加载代理程序,则可以尝试解密检出。
对于开发者的个人计算机,此操作将找到他们的密钥;对于自动创建的计算机,它将找到部署密钥。无论哪种情况,您都可以像项目中的另一个开发者一样管理部署环境中的访问权限。

无论使用什么工具创建这些计算机,都要负责保存和注入密码,通常以私钥文件和环境变量中的口令形式进行,该变量用于将密钥文件加载到代理程序中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接