微服务架构系列主题:HashiCorp Vault介绍

目录

为什么要使用HashiCorp Vault?

HashiCorp Vault的特性

HashiCorp 架构

总结


HashiCorp Vault是一款企业级私密信息管理工具。说起Vault,不得不提它的创造者HashiCorp公司。HashiCorp是一家专注于DevOps工具链的公司,其旗下明星级产品包括Vagrant、Packer、Terraform、Consul、Nomad等,再加上Vault,这些工具贯穿了持续交付的整个流程。

微服务架构系列主题:HashiCorp Vault介绍_第1张图片

HashiCorp Vault在2016年四月进入了ThoughtWorks技术雷达,位于Tools分类,处于ACESS级别。在2017年3月份最新一起Tech Radar中,HashiCorp Vault已经处于TRIAL级别。

微服务架构系列主题:HashiCorp Vault介绍_第2张图片

HashiCorp Vault | Technology Radar | Thoughtworks

为什么要使用HashiCorp Vault?

在企业级应用开发过程中,团队每时每刻都需要管理各种各样的私密信息,从个人的登陆密码、到生产环境的SSH Key以及数据库登录信息、API认证信息等。通常的做法是将这些秘密信息保存在某个文件中,并且放置到git之类的源代码管理工具中。个人和应用可以通过拉取仓库来访问这些信息。但这种方式弊端很多,比如跨团队分享存在安全隐患、文件格式难以维护、私密信息难以回收等。

尤其是微服务大行其道的今天,如何让开发者添加私密信息、应用程序能轻松的获取私密信息、采用不同策略更新私密信息、适时回收私密信息等变得越来越关键。所以企业需要一套统一的接口来处理私密信息的方方面面,而HashiCorp Vault就是这样的一款工具。

HashiCorp Vault的特性

HashiCorp Vault作为集中化的私密信息管理工具,具有以下特点:

  • 存储私密信息。 不仅可以存放现有的私密信息,还可以动态生成用于管理第三方资源的私密信息。所有存放的数据都是加密的。任何动态生成的私密信息都有租期,并且到期会自动回收。

  • 滚动更新秘钥。用户可以随时更新存放的私密信息。Vault提供了加密即服务(encryption-as-a-service)的功能,可以随时将密钥滚动到新的密钥版本,同时保留对使用过去密钥版本加密的值进行解密的能力。 对于动态生成的秘密,可配置的最大租赁寿命确保密钥滚动易于实施。

  • 审计日志。 保管库存储所有经过身份验证的客户端交互的详细审核日志:身份验证,令牌创建,私密信息访问,私密信息撤销等。 可以将审核日志发送到多个后端以确保冗余副本。

另外,HaishiCorp Vault提供了多种方式来管理私密信息。用户可以通过命令行、HTTP API等集成到应用中来获取私密信息。HashiCorp Vault也能与Ansible、Chef、Consul等DevOps工具链无缝结合使用。

HashiCorp 架构

HashiCorp对私密信息的管理进行了合理的抽象,通过优良的架构实现了很好的扩展性和高可用。

微服务架构系列主题:HashiCorp Vault介绍_第3张图片

  • Storage backend: 存储后端,可以为内存、磁盘、AWS等地方。

  • Barrier:隔离受信区域和非授信区域,保证内部数据的安全性。

  • HTTP API:通过HTTP API向外暴露服务,Vault也提供了CLI,其是基于HTTP API实现的。

Vault提供了各种Backend来实现对各种私密信息的集成和管理。比如Authentication Backend提供鉴权,Secret Backend用于存储和生成私密信息等。

Secret类型

Vault支持一系列不同的秘密类型,可以解决不同的用例:

  • Key-Value: 简单的静态键值对
  • 动态生成的凭据:由Vault根据客户端请求生成
  • 加密密钥:用于使用客户端数据执行加密功能

每种秘密类型由以下属性定义:

  • 一个挂载点,定义了它的REST API前缀
  • 通过相应的API公开的一组操作
  • 一组配置参数

可以通过路径访问给定的秘密实例 ,非常类似于文件系统中的目录树。此路径的第一个组件对应于此类型的所有机密所在的安装点。

例如,字符串 secret / my-application 对应于我们可以在其中找到my-application的键值对的路径 。

Key-Value Secrets

顾名思义,键值Secrets是指在给定路径下可用的简单键值对。例如,我们可以在path / secret / my-application下 存储foo = bar对 。

稍后,我们使用相同的路径来检索相同的一对或多对 - 多对可以存储在同一路径下。

Vault支持三种Key-Value机密:

  • 非版本化键值对,其中更新替换现有值
  • 版本化键值对,可保持可配置数量的旧版本
  • Cubbyhole,一种特殊类型的非版本化密钥对,其值的范围限定为给定的访问令牌(稍后将详细介绍)。

密钥值秘密本质上是静态的,因此没有到期的概念与它们相关联。这种秘密的主要使用场景是存储凭证以访问外部系统,例如API密钥。

在这种情况下,凭据更新是半手动过程,通常需要有人获取新凭据并使用Vault的命令行或其UI来输入新值。

动态生成的Secrets

当应用程序请求时,Vault会动态生成动态机密。Vault支持多种类型的动态机密,包括以下几种:

  • 数据库凭证
  • SSH密钥对
  • X.509证书
  • AWS凭证
  • Google Cloud服务帐户
  • Active Directory帐户

所有这些都遵循相同的使用模式。首先,我们使用连接到关联服务所需的详细信息配置secret引擎。然后,我们定义一个或多个角色, 描述实际的secret创建。

我们以数据库secret引擎为例。首先,我们必须使用所有用户数据库连接详细信息配置Vault,包括来自具有管理员权限的预先存在的用户的凭据以创建新用户。

然后,我们创建一个或多个角色(Vault角色,而不是数据库角色),其中包含用于创建新用户的实际SQL语句。这些通常不仅包括用户创建语句,还包括访问模式对象(表,视图等)以及所有必需的 grant语句。

当客户端访问相应的API时,Vault将使用提供的语句在数据库中创建新的临时用户并返回其凭据。然后,客户端可以使用这些凭据在请求角色的生存时间属性定义的时间段内访问数据库。

凭证到达其到期时间后,Vault将自动撤消与此用户关联的任何权限。客户端还可以请求Vault续订这些凭据。只有在特定数据库驱动程序支持且相关策略允许的情况下,才会进行续订过程。

加密密钥

这个类型的秘密引擎处理加密,解密,签名等加密功能。所有这些操作都使用Vault内部生成和存储的加密密钥。除非明确告知,否则Vault将永远不会公开给定的加密密钥。

关联的API允许客户端发送Vault纯文本数据并接收其加密版本。相反的情况也是可能的:我们可以发送加密数据并取回原始文本。

目前,只有一种这种类型的引擎:Transit引擎。此引擎支持流行的密钥类型,如RSA和ECDSA,还支持 Convergent Encryption。使用此模式时,给定的明文值始终会产生相同的密文结果,这种属性在某些应用程序中非常有用。

例如,我们可以使用此模式加密事务日志表中的信用卡号。使用收敛加密,每次插入新事务时,加密的信用卡值都是相同的,因此允许使用常规SQL查询进行报告,搜索等。

总结

HashiCorp Vault作为私密信息管理工具,比传统的1password等方式功能更强大,更适合企业级的应用场景。在安全问题越来越严峻的今天,值得尝试HashiCorp Vault。

你可能感兴趣的:(IT-微服务架构,密钥管理)