二、vault - vault的架构
前面对vault的使用做了简单使用,有了具体化的认识,下面对vault进行详细的说明。
vault架构:
术语:
- | - |
---|---|
Storage Backend | 存储后端 负责存储加密后的数据 |
Barrier | 屏障,vault的安全区域的保障 |
Secret Backend | 密码后端,如mysql每次生成mysql新用户 |
Audit Backend | 审计后端,如日管理 |
Credential Backend | 凭证后端,用于验证连接到vault的用户或应用程序 |
Client Token | 客户端令牌 |
Secret | 密文,秘密信息 |
Server | vault服务 |
Expiration Mgr | 租期管理器,过期管理 |
Rollback Mgr | 回滚管理器 ,用户不可见 |
Token Store | 令牌存储 |
core | 负责处理api请求请求,获取secret backend中密文返回,并加上lease ID ,用户可以调用api续租或销毁密文 |
policy store | 策略存储 |
System backend | 系统后端 |
高级概述:
vault的架构如下图:
安全屏障Barrier内的组件都是安全的,除了Storage Backend和HTTP API之外,所有其他组件都在安全屏障Barrier内。
vault启动后,处于封闭状态,操作vault必须先解封,解封vault需要使用初始化时生成的多个**,vault初始化后需要使用加**匙(encryption key)访问数据,加**匙(encryption key)由主**(master key)提供保护;默认情况下,vault使用“ Shamir’s secret sharing algorithm ”算法把主**(master key)分割成5股,称为(key shares),任何3股(key shares)可重建的主**(master key);
注:
Shamir’s secret sharing algorithm : Shamir’s 秘密共享算法
Key Shares : 分割秘钥 任意三个可以构建Master Key
Master Key : 主**
Encryption key : 加密秘钥,用于数据的读写
分割秘钥的数量和所需的最小阈值都可以指定。此功能可以被禁用,主**可直接访问未密封的vault服务,一旦库获取encryption key,就能够解密存储后端(storage backend)的数据,进入起封状态。启封后,vault加载所有的审计后端(Audit Backend )、凭证后端(Credential Backend )和密文后端(Secret Backend)
Vault中的各种后端的配置都存储在存储库(Storage Backend),因为这些都是敏感数据。只有具有正确权限的用户才能够修改,也就是说他们不会处于屏障之外。由于他们存储在存储库中,对他们的任何更改都被ACL(Access Control List)控制,并被审计记录日志。
客户端首次连接到vault,需要进行身份验证。vault提供了可配置的凭证后端(Credential Backend),拥有灵活的身份验证机制。如对人类友好的用户名/密码认证方式,或使用第三方运营商的认证,如GitHub认证;应用程序可以使用公钥/私钥或令牌验证(token)。身份验证请求流经核心(core)和凭证后端(Credential Backend),如果请求是有效,则返回其策略列表(Policies )。
策略由ACL方式定义。例如,“root”策略是内置的,允许访问所有资源。您可以创建任意数量的策略以及路径的细粒度的权限控制。vault操作使用白名单模式,也就是说,除非通过策略显式授予权限,否则任何访问操作都是不允许的。一个用户可能有多个策略,是否可以操作由这些策略决定。策略由内部的策略库(policy store)存储和管理。策略库(policy store)是通过系统后端(System backend)操作的,其始终是安装在sys /下。
身份验证后由凭证后端(credential backend)提供了一组适用的政策,由token store为客户端生成一个新的令牌,并存储和管理起来。此标记发送给客户端,并用于后续请求使用。类似登录网站时用的cookie。客户端标记可能有一个与之相关的租赁凭证,是否有租赁凭证取决于凭证后端(credential backend )配置。意味着客户端令牌可能需要定期更新,以免失效。
身份验证后,则使用令牌进行请求。令牌用于验证客户端和加载相关策略。策略用于对请求进行授权,然后将请求路由到指定的密文后端(Secret Backend),请求的处理由后端的类型决定。如果后端返回密文,核心寄存器(core)会管理并附加一个租赁id(lease ID)。租赁id用做更新或销毁密文。如果客户允许租赁id到期,租期管理器(
Expiration Mgr)自动销毁这个密文。
vault核心将请求和响应的日志委托给audit broker,将日志记录到审计后端。请求流程以外,核心保持在后台运行。租赁管理是比较重要的,因为它允许客户令牌到期或密文自动撤销。此外,vault使用回滚管理器基于日志记录处理某些失败的用例。这个操作是透明的和用户不可见的。