Hashicorp Vault secrets engine---Key/Value

       加密引擎(Secrets Engine)是Vault架构中非常重要的一个组件,它负责管理存储在Vault中的所有私密信息,包括静态密码的存储、动态密码的生成以及数据的加密。它支持多种加密引擎,云资源包括AliCloud,AWS,Azure,Google Cloud等,数据库包括Elastic Search、MySql、PostgreSql、MongoDB等,以及RabbitMQ、PKI等等。Vault不仅可以存储静态数据,也可以动态生成具有时效性的token或access key来访问数据库或云资源,并且可以周期性的自动更新密码。Vault使用AES-GCM生成256位随机数对数据进行加密并写入持久化存储,所以存储后端看不到原始数据,即使有攻击者直接访问了存储后端,也并不能读到原始信息。

        kv加密引擎是Vault 所有支持的加密引擎中最基础的一个,用来存储静态key-vaule类型密码、api key、 数据库证书等。目前kv引擎支持v1和v2两个版本,v1和v2的区别是v2支持多版本的私密信息存储以及回滚,防止多人写时覆盖,默认支持10个版本的存储, 旧版本的私密信息也可以被查找。Vault中对于动态生成的密码以及认证token等,有一个租期(lease)的概念,即TTL(time to live),过期的信息会被更新或回收,也可以在任意时刻使用Vault revoke命令来手动回收。但是存储在KV引擎中的私密信息永远不会自动过期,即使设置了TTL,也只是给用户一个参考。

利用开发模式启动的Vault,默认是v2版本,非开发模式,默认是v1,可以通过CLI命令来设置启用哪个版本:

启用kv引擎时指定v2版本:

$ vault secrets enable -version=2 kv 或者 $ vault secrets enable kv-v2

如果当前kv secret engine的版本是v1,那么可以使用命令

$vault kv enable-versioning secret/ 去升级到v2, [secret/]是我们要升级的kv引擎的路径。

下面再介绍一些使用kv加密引擎的常用CLI命令:

1. 查看当前Vault所启用的加密引擎:

$ vault secrets list  


current enabled secrets engines

或者$ vault secrets list  -detaild  可以查看详细信息,比如租期设置,版本等。

detail of all enabled secrets engines

$ vault kv list secret  列出kv引擎secret下的所有路径

2. 启用kv加密引擎

$ vault secrets enable kv 相当于 $ vault secrets enable -path=kv kv

即在路径kv下启用一个kv类型的加密引擎,还可以加-max-lease-ttl,-plugin-name,-description等参数,更多参数详细信息可以使用vault secrets enable path -help来查看。如果设置成功会出现 Success! Enabled the kv secrets engine at: kv/

3. 写入私密信息

$ vault kv put kv/personal name=jiayin, age=24 

向[kv/personal]路径下写入了两个键值对信息。

$ vault kv patch kv/personal hobby=music  和put不同,patch命令会同时保留之前的信息和新写入的信息。

write secrets successfully

再次向相同路径写入会生成新版本的私密信息,version号码也会随着递增。

如果是写入文件,则在value前加上@符号,如

$ vault kv put kv-v1/prod/cert/mysql cert=@cert.pem 或者$ vault kv put secret/foo @data.json

4. 查找某一版本的私密信息

$ vault kv get -version=3 kv/personal

如果没有版本参数,默认检索出最新版本的信息。

5. 查看某路径下的元数据

$ vault kv metadata get kv/personal  【kv/personal 】是想要查看的存储路径

会列出当前kv加密引擎以及每一个版本的创建时间。

6. 设置kv-v2保存的信息最大版本数

$ vault write kv/config max_versions=3 【kv】是要修改的kv引擎路径,向其下的config路径写入 max_versions=3

7. 设置某kv引擎某路径的最大版本数

$ vault kv metadata put -max-versions=4 kv/personal 【kv/personal】是具体的存储路径,可以用这个命令修改具体存储路径的配置而不是整个kv引擎的配置。

8. 读取某kv引擎下的配置信息

$ vault read kv/config

9.删除某些版本的私密信息

$ vault kv delete -versions="4,5" kv/personal 删除第4,5版本的数据

10. 恢复误删了的某些版本的信息

$ vault kv undelete -versions="4,5" kv/personal

11. 永久的删除某些版本的私密信息

$ vault kv destroy -versions=4 kv/personal 永久的删除使用destory命令

12. 删除某路劲下的所有私密信息

$ vault kv metadata delete kv/personal 

13. 配置私密信息的自动删除

$ vault kv metadata put -delete-version-after=40s secret/test

使用delete-version-after参数可以配置自动删除私密信息的时间,注意在设置此参数之前存入的私密信息是不会在指定时间后删除的,设置之后存入的信息才会应用此参数。

14. 配置CAS(check and set)

$ vault write kv/config cas-required=true 即在整个kv引擎下设置CAS

$ vault kv metadata put -cas-required=true kv/partner  只在【kv/partner】路径下设置CAS

cas-required configure successfully

 Check-And-Set 操作是Vault为防止多人协作导致的数据被覆盖问题提供的一个解决方案,当你不想要覆盖某路径下存在的信息,可以传入-cas=0,这样当某路径下已经存在信息的时候,你的写入操作会失败,错误码为400,error message: * check-and-set parameter did not match the current version。

当你非常确定想要覆盖某路径下的私密信息,即传入-cas=[verison],version为私密信息版本号。

如果不启用CAS操作,那么默认所有的写入操作都会被允许。

15. 回滚到某个指定版本的私密信息

$ vault kv rollback -version=2 kv/creds

将【kv/creds】路径下的私密信息的版本2恢复到当前最新版本,如果当前最新版本号是5,那么回滚之后的最新版本号将变成6。

Tips: 如果不想让自己输入的私密信息出现在shell history里,可以键入“-”然后enter,会另起一行写入密码,用Ctrl+d结束,或者将私密信息存入文件中。如果不想让跟Vault相关的所有命令出现在history里,可以执行

$export HISTIGNORE="&:vault*"

Vault提供REST API和CLI两种方式与之进行交互,并且Vaule的一切都是基于路径的,大部分Vault的CLI命令都会被转换成HTTP请求,而有些操作只能通过HTTP请求去完成。

关于KV引擎常用的HTTP方法有:

1. GET 读取某路径下的信息,包括配置信息和私密信息

eg. $ curl  --header "X-Vault-Token: ..."  https://127.0.0.1:8200/v1/secret/data/my-secret

2. POST 创建、更新或删除私密信息或配置

eg.$ curl --header "X-Vault-Token: ..."  --request POST --data @payload.json https://127.0.0.1:8200/v1/secret/data/my-secret

eg.$ curl  --header "X-Vault-Token: ..."  --request POST  --data @payload.json https://127.0.0.1:8200/v1/secret/delete/my-secret

3. LIST 查看某路径下的信息,会列出该路径下的key

eg.$ curl --header "X-Vault-Token: ..." --request LIST https://127.0.0.1:8200/v1/secret/metadata/my-secret

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容