与管理 git ansible 结帐中使用的密钥相关的最佳实践是什么?
What are the best practices related to managing keys used in git checkout for ansible?
目前我正在编写一个剧本来部署我的 Django 应用程序。它没有什么特别的革命性或秘诀,所以我决定将其开源。我唯一想保密的当然是我用于部署的 ssh 密钥。
- 有哪些应对策略?
- 我也想用Travis-CI做测试。使用 Travis 测试整个部署时,处理密钥的最佳方式是什么?
非常感谢一些提示。
我最近开始了一种开源的 ansible 基础架构方法,其中包含加密的秘密和 Travis CI 测试 (GitHub link)。
我用过 ansible-vault to encrypt the secrets. For each project Travis creates a key pair and with the help of the travis-client 您可以使用它在 Travis 构建环境中安全地设置保管库密码。
您使用 ansible-vault 方法的案例
在您的特定情况下(您只想部署一个密钥),有两种简单的方法可以使用 ansible-vault
.
加密密钥
第一种方法:加密静态密钥文件
ANSIBLE_VAULT_PASSWORD_FILE=vault_pass ansible-vault encrypt <key_file>
然后通过以下任务将其复制到节点:
- copy:
content={{ lookup('pipe', 'ansible-vault --vault-password-file vault_pass view <key_file>') }}
dest=/<deploy_user>/.ssh/id_rsa
lookup
解决方法是必要的,因为 ansible-vault
是为 encrypt/decrypt .yml
可变文件设计的,并且它不会在推出期间自动解密静态文件或模板。
第二种方法:将密钥放在变量中并加密var文件
另一种方法是将您的私钥添加到 .yml
文件(并像上面一样加密),然后可以通过 ansible 即时解密:
secrets.yml
private_key: |
<copy-key-here>
然后您可以在任务中引用该变量。
最后,两种方法都可以通过以下方式推出:
ANSIBLE_VAULT_PASSWORD_FILE=vault_pass ansible-playbook -i <inventory-file> <playbook-file>
现在您需要与 Travis 分享您的 vault_pass
(或解密 vault_pass
文件的密码)。这在上面的 Travis link 中有很好的记录。在上一节中,我提供了一篇文章,其中还解释了如何做到这一点。
深入挖掘
虽然这可能有点超出您手头问题的范围,但我想分享一些关于这个主题的更多想法。
安全问题
虽然使用 Travis 进行测试非常舒服,但一个主要问题是您仍在将您的秘密交给 Travis 环境(很明显,如果 Travis 受到威胁,您的秘密就会消失)——所以我建议也许可以在您的 Travis 推出测试中 deploy/rollout 伪造数据更安全。我上面提供的项目仍处于早期阶段,(目前)还不包含任何真正的生产秘密,但我将以一种可以轻松地在我的 Travis 部署中部署假数据的方式来设计我的配置。另外,请确保您不要在 Travis 中记录太多(因为对于开源存储库,travis 构建日志也是开源的)。您可以避免在剧本中使用 no_log: yes
变量进行记录。
HashiCorp 保险库
另一个非常有趣的处理机密的项目来自 HashiCorp:Vault(不要误认为 ansible-vault
!)我还没有时间仔细研究它,但它看起来很有前途,对于更大的设置来说似乎是个好主意。
外部文章
这里有一个 more detailed article 关于使用 ansible-vault
和 Travis CI(也适用于您希望加密敏感模板或其他静态文件的情况,这需要一些小的解决方法,因为ansible-vault
仅用于加密 .yml
包含变量的文件)。它还简要讨论了与外部服务共享秘密的问题。 (秘密管理是一个很有趣的话题,我还在调整我的方法,所以这篇文章还在制作中,但大部分想法已经在那里提供)
目前我正在编写一个剧本来部署我的 Django 应用程序。它没有什么特别的革命性或秘诀,所以我决定将其开源。我唯一想保密的当然是我用于部署的 ssh 密钥。
- 有哪些应对策略?
- 我也想用Travis-CI做测试。使用 Travis 测试整个部署时,处理密钥的最佳方式是什么?
非常感谢一些提示。
我最近开始了一种开源的 ansible 基础架构方法,其中包含加密的秘密和 Travis CI 测试 (GitHub link)。
我用过 ansible-vault to encrypt the secrets. For each project Travis creates a key pair and with the help of the travis-client 您可以使用它在 Travis 构建环境中安全地设置保管库密码。
您使用 ansible-vault 方法的案例
在您的特定情况下(您只想部署一个密钥),有两种简单的方法可以使用 ansible-vault
.
第一种方法:加密静态密钥文件
ANSIBLE_VAULT_PASSWORD_FILE=vault_pass ansible-vault encrypt <key_file>
然后通过以下任务将其复制到节点:
- copy:
content={{ lookup('pipe', 'ansible-vault --vault-password-file vault_pass view <key_file>') }}
dest=/<deploy_user>/.ssh/id_rsa
lookup
解决方法是必要的,因为 ansible-vault
是为 encrypt/decrypt .yml
可变文件设计的,并且它不会在推出期间自动解密静态文件或模板。
第二种方法:将密钥放在变量中并加密var文件
另一种方法是将您的私钥添加到 .yml
文件(并像上面一样加密),然后可以通过 ansible 即时解密:
secrets.yml
private_key: |
<copy-key-here>
然后您可以在任务中引用该变量。
最后,两种方法都可以通过以下方式推出:
ANSIBLE_VAULT_PASSWORD_FILE=vault_pass ansible-playbook -i <inventory-file> <playbook-file>
现在您需要与 Travis 分享您的 vault_pass
(或解密 vault_pass
文件的密码)。这在上面的 Travis link 中有很好的记录。在上一节中,我提供了一篇文章,其中还解释了如何做到这一点。
深入挖掘
虽然这可能有点超出您手头问题的范围,但我想分享一些关于这个主题的更多想法。
安全问题
虽然使用 Travis 进行测试非常舒服,但一个主要问题是您仍在将您的秘密交给 Travis 环境(很明显,如果 Travis 受到威胁,您的秘密就会消失)——所以我建议也许可以在您的 Travis 推出测试中 deploy/rollout 伪造数据更安全。我上面提供的项目仍处于早期阶段,(目前)还不包含任何真正的生产秘密,但我将以一种可以轻松地在我的 Travis 部署中部署假数据的方式来设计我的配置。另外,请确保您不要在 Travis 中记录太多(因为对于开源存储库,travis 构建日志也是开源的)。您可以避免在剧本中使用 no_log: yes
变量进行记录。
HashiCorp 保险库
另一个非常有趣的处理机密的项目来自 HashiCorp:Vault(不要误认为 ansible-vault
!)我还没有时间仔细研究它,但它看起来很有前途,对于更大的设置来说似乎是个好主意。
外部文章
这里有一个 more detailed article 关于使用 ansible-vault
和 Travis CI(也适用于您希望加密敏感模板或其他静态文件的情况,这需要一些小的解决方法,因为ansible-vault
仅用于加密 .yml
包含变量的文件)。它还简要讨论了与外部服务共享秘密的问题。 (秘密管理是一个很有趣的话题,我还在调整我的方法,所以这篇文章还在制作中,但大部分想法已经在那里提供)