vault-服务器密码/证书管理工具

vault介绍

vault是什么

vault是一个密码/证书集中式管理工具,经过HTTP-API对外提供统一的密码访问入口,而且提供权限控制以及详细的日志审计功能。linux

一个系统可能须要访问多个带密码的后端:例如数据库、经过API keys对外部系统进行调用,面向服务的架构通讯等等。要将众多系统中的用户和权限对应起来已经很是困难,加上提供密钥滚动功能、安全的存储后端还要有详细的审计日志,自定义解决方案几乎不太可能。这也就是vault存在的意义。git

vault的特性

(1)安全的存储后端:任意的键值对密码都能存储在vault。vault在把数据写入存储后端以前会先将数据加密,因此即便你直接读取存储后端数据也没法拿到真正的数据。vault的存储后端能够是文件、Consul、etcd等等github

(2)动态密码生成:vault可以按需生成某些后端的密码,例如:AWS、SQL数据库等等。例如当一个应用须要访问AWS的S3 bucket,应用向vault请求访问S3 bucket的证书,vault能按需生成一个指定权限的AWS密钥,而且可以根据租期自动销毁这个密钥。数据库

(3)数据加密:vault能够在不对数据存储的状况下,对数据进行加密和解密。安全团队只需定义好加密方法,开发将加密后的数据存储在例如SQL之类的后端便可,而无需设计本身的加密方式。后端

(4)租期和续租:在vualt里面,所有的密码均可以跟租期联系起来。在租期结束时,vault会自动销毁对应的密码。客户端可以经过renew-API进行续租。安全

(5) 销毁:vault自己支持对密码进行销毁,不只支持销毁单个密码,还支持销毁与之关联的密码。好比指定某个用户读取的所有密码,或者特定类型的密码。销毁功能可以在密码被泄露的时候辅助锁定系统。bash

vault的使用场景

(1) 做为集中存储各个服务器帐号密码的服务器。目前咱们有服务器须要访问到有密码的后端的时候,有几种方案:服务器

  • export到环境变量
  • 写死到代码里面
  • 上线的时候使用自动化工具对变量进行替换

第一种方案带来的问题是使用麻烦,后两种方案带来的问题是维护和变动麻烦。好比DB密码泄露,须要修改密码,首先DBA修改密码,而后通知到应用,应用再作代码上的变动。若是使用vault的话,DBA只要在vault上面修改好密码以后通知应用从新从vault拉取最新密码就好了。架构

(2)为每个操做单位动态分配帐号工具

好比过去咱们想要对某些敏感操做进行审计,可是因为生成帐号比较麻烦,因此存在公用帐号的状况。vault支持为某些后端动态生成帐号的功能,好比SQL,当某个应用向vault请求帐号密码的时候,vault可以为每次请求生成一个独一无二的SQL帐号密码。

(3) 做为证书服务器

vault可以做为CA服务器,根据请求信息自动颁发证书。而且提供在线CA和CRL的功能。不过目前只能在vault里面新生成ROOT-CA,不能导入原有的ROOT-CA。

(4)做为OAUTH服务器

vault支持多种认证后端,好比github、kubernetes、帐号密码等等。vault可以将这些帐号关联成一个用户,在用户认证以后返回一个token供用户使用。

最简单的vault服务器

以Linux-64bit系统为例

# 下载 vault
wget https://releases.hashicorp.com/vault/0.9.1/vault_0.9.1_linux_amd64.zip
unzip vault_0.9.1_linux_amd64.zip

# 启动dev模式,此模式下任何改动都在内存中进行,数据不会保存

./vault server -dev

# 启动信息
# ==> Vault server configuration:
# ...
# Unseal Key: 0Gg1yc/qY2W3f82DnxcZTEjdvMuxpjOV5nzNnVrMy4U=
# Root Token: eb45cfe5-9cca-3b23-5416-49f2febeb59c
# ...

# 咱们能看到vault自动监听在了127.0.0.1:8200,并自动为咱们生成了unseal-key以及root-token

# 启封 vault,在使用vault以前首先要对vault进行启封,才能对vault进行后续操做。使用上面生成的uneal-key,其实dev模式下默认是已经启封状态
vault unseal 0Gg1yc/qY2W3f82DnxcZTEjdvMuxpjOV5nzNnVrMy4U=
# 认证,使用上面的Root Token
vault auth eb45cfe5-9cca-3b23-5416-49f2febeb59c
# 将vault地址写入环境变量
export VAULT_ADDR='http://127.0.0.1:8200'
# 使用vault-cli操做vault,实际上后台是调用经过HTTP-API来操做vault
# 写入密码,在此你能够写入任意的键值对
vault write secret/vault host=127.0.0.1 password=123456

clipboard.png

# 读取刚刚写入的密码
vault read secret/vault

clipboard.png

结语

固然vault能作的远远不止上面的键值对存储和读取,这里主要对vault的使用作一个大概的介绍,以及简单使用,后面会深刻讲解vault的各个组件以及高级用法。

相关文章
相关标签/搜索