KMS解决方案-Vault
文章目录
概述
Vault 是一个秘密管理、加密即服务和特权访问管理的工具。业界用的比较多的 KMS 解决方案。
用于加解密 secret, 比如API密钥、密码、证书等等。Vault为任何秘密提供了一个统一的界面,同时提供严格的访问控制和记录详细的审计日志。
支持特性
- 安全秘钥存储: 任意的 key/value 秘钥可以存储在 Vault 中。Vault 会在将这些秘钥写入持久性存储之前对其进行加密,因此获得对原始存储的访问权限并不足以访问你的秘钥。Vault可以写入磁盘、Consul 等。
- 动态加密: Vault 可以为一些系统按需生成秘钥,如 AWS 或 SQL 数据库。例如,当一个应用需要访问 S3 bucket 时,它会向 Vault 请求凭证,Vault 按需生成一个具有有效权限的 AWS 密钥对。创建动态秘钥后,Vault 还会在租约到期后自动撤销秘钥。
- 数据加密: Vault 可以在不存储数据的情况下对数据进行加密和解密。可以定义加密参数,开发人员可以将加密数据存储在 SQL 等位置,而不必自己设计加密方法。
- 秘钥租赁和更新: Vault 中的所有秘钥都有一个与之相关的租约。在租约结束时,Vault 将自动撤销该秘钥。客户端能够通过内置的续约 API 来续约。
- 秘钥回收: Vault 内置了对秘钥撤销的支持。Vault 不仅可以撤销单一的秘钥,还可以撤销一棵秘钥树,例如由特定用户读取的所有秘钥,或特定类型的所有秘钥。撤销有助于密钥滚动以及在发生入侵时锁定系统。
部署 Vault
依赖 Golang 环境
下载 Vault:
1
git clone git@github.com:hashicorp/vault.git
要编译 Vault 的开发版本,请运行
make
或make dev
编译后会把 Vault 二进制文件放在bin
和$GOPATH/bin
文件夹:1 2 3
$ make dev ... $ bin/vault
要编译带有用户界面的 Vault 开发版,运行
make static-dist dev-ui
。编译后会把 Vault 二进制文件放在bin
和$GOPATH/bin
文件夹:1 2 3
$ make static-dist dev-ui ... $ bin/vault
要运行测试,输入
make test
。注意:这需要安装 Docker1 2
$ make test ...
如果正在开发一个特定的包,通过指定 TEST 变量来运行该包的测试。 比如下面的例子,只运行vault包的测试:
1 2
make test TEST=./vault ...
Vault 操作命令
vault operator init
: 连接并初始化 Vault。可能出错:
1
Error initializing: Put https://127.0.0.1:8200/v1/sys/init: dial tcp 127.0.0.1:8200: connect: connection refused.
解决办法:
1
export VAULT_ADDR='http://127.0.0.1:8200' # config Vault client to connect with dev server.
vault status
: 查看 Vault 的状态。vault kv put secret/hello foo=world
: The secret prefix is where arbitary secrets can be read and written.vault kv get secret/hello
: Getting a Secret.vault kv delete secret/hello
: Deleting a Secret.vault secrets enable -path-kv kv
: Enable a Secrets Engine.vault secrets list
: List all enabled Secrtes Engines.vault list kv
: LIst key in kv Engine.vault secrets disable kv/
: Disable a Secrets Engine.
分类
- 基本命令:
- read
- write
- delete
- list
- login
- server
- status
- unwrap
- 其他:
- audit
- auth
- lease
- operator
- path-help
- policy
- secrets
- ssh
- token
dev 模式下启动一个 Vault Server:
|
|
通过 CLI 和 HTTP API 来调用 Vault