Git-crypt 工作流程 - 部署到多个服务器或 circleci/travisci
Git-crypt workflow - deployment to multiple servers or circleci/travisci
试图了解基于 git-crypt 的保密解决方案的完整工作流程。
该工具本身在开发机器上工作得很好,即使扩展到多个开发人员似乎也能正常工作。
但是,我不清楚部署到云上的多个服务器时如何工作,有些是按需创建的:
在新服务器上无人值守创建 GPG 密钥的挑战(有人需要创建密码,或者它在源代码管理中,而且,这一切还有什么价值?)
创建GPG后,如何将其添加到环中?
假设我们决定跳过 #1 并只在服务器之间共享一个密钥,密码短语如何作为 "git-crypt unlock" 过程的一部分提供?
我确实尝试过搜索,但找不到好的端到端工作流程。
像许多 Linux 工具一样,git-crypt
is an example of doing only one thing and doing it well. This philosophy 规定任何一个实用程序都不会尝试提供一整套工具或生态系统,而只是提供一个可以与其他功能链接的功能,但是您像。在这种情况下,git-crypt
不会将自己标榜为部署工具,也不会与工作流进行任何特定的集成。它的工作只是允许 git 存储库存储敏感数据,这些数据可以在某些结帐中使用,但不能在其他结帐中使用。用例可能会有所不同,您如何将其与其他工具链接起来也会有所不同。
根据您问题的措辞,我还要澄清 git-crypt
不是 "secret keeping solution"。事实上,它根本不会保守你的秘密,它只是让你在你保守秘密的地方四处走动。在这种情况下,它使您能够将机密数据与非机密信息一起保存在存储库中,但这样做的代价是将保密负担放在另一个工具上。它用一个秘密交换另一个秘密:您的项目的版本控制秘密组件用于 GPG 密钥。如何管理秘密仍然取决于您,但现在您需要处理的秘密是 GPG 密钥。
持有 秘密仍然取决于你。对于您和其他开发人员来说,这可能意味着在您的主目录中有一个 GPG 私钥文件,希望在分配给其他程序(例如 git-crypt
它。
在能够自动将软件部署到服务器的情况下,某处的某些东西必须被真正的秘密所信任。这通常是像 Ansible or Puppet, or perhaps a CI environment like Gitlab, Travis, or Circle 这样的顶级工具。通常你不会相信任何东西,除了你的顶级部署工具,它知道什么时候在环境中注入秘密,什么时候不(或者在开发/暂存/生产环境的情况下,which注入的秘密)。
我不熟悉 Circle,但我知道你的项目 Settings 选项卡下的 Travis 有一个 Environment Variables 部分,你可以用来将私人信息传递到虚拟机中。有 some documentation for how to use this. Gitlab's build in CI system has something similar,可以传递不同的秘密来测试与部署环境等
我建议您的工作流程最可能的用例是:
- 创建一个特殊的秘密变量以在您的生产机器上使用,该变量具有仅用于部署的 GPG 密钥的密码。无论您使用什么来创建您的机器,都应该将此密钥的副本放入系统中,并使用此变量解锁它并将其添加到代理中。
- 您项目的部署脚本将检查您的 git 项目代码,然后检查 GPG 代理。如果加载代理,它可以尝试解密结帐。
如果是开发人员的个人机器,这将找到他们的密钥,如果是自动创建的机器,它将找到部署密钥。无论哪种方式,您都可以管理对部署环境中的秘密的访问,就像项目中的另一个开发人员一样。
无论你用来创建机器的什么工具都会负责保存和注入秘密,可能以私钥文件和环境变量中的密码短语的形式,用于将密钥文件加载到代理中。
试图了解基于 git-crypt 的保密解决方案的完整工作流程。
该工具本身在开发机器上工作得很好,即使扩展到多个开发人员似乎也能正常工作。
但是,我不清楚部署到云上的多个服务器时如何工作,有些是按需创建的:
在新服务器上无人值守创建 GPG 密钥的挑战(有人需要创建密码,或者它在源代码管理中,而且,这一切还有什么价值?)
创建GPG后,如何将其添加到环中?
假设我们决定跳过 #1 并只在服务器之间共享一个密钥,密码短语如何作为 "git-crypt unlock" 过程的一部分提供?
我确实尝试过搜索,但找不到好的端到端工作流程。
像许多 Linux 工具一样,git-crypt
is an example of doing only one thing and doing it well. This philosophy 规定任何一个实用程序都不会尝试提供一整套工具或生态系统,而只是提供一个可以与其他功能链接的功能,但是您像。在这种情况下,git-crypt
不会将自己标榜为部署工具,也不会与工作流进行任何特定的集成。它的工作只是允许 git 存储库存储敏感数据,这些数据可以在某些结帐中使用,但不能在其他结帐中使用。用例可能会有所不同,您如何将其与其他工具链接起来也会有所不同。
根据您问题的措辞,我还要澄清 git-crypt
不是 "secret keeping solution"。事实上,它根本不会保守你的秘密,它只是让你在你保守秘密的地方四处走动。在这种情况下,它使您能够将机密数据与非机密信息一起保存在存储库中,但这样做的代价是将保密负担放在另一个工具上。它用一个秘密交换另一个秘密:您的项目的版本控制秘密组件用于 GPG 密钥。如何管理秘密仍然取决于您,但现在您需要处理的秘密是 GPG 密钥。
持有 秘密仍然取决于你。对于您和其他开发人员来说,这可能意味着在您的主目录中有一个 GPG 私钥文件,希望在分配给其他程序(例如 git-crypt
它。
在能够自动将软件部署到服务器的情况下,某处的某些东西必须被真正的秘密所信任。这通常是像 Ansible or Puppet, or perhaps a CI environment like Gitlab, Travis, or Circle 这样的顶级工具。通常你不会相信任何东西,除了你的顶级部署工具,它知道什么时候在环境中注入秘密,什么时候不(或者在开发/暂存/生产环境的情况下,which注入的秘密)。
我不熟悉 Circle,但我知道你的项目 Settings 选项卡下的 Travis 有一个 Environment Variables 部分,你可以用来将私人信息传递到虚拟机中。有 some documentation for how to use this. Gitlab's build in CI system has something similar,可以传递不同的秘密来测试与部署环境等
我建议您的工作流程最可能的用例是:
- 创建一个特殊的秘密变量以在您的生产机器上使用,该变量具有仅用于部署的 GPG 密钥的密码。无论您使用什么来创建您的机器,都应该将此密钥的副本放入系统中,并使用此变量解锁它并将其添加到代理中。
- 您项目的部署脚本将检查您的 git 项目代码,然后检查 GPG 代理。如果加载代理,它可以尝试解密结帐。
如果是开发人员的个人机器,这将找到他们的密钥,如果是自动创建的机器,它将找到部署密钥。无论哪种方式,您都可以管理对部署环境中的秘密的访问,就像项目中的另一个开发人员一样。
无论你用来创建机器的什么工具都会负责保存和注入秘密,可能以私钥文件和环境变量中的密码短语的形式,用于将密钥文件加载到代理中。