上一篇《Vault-敏感信息保护的一种大胆尝试》介绍了解决运维体系中安全问题的一个基石地位的平台Vault,本篇跟大家分享下Vault如何与运维体系集成和联动。
首先确认一点的是Vautl的使用不仅仅是运维或者安全管理员某一种角色的事情,而是贯穿整个研发生命周期所有角色都要理解其理念并从技术和管理都要围绕“安全”这一目标协力配合才能把Vault用好。我们来看下Vault使用时会涉及到哪些角色。
研发要做两个工作,第一:敏感信息配置拆分;第二:敏感信息动态加载。
配置拆分相对简单,需要把敏感信息的配置单独拆分到一个文件中并在系统启动时加载进来,侵入性较小。
敏感信息动态加载,是个非常困难的工作,因为与普通的动态加载不同,涉及到长连接、连接池、代码单例模式等如何重建的问题,侵入性很大。
像云资源、数据库、平台token等管理员,在没有Vault时交付给申请者的是敏感信息内容本身,而对接Vault后需要先把被管理的资源输入或者直接托管给Vault,然后交付给申请者的是Vault中的占位符或url。
业务运维需要在CD阶段完成敏感信息的组装工作,还好Vault为我们提供了一个Agent帮我们解决了绝大部分的工作,业务运维需要关注的就是准备好Agent的配置信息。Agent的配置信息主要分2大部分,Agent做为Client端与Server交互的部分,还有Agent服务于业务需要获取到哪些敏感信息。
这是Vault引入带来的新角色,因为在Vault的管理中使用者和敏感信息之间是通过Policy来控制权限范围的,所以需要专门的角色来维护这部分配置。
再看下个角色协作时是如何交互的:
交付过程全程分为3部分:敏感信息占位符、Agent的Consule配置、应用程序的启动依赖。
占位符:研发测敏感信息配置单纯拆分出来后,Value值用何种动态参数来代替。
Consule配置:Agent配置文件需要的共性和个性的内容如何拼接。
启动依赖:如何保证业务应用在启动时Agent已加载完毕。
Vault除开可以管理敏感信息,还可以作为加解密的基础服务,而对于该功能有2种应用场景。
场景一直接负责加解密,场景二只负责生成一个密钥的明文和密文,加解密交给程序测自己解决。
Vault的加密服务对vault的存储和密钥管理要求极高,一旦丢失密钥会造成程序段的数据不可用,切不可恢复。