购买Express VPN
享受全球加速服务

如何使用可变变量和保险库

ExpressVPN如何利用可复用
  • 我们如何在ExpressVPN中使用Ansible
  • 可靠的文件
  • 您可以使用可安全保管库文件?
  • 最佳做法:如何安全使用可安全保管库文件

我们如何在ExpressVPN上广泛使用Ansible

我们的开发团队独立工作,也就是说,团队拥有自己的产品完整的生命周期。这个设置意味着我们的可理解来自公司许多不同团队的知识集合,而不是管理可复制的集中式组。

分散的劳动力给我们的团队提供了大量的灵活性和流动性,但也给个人带来了很多关于许多工具的压力。

为了更容易地正确分享知识和使用工具,我们决定标准化我们如何使用Ansible进行配置管理和服务器操作。

本博客涵盖了我们所学到的经验教训,对我们的工作方式的反思,以及我们如何在这种情况下管理可编程逻辑。

可靠的文件

让我们来吧!Ansible的文档留下了一些需要的东西,特别是当涉及到端到端的文档(比如,你如何从A点到Z点)?

我们经常遇到的一些问题是:“可变优先级如何工作?”和“可安全保险柜如何适应”?

这两个问题都非常独立地记录(这里和这里),“可变变量”页面有一个关于优先级的非常好的部分,但两者的交集只是一个简单的提及。问题是,有关变量和保管库的文档之间没有链接,给人的印象是使用者的责任是弄清楚两者是如何相互交叉的。

所以,今天我们将尝试覆盖变量和保险库之间的交集和最佳实践。

您可以使用可安全保管库文件

总而言之:Vault文档规定您可以您的“可复制”文件夹中的任何内容实质上加密到一个保管库文件中,而且只要播放包含这些文件,“安全”就会“巧妙地”解密它。呵呵。凉!

关于变量的文档根本没有提及Vault文件,这是因为Vault是为变量文件而设计的。那么他们怎么合在一起呢?重要的是要注意,Vault文件本身对于变量处理或优先级没有特别的意义,所以有很大的灵活性。但是,潜在的这不会给你足够的信息如何正确使用它。

如何使用可复制
你这样做是错的。

以这个简单的Ansible文件夹为例:


├──group_vars
│├──所有
│├──生产
│└──分期
├──ansible.cfg
├──库存
└──playbook.yml

乍一看,这个设置看起来不错;?如果您要阅读文档,这将是一个比较常见的结构。观察者可能假设group_vars中的分段和生产文件是Vault,但这不一定是真的,这本身就是一个问题。

现在,文件“all”不能是Vault文件,因为您(希望)可以使用不同的密码对登台和生产的Vault文件进行加密。但这也意味着您的环境的group_vars文件需要包含一些秘密和非秘密的组合,因为每个环境限制一个文件。

因为这样 - 如果您在“可读取”文档中阅读了Vault中的介绍后再推出了一些内容,那么您最初可以通过复制“all”的内容然后修改它们来创建生产/分段保管库。

这意味着您的“全部”文件可能如下所示:

数据库:
username:default_user
password:false

super_important_var_that_should_be_one:1

您的生产保险库文件可能如下所示:

数据库:
用户名:produser
密码:supersecretpasswordnoonecansee

super_important_var_that_should_be_one:1

(别担心,这不是我们的实际生产密码!我们仔细检查。)

上述是可能不明显的原因是危险的。例如,您可能会错过更改生产的默认值,和/或您的“全部”文件甚至可能被命名为错误,并且不包括在内!(这是我们上周发生中断的根本原因)

最佳做法:如何安全使用可安全保管库文件

如最佳做法页面所述,将文件放入保管库文件会掩盖文件的内容,因此它们具有很大的缺点:您无法在不显式解密的情况下搜索Vault文件中的变量。这个系统意味着任何正在查看您的可配置配置的人都不知道这些文件是什么内容,而不知道保险柜密码(对于代码评估可怕)!因此,我们建议将尽可能少的变量放在Vault文件中。(换句话说,只能把秘密放在Vault文件中!)

所以,让我们来看看一个结构,这样可以更容易地不要自己射击:


├──group_vars
│├──所有
││└──vars.yml
│├──生产
││├──vars.yml
││└──vault.yml
│└──分期
│└──vault.yml
├──ansible.cfg
├──库存
└──playbook.yml

最佳实践文档还建议使用“间接层”,这意味着您应该将Vault文件中的所有变量模板化为您的剧本中引用的变量。它还建议您使用“vault_”将保险库变量前缀,这意味着您的所有/ vars.yml可能如下所示:

database:
username:default_user
password:“{{vault_database_password}}”

super_important_var_that_should_be_one:1

你的生产/ vars.yml看起来像这样:

数据库:
用户名:produser

而你的production / vault.yml文件只能包含以下内容:

vault_database_password:supersecretpasswordnoonecansee

这个修订的结构有两个好处。首先,如果您正在进行代码评估(请执行),这意味着您的评论者可以看到您所做的更改,以及您在配置(几乎所有)中添加和删除的内容。使用这种结构,审阅者不会仅仅看到需要手动解密,保存到磁盘并与早期版本分离的Vault上的完整文件更改。

而且,更重要的是,如果在Vault中丢失了vault_database_password变量,那么Ansible将失败,甚至会导致vars?,如果您没有保持关闭保险库文件的选项卡,则可能会使您至少存在一段可能遇到的问题。

如果你坚持这种模式,不管它是一个环境中的一个主机组,一个完整的环境,你设置的变量,甚至是“所有”文件夹,你的同伴永远不会被困惑在什么是和不是在保险柜

这就是现在,我们希望它已经有一些用处了!

 

ExpressVPN:安全、快速、30天退款保证

立即购买