云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

金山云_阿里企业邮箱哪家好_优惠

小七 141 0

Distil Networks使用Vault和Consult安全地存储和管理所有机密

这是Distil Networks的高级DevOps工程师Grant Joy的客座帖子。Distil网络阻止机器人程序。我们保护网站免受攻击,如网站刮,票证狙击,点击欺诈。我们公司由三位好朋友于2011年创立,公司的氛围是友谊和勤奋。迪斯蒂尔在全球拥有150多名员工和5个办事处。我们的美国办事处位于加利福尼亚、北卡罗来纳和弗吉尼亚。我们的国际办事处包括英国伦敦和瑞典斯德哥尔摩。我们最近与Verizon合作,迅速扩展我们的内容交付网络。我们有很多秘密。这些机密包括数据库密码、证书和私钥。在保护他们的工作上,我们是认真的。将我们的代码与速度和可靠性放在心上是至关重要的。为了实现这一目标,我们需要一个内置高可用性的秘密存储系统。HashiCorp在2015年发布了Vault,当时我们正在寻找解决秘密的方法。考虑到该产品的早期,我们依赖于Vault Google小组的帮助。那年晚些时候,我们,操作团队,能够建立一个以HashiCorp consult为后端的保险库集群。我们在OpenStack上运行集群,其中一个内部API处理大多数事务。我们的运营团队可以使用Vault CLI直接访问后端,而其他团队可以访问特定的Vault机密。我们的内部API位于防火墙后面,面向公众的API允许连接到内部API。这是一种很好的方法,可以将我们更敏感的过程与面向公众的API分离开来,以实现安全性和组织性。我们运行的保险库完全锁定在我们的专用网络中,内部API拥有大部分逻辑代码,例如生成证书。»HashiCorp Vault基础知识和群集设置我们创建了一个有三台机器的执政官集群。这些机器已经投入生产一年多了。我们按照建议使用三个节点来拥有奇数个节点。奇数个节点有助于避免在领导人选举期间出现僵局问题。在从重大停机(如跨多个节点的灾难性硬件故障)恢复期间,这可能是必需的。我们发现一个有用的资源是ubuntu14.04的数字海洋指南中的concur设置说明。下面是bash命令的示例。我们使用这些命令在MacOS上安装Vault客户机,向Vault服务器进行身份验证,写入一个密码,然后将其读回。#安装vault命令行brew安装vault#设置验证变量导出VAULT_TOKEN="保险库-令牌-此处"导出保险库地址="https://vault.distil.com:8200英寸导出VAULT_CACERT="ca_证书.crt"export VAULT_CLIENT_CERT="保险库_服务器.crt"export VAULT_CLIENT_KEY="保险库_服务器.key"#认证保管库身份验证#写一个秘密保管库写入机密/文件@文件.txt#把秘密念回来保险库读取密码/文件»哈普罗西后面的跳马前导节点应接收定向到Vault服务器的写入流量。处理这个问题的方法是使用converdns接口。这使consur可以管理到leader节点的所有通信路由。服务器将把所有未到达leader节点的流量重定向回consur。consur集群的播发地址将进行连接重试,以到达leader。在我们的案例中,Distil希望使用我们现有的DNS服务,而不是处理consur DNS。为此,我们使用HAProxy进行健康检查。它是一个轻量级负载平衡器,从版本7开始,它开始包含运行状况检查。它们在每个保险存储节点中查询/sys/leader,当其中一个节点作为leader响应时,流量将路由到该节点。如果服务器出了问题,这种健康检查在通知我们的操作团队时也很有用。下面是健康检查的样本。Distil已经在生产中运行了一年多,没有任何问题。我们经常重启个别机器进行系统更新。当服务器重新启动完成时,leader会自动切换,每个节点都会重新加入集群。虽然这种方法对我们的用例最有效,但是在沿着这条路走之前,您可能会查看converdns。在负载平衡器级别存在潜在的单点故障缺点。»API后面的保险库有时,将用户与直接访问Vault分开是很有价值的。为此,Vault提供了命令行界面或web用户界面。这将复杂的代码从运行在本地计算机上转移到远程API。它还通过LDAP或googlesso等协议提供单点登录控制。在Distil的例子中,LDAP处理用户机器和远程API之间的身份验证。令牌身份验证处理API到保险库的验证。不同的API端点可以使用不同的令牌。这允许API端点仅访问该端点所需的Vault数据。在某些情况下,这意味着使用只读Vault访问控制策略创建令牌。类似于Ruby代码的运行方式:需要"vault ruby"key="-----开始私钥---………"secret_path="机密/重要数据"Vault.logical.write秘密路径,钥匙#以后。。。返回的密钥=Vault.logical.read秘密通道把秘密放回打印钥匙在Distil的设置中,我们最终使用Commander gem编写了一个Ruby命令行应用程序。我们将其捆绑并部署到一个Box服务器中的内部Gem中。这使得开发人员很容易进行工具更新并将其部署到用户。当我们开始使用保险库时,它是用来保存一组非常具体的秘密的工具。随着时间的推移,我们发现很容易将它进一步整合到我们没有预料到的其他领域。我们现在使用它来存储应用程序的环境变量,存储Let's Encrypt密钥和证书,甚至用于办公室的随机密码。