Vault是用来安全的获取秘密信息的工具,它可以保存密码、API密钥、证书等信息。Vault提供了一个统一的接口来访问秘密信息,其具有健壮的访问控制机制和丰富的事件日志。
Vault解决多用户不同身份访问关键信息时,授权的复杂问题。Vault为安全的存储、管理审计日志提出一个解决方案
vault提供特性描述
数据加密 :vault 能够在不存储数据的情况下对数据进行加密、解密。开发者便可以存储加密后的数据而无需开发加密技术,Vault允许安全团队自定义安全参数。
安全密码存储: vault在将秘密信息(api密钥,密码,证书)存储到持久化存储之前对数据进行加密。这样即使加密后的信息也是不可读的。
动态密码 :vault可以随时为AWS、SQL资料库等类似的系统产生密码。比如,如果应用需要访问AWS S3 buket,它向vault请求AWS密钥对,vault将给出带有租期的所需秘密信息。一旦租用期过期,这个密码信息就不再存储。
租赁和更新:vault给出的秘密信息带有租赁时间,一旦租用期过期,它便立即回收秘密信息,如果应用仍需要该秘密信息,则可以通过API更新租用期。
撤销 :在租用到期之前,vault可以撤销一个秘密信息或者一个秘密信息树。
vault使用例子
存储用户secret
1.用户通过接口上传自己的secret,vault将用户上传的内容加密后写入MySQL。
➜ vault vault write secret/org-2345 organizationID=org-2345 publickey=test0512
Success! Data written to: secret/org-2345
2.用户存储的secret通过以下接口进行展示。
➜ vault vault read -format=json secret/org-2345
{
"request_id": "08ef64d6-0b11-4da3-30f0-a0dc7e5e90fd",
"lease_id": "",
"lease_duration": 2764800,
"renewable": false,
"data": {
"organizationID": "org-2345",
"publickey": "test0512"
},
"warnings": null
}
➜
生成用户带有租期的token
➜ vault vault token-create
Key Value
--- -----
token 54d4106c-f56d-4f26-8a4a-e3f72971803e
token_accessor 7417f4c5-aaf0-2ca9-054b-ac147fb4b9fc
token_duration 0s
token_renewable false
token_policies [root]
vault 需要配置mysql作为backend持久化存储数据
初次配置的过程中会产生如下所示的信息:
Unseal Key 1: QIUHbvNE/LKlbg4zHi/6ykp8Lvmnpjxz7rSUOw1WWy4
Unseal Key 2: 1LhCk50IskEkcGDxNmOz3k3au8yKHfkmcApIQ/51GA+
Unseal Key 3: al0yAEvRceJUMyE0nYjzKIOq2Hgklf0YIcS/W/HxE1m
Unseal Key 4: ce6OGY0qeU1qGC8fpu1McswiMYWiWLSK1mbz2jeHEZI
Unseal Key 5: 0jid0L+7hBTu4eanPw9Bjnl9VaBuKyWpl6jBl/WdXjP
Initial Root Token: 0636ad41-867a-8b0a-4322-beb1c57b9b9
Vault initialized with 5 keys and a key threshold of 3. Please
securely distribute the above keys. When the vault is re-sealed,
restarted, or stopped, you must provide at least 3 of these keys
to unseal it again.
Vault does not store the master key. Without at least 3 keys,
your vault will remain permanently sealed.
vault可以配置使用进行seal/unseal的密钥的个数。
vault init -key-shares=1 -key-threshold=1
优点:
vault server启动默认的状态为sealed状态,vault 被配置知道如何访问物理存储,但是不知道如何解密数据。
unseal是程序构造一个主密钥去读取加密后的数据并解密数据,只有在unseal状态,才可以针对vault做操作。
1.vault配置后端mysql的方法:
https://www.vaultproject.io/docs/configuration/storage/mysql.html
2.vault配置mysql secret backend