前言
2021 年 12 月 09 日,HashiCorp 在纳斯达克成功挂牌上市。作为 HashiCorp 多年的老粉,实在是感慨万千。近年来开源软件作为一种商业模式一再被证明行之有效,初创团队可以借由一款优秀的开源工具吸引投资,快速迭代,培育一个茁壮的社区,在社区影响力足够大,渗透到足够多的企业后,再提供各种付费增值服务实现盈利,这对更多的走在这条路上的创业团队来说无疑是一个好消息。
从社区活跃度来看 HashiCorp 最受欢迎和知名度最高的产品是 Terraform,已经有大量相关的文章、教程(笔者也为 Terraform 在中国的推广做了一点 V 小的工作)。但实际上 HashiCorp 提供的是一个立体的自动化云计算运营框架,而 Terraform 也只是这个立体框架中的一个组成部分,想要把云玩好,我们还需要更多。
HashiCorp 将云的自动化分为四个层面:
- 基础设施
- 安全
- 网络
- 应用程序
HashiCorp 为这四层分别设计了四种主要工具,就是:
- 基础设施:Terraform
- 安全:Vault
- 网络:Consul
- 应用程序:Nomad
可以说 HashiCorp 宇宙中这四个产品是一等公民,它们彼此之间还有很多相互协同的功能,构成了一个立体的矩阵,另外再辅以二线辅助产品 Vagrant、Packer、Boundary、Waypoint。这些产品都有一些共同的特征,例如跨平台、单一可执行文件、基于 Hashicorp Go-Plugin 的插件化设计,以及使用 HCL (HashiCorp Configuration Language)作为主力配置语言等等。
笔者曾经把 Terraform 文档中关键部分翻译为中文电子书《Terraform 入门教程》,帮助了不少想要学习 Terraform 但不想阅读英文文档的朋友。曾经我写过《HashiCorp 全家桶》系列的文章,浮光掠影地介绍过一个同时使用 Terraform、Consul 和 Nomad 实现一个简单的云原生平台的案例,但当时因为精力和能力有限,并没有把 Vault 纳入;后来总觉得缺了一块,于是开始学习 Vault,这个 Vault 学习之旅给我带来了很大的震撼,我意识到曾经我的许多的做法在 Vault 诞生后都是错误的,或者说是过时的了。
随后看到越来越多的网络安全事件,例如各种数据泄露、心怀不满的员工恶意删除、泄漏重要数据等等。最重要的事件是 2021 年 06 月 10 日,第十三届全国人民代表大会常务委员会第二十九次会议通过了《中华人民共和国数据安全法》,数据安全、信息安全的重要性已经被国家立法确定,对现在的企业来说,数据安全工作是决定企业生死存亡的高压线,而国内业界对此普遍是处于懵懂和不知所措的阶段的。
云时代需要的是动态防御
提到“固若金汤”,传统语境下想象到的是重兵防守森严壁垒的,钢筋混泥土修筑的立体化防线,由雷区、铁丝网、拒马、各种明碉暗堡和多层次远程火力所筑成,敌人哪怕付出惨痛代价也无法越雷池一步
遗憾的是历史表明,这种成本高昂的静态防线一般起不到什么作用,想要把敌人完全抵挡在外部是一种天真的想法,进攻者可能会以各种令人匪夷所思的方式悄悄绕过重兵布防的防线而出现在空虚的大后方。传统的基于数据中心的信息安全体系往往被设计成类似这样的静态防线,主要的防御被设立在系统的边界之上,这种防御思想如同马奇诺防线一样,认为只要把外部流量隔离在外部,使其无法窥探到内部的信息就可以高枕无忧。这种思想存在三个问题:
- 如同马奇诺防线一样,你永远无法确定攻击者找不到任何途径得到内部的信息,首先内部员工本身就有可能是恶意攻击者
- 一旦攻击者设法获取了某些内部机密信息,很难阻止他悄悄地执行恶意行为,因为这些机密信息很难更换,这就导致我们倾向于永远不更新这些信息,使得攻击者一旦得手后就可以持续进行攻击
- 我们在边界上的层层防卫虽然无法彻底消除攻击的风险,但却能成功地给正常的开发维护工作带来障碍。我们越是增加审批流程,我们的迭代速度就越慢,就有越多的人力浪费在通过层层审批和各种隔离上。在高度动态化的云时代这种矛盾显得尤其突出
HashiCorp Vault 针对安全防护提出了不同的思路,它不再把防护看作是一个静态的、重型的,卡在边关上的防线,而是提出了一种动态的、轻量级的,运行在系统纵深方方面面的一个防护过程。它提倡动态机密,一次一密,如果性能允许,我们甚至可以为生产环境的每一个容器,公司的每一名开发,他们使用受 Vault 保护的系统的每一次会话都建立一个专属的临时的拥有最小权限的安全凭证,并且该凭证必须绑定一个有效期,这个有效期可以是静态的(例如10分钟有效),也可以是动态的(只在进程、容器运行期间有效)。这一秒使用的密码,可能下一秒就变了;数据库中保存的敏感数据这一秒还是用这个版本的密钥加密的,下一秒可能就更新成用另一个新版本密钥加密了。一切的机密都是动态的,一切的机密都绑定了一个尽可能短的生命周期,即使敌人攻进了纵深,它所面临的仍然是一个高度设防、高度动态的流动的环境;即使敌人得到了数据,数据也因为对应的密钥被按时轮换掉而无法解密。古希腊哲学家赫拉克利特说:“人不能两次踏进同一条河流”,Vault 说:“你不应该两次使用同一个机密”。旧时代的安全防护尽量阻止变更,而云原生时代高频率的变更提升了安全防护。
曾经我心中发了一个愿,想要把 HashiCorp 的这四大产品逐一翻成中文教程,为中国云计算与信息技术的提升做一份贡献,我愿做一块垫脚石,让社区能够通过我的这一点工作广泛接纳 HashiCorp 的工具链,进而接纳这一套自动化运营模型,如果能够进一步发展出属于我们中国的更先进的工具链和模型那真是善莫大焉。
在 Terraform 之后,我曾经在 Vault 和 Consul 之间犹豫过,但在看到那么多信息安全事件后我认为中国的技术社区更加迫切地需要大规模采用 Vault,或者说是同等级的类似产品。于是就这么定了下来,陆陆续续写了一些有关 Vault 的文章,想着积攒到一定程度后能够编纂成一套系统性的教程。在 2021 年底意外获得了一个超过一周的假期,由于零星散发的疫情,所以不想冒险远行度假,索性就静下心来用这个假期为 Vault 翻译一册中文手册。
与编写《Terraform 入门教程》时一样,本书的编写借鉴了 HashiCorp 官方的认证考试《HashiCorp Security Automation Certification》所编写的考纲,力求能够深入浅出地使读者能够掌握如何使用 Vault,如何围绕着 Vault 设计一套安全的机密管理体系,如何将这套体系与其他日常使用的工具和工作流整合起来。
如果读者满足以下一条或者多条情况,那么可能就是本书的目标读者:
- 从事运维、开发或者架构工作
- 好奇如何提升整个 DevOps 生命周期的安全性
- 对 HashiCorp 技术栈感兴趣
- 不喜欢或者没有时间阅读英文文档
本书编写时使用的是 Vault 1.9.2 版本。HashiCorp 的主流产品在近年获得大额融资后迭代速度非常快,如果读者发现某些内容已经由于版本更新而不再准确时敬请包涵,并且以官方文档为准。我个人有一种预感,那就是本书将永远无法完整描述 Vault 的方方面面,也无法做到完全准确,它将是一本永远在编写中的书,而这其实是一件非常好的事情。
如同 Terraform 一样,今天的 Vault 实际上有三个版本:Vault 开源版,Vault 企业版,以及HashiCorp 托管的 Vault 云服务版。本书将聚焦于开源版的内容,对其他版本感兴趣的读者敬请自行查阅相关文档。
另外由于 Vault 的开放式设计,它可以与大量三方系统进行集成,涵盖了几乎所有主流的云平台以及需要进行机密管理的常见系统。以笔者一人之力,哪怕是用尽假期也是无法涵盖这许许多多的产品和平台,所以只能依照笔者任性的个人喜好选择一二进行翻译,如有没有包括的部分烦请移步官方文档。笔者也无法同时精通这些不同平台和产品的知识,虽然竭尽自己驽钝的脑力也无法确保对各种知识的肤浅理解没有错误,所以具有相关领域专业知识的读者如果读到什么地方感觉到不对,请不要犹豫,这几乎可以肯定是笔者能力不足导致的错误,敬请以你的专业知识为准。
由于笔者的能力有限,书中如有错误在所难免,敬请方家届时能够不吝斧正赐教。另外因为很早就开始想写这本书,陆陆续续攒了一些零散章节,现在趁假期一并汇编成集,不免会由于写作时间跨越几年而导致前后出现不一致或是重复叙述某个概念,万望读者海涵,在此先行谢过。