Security Git crypt工作流-部署到多台服务器或circleci/travisci

Security Git crypt工作流-部署到多台服务器或circleci/travisci,security,deployment,continuous-deployment,gnupg,git-crypt,Security,Deployment,Continuous Deployment,Gnupg,Git Crypt,试图了解基于git crypt的保密解决方案的完整工作流程 当在开发人员机器上时,该工具本身工作得非常好,甚至可以扩展到多个开发人员 但是,我不清楚当部署到云上的多个服务器时,这将如何工作,有些服务器是按需创建的: 在新服务器上无人值守地创建GPG密钥的挑战(有人需要创建密码短语,或者是在源代码管理中,那么,这一切还有什么价值?) 创建GPG后,如何将其添加到环中 假设我们决定跳过#1,只在服务器之间共享密钥,那么作为“git crypt unlock”过程的一部分,如何提供密码短语 我真的尝试

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

当在开发人员机器上时,该工具本身工作得非常好,甚至可以扩展到多个开发人员

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

  • 在新服务器上无人值守地创建GPG密钥的挑战(有人需要创建密码短语,或者是在源代码管理中,那么,这一切还有什么价值?)

  • 创建GPG后,如何将其添加到环中

  • 假设我们决定跳过#1,只在服务器之间共享密钥,那么作为“git crypt unlock”过程的一部分,如何提供密码短语

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

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

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

    掌握秘密仍然取决于你。对于您和其他开发人员来说,这可能意味着在您的主目录中有一个GPG私钥文件,希望在分发到调用它的其他程序(如
    git crypt
    )之前,由输入代理的密码短语进行保护

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

    我不熟悉Circle,但我知道Travis在您的项目设置选项卡下有一个环境变量部分,您可以使用该部分将私人信息传递到虚拟机。如何使用这个有很多问题。Gitlab的内置CI系统具有,并且可以将不同的秘密传递给测试和部署环境等

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

    • 创建一个特殊的秘密变量,以便在生产计算机上使用,该变量具有仅用于部署的GPG密钥的密码短语。无论您使用什么方法创建计算机,都应该将此密钥的副本放入系统中,并使用此变量将其解锁并添加到代理
    • 项目的部署脚本将签出git项目代码,然后检查GPG代理。如果加载了代理,它可以尝试解密签出
    对于开发人员的个人计算机,它将找到他们的密钥;对于自动创建的计算机,它将找到部署密钥。无论哪种方式,您都可以像项目中的另一个开发人员一样管理对部署环境中的机密的访问

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