代码改变世界

Vault Architecture (上)

2019-05-05 22:49  yx1989  阅读(538)  评论(1编辑  收藏  举报

本文摘译自Vault Architecure

Vault 是 hashicorp 公司开发并开源的一套密钥管理,加密服务和权限管理工具(KMS)。

Vault是一个复杂的系统,有很多的模块组成。为了帮助用户和开发者构建一个Vault如何工作的心智模型,这篇文档描述了系统的架构。

术语

在开始描述架构之前,我们提供了一些帮助弄清楚我们在讨论什么的名词解释。

  • 后端存储(Storage Backend) - 后端存储负责持久化保存加密后的数据。后端存储并不被Vault信任,对他们唯一的期望是提供持续性。后端存储在Vault启动的时候被配置。
  • 栅栏(Barrier) - 栅栏是牢固加密的,并在坚实围绕着Vault。所有在Vault和后端存储之间流动的数据,都会经过栅栏。栅栏会保证只有加密后的数据被写出,并且数据在读入的过程中会被校验和解密。很像银行的保险库,内部的所有东西被访问前,栅栏都需要被解封。
  • 机密引擎(Secrets Engine) - 机密引擎负责管理密文。简单的机密引擎,像是"kv"机密引擎只会简单的返回和查询的相同密文。一些密钥引擎支持在每次查询的时候使用规则去动态的生成一个机密。这使得可以是用唯一的唯一的机密,从而使Vault可以细粒度的撤销和进行规则更新。举个例子,一个MySQL机密引擎可以配置一个"web"规则。当"web"机密被读取的时候,一个新的为web server提供的有限权限集的 MySQL 用户名/密码 对会被生成。
  • 审计设备(Audit Device) - 审计设备负责管理审计日志。所有对Vault的请求和Vault的响应,都通过配置的审计设备。这提供了一个Vault与多种不同类型、不同目的地的审计日志交互的简单方式。
  • 认证方法(Auth Method) - 认证方法用来给连接到Vault上的用户或应用鉴权。当经过鉴权,认证方法会返回所有应该被应用的适用的规则的列表。Vault获取一个登陆后的用户并且返回一个可用于未来请求的client token。举个例子,userpass认证方法适用用户名和密码来给用户鉴权。github认证方法允许用户通过GitHub鉴权。
  • 客户端凭证(Client Token) - 客户端凭证(又被叫做 "Vault Token") 概念上类似于网站的session cookie。当一个用户鉴权,Vault会返回一个用于未来请求的客户端凭证。这个凭证会被Vault用来验证客户端表示并且实施使用的ACL规则。这个凭证通过HTTP headers传递。
  • 机密(Secret) - 机密是一个术语,用来描述Vault返回的所有包含机密或加密材料的一切内容。不是所有Vault返回的内容都是机密,举例来说系统配置,状态信息或是规则并不会被认为是机密。机密总是有一个关联的租约。这意味着客户端不能假设机密内容可以无限期的被使用。Vault会在租约结束的时候废除机密,操作者可以在租约过期之前介入废除租约。这分Vault和客户端间的合约非常关键,它允许不使用手工介入去调整密钥和规则。
  • 服务(Server) - Vault依赖一个作为服务长期运行的实例。Vault提供一个客户端与所有机密引擎,ACL执行以及机密租约废除有关交互,并且管理这些交互的API。拥有一个基于服务的架构,将客户端与安全密钥及规则解耦,并且可以为操作者提供中心化的审计日志以及简化的管理。