敏感数据和密钥管理方案Vault

Owen Jia 2020年01月17日 1,772次浏览

Vault

vault-1.3.1版本为例,运用于SpringCloudConfig

介绍

By HashiCrop,Vault是一种密钥存储的服务工具软件,如大量的账户名、密码、Key\加密Key等,它有灵活的权限控制、详细的操作记录、历史版本等。目前是有商用版和开源版提供,即支持命令行操作又支持UI管理界面,十分成熟且有好些年头了,支持命令行操作和Web管理。

官网:hashicorp-vault, 代码库:vault-github

安装使用

Vault是HashiCrop公司推出,他们公司还有个产品叫:Consul,相信这个肯定知道的。

对于敢在官网直接放Github社区源代码链接的公司,天然有好感。官网菜单有个“learn”选项里面有非常详细的安装、启动、使用文档(都是英文),按着一步步很轻松就能掌握Vault。在国内访问网站经常会连不上,他们还没有提供PDF下载,对于新手来说会有掉链子的感觉。

安装的是1.3.1版本(目前最新了),配置分享给大家看看。实施的具体步骤就不说了,官网已经在傻瓜式介绍了,再啰嗦没有意义。它的配置采用他们自定义的HCL语法,代码也是采用Go编写同时开源了。

disable_mlock = true
ui = true
storage "mysql" {
  address = "127.0.0.1:3306"
  username = "mysql"
  password = "mysql"
  database = "vault"
  ha_enabled = "true"
}
listener "tcp" {
	address = "127.0.0.1:8200"
	tls_disable = 1
	tls_disable_client_certs = 1
}
cluster_name = "cluter_vault"
disable_cache = true
log_level = "Debug"
api_addr = "http://127.0.0.1:8200"

吐槽一下官网文档中关于API这块就是坑,文档对于URL的PATH描述和示例都是错误的,如下:

$ curl \
    -H "X-Vault-Token: f3b09679-3001-009d-2b80-9c306ab81aa6" \
    -X GET \
    http://127.0.0.1:8200/v1/secret/foo

在path中是有关键字段的,如“data”,看下图:

官网在API请求路径描述上是错误的(应该是没及时更新),实在是害人不浅,但有个help接口是正确的可以帮助理解path的格式规范,如:http://localhost:8200/v1/secret/?help=1。作为SpringCloudConfig选项后台,目前到data层面的保存使用已经跑通也基本够使用,其他的后续再慢慢摸索。

支持多种存储

下面列出常规的选择,其他等详细可以去官网看:>>> 点击跳转 <<<

  1. Consul
  2. Etcd
  3. Zookeeper
  4. MySQL\MSSQL
  5. Filesystem

前三种1、2、3是比较靠谱方式,稳定性自不用说,很多公司用来做服务的注册与发现集群(可能它们还有存储的功能),根据自己情况定。

4是传统数据库代表,一般选用mysql,因为会使用的人远远不只是工程师和DBA,普用性高且稳定可靠。5是最简单的存储选型了,相当于本地化了,与服务器绑定,迁移备份需要自己思考做方案。

推荐MySQL、其次1、2、3方案。
cloud-parent/cloud-service-config-vault项目中采用的是mysql方案。

Mysql方案会涉及两张表:vault\vault_lock。vault是核心表,数据存储格式一律是“BLOB”,安全稳定谁也别想改。迁移也简单了,直接Copy。

vaulttables

总结

思考定位:使用简单、稳定可靠、HA、数据备份。

在SpringCloudConfig后台选型中比较看好GitLab和Vault,相对来说个人更喜欢Vault,但集成难度和学习成本比不了GitLab轻松简单。作为企业DevOps一体化方案的一部分还是以GitLab为中心选型好些,毕竟CI\CD放在那且大多数工程师都会Git。


下一篇,重点介绍Vault与SpringCloudConfig结合案例

关注作者博客:http://blog.shareworld.vip