HashiCorp Vault简介

11 12月

HashiCorp Vault是一个私密信息管理工具。

我其实很反感那种中英文交杂的文章,但是很多时候很难找到合适的中文词语。这里特别说明一下,Vault的英文定位是A tool for managing secrets,本文用私密信息指secrets。

什么是私密信息

私密信息主要是一些需要保密的值或者键值对,很多时候会和敏感信息混淆。

这里举几个私密信息的例子:

  1. 数据库登录信息
  2. SSL证书
  3. 云服务商的ACCESS KEY(比如AWS Cloud的IAM信息)
  4. 其他加密用的密钥
  5. API的认证信息

这些信息都是极为重要的,而且是需要被程序或者一些运维脚本直接获取然后使用的。

私密信息管理现状

要明白Vault的目标和价值,我们就需要先来看看私密信息管理的现状。

我们以API认证信息为例,在微服务大行其道的现在,如果你构建的应用需要调用别的API,那么你就需要向这些API提供认证信息,我们假设是用户名和密码。那么在你的代码中,你可能会硬编码这些信息,或者记录在配置文件中,再或者放在环境变量中。

而随着你需要的API越来越多,你需要管理的东西也越来越多。

这种管理方式很简单直接,但是也有很多问题。主要是在私密信息扩散和回收上。比如有一个内部API需要被一个服务消费,当出现第二个消费者的时候可能会通过某种方法使用同样的认证信息,这种情况下这一组认证信息很难真正被回收,因为使用方的信息不明确。当有恶意的第三方进行攻击的时候也很难做出防御和其他审计。

对于私密信息的管理,我们需要明确的回答几个问题

  1. 应用程序如何获取这些信息
  2. 开发者(或者其他关联方)如何申请
  3. 私密信息如何更新
  4. 私密信息如何被回收

Vault的目标和特性

Vault的目标是成为私密信息的唯一来源,即一个集中化的管理工具。而私密信息的需求方可以程序化的获得所需的信息。对于私密信息,还应该有完善的审计和可视化方法,并且作为一个集中化的依赖,Vault自身必须是高可用的,对于云数据中心友好的安全架构。

  1. Vault为了实现这些目标提供了以下特性:
  2. 安全的私密信息存储
  3. 动态的私密信息支持
  4. 提供对于私密信息的更新,延长有效时间的功能
  5. 高度灵活的权限控制
  6. 多种客户端验证方式

Vault的使用

现在软件界的任何一个工具/库都会配上一个X分钟快速使用。Vault当然也不例外。

这里简单看一下初始化,解封和获取私密信息的图示。

init-vault

unseal-vault

root-vault

init-vault read-vault

这里的读取是使用的Vault的CLI,应用程序可以使用HTTP API直接获取,Spring Boot也有相关子项目Spring Boot Vault可以方便的集成。

发表评论

电子邮件地址不会被公开。