问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

使用Vault

发布网友 发布时间:2022-12-22 09:25

我来回答

1个回答

热心网友 时间:2024-12-11 18:27

以前曾经介绍过关于 KMS的用法 ,其中,提到了它的优点和用处,我们使用的场景有如下几点:

如果脱离AWS,选择好像还真是不太多,Harshicorp的 Vault 是我仅知道的一个, RatticDB 算半个吧。

Vault提供了对token,密码,证书,API key等的安全存储(key/value)和控制,。它能处理key的续租、撤销、审计等功能。通过API访问可以获取到加密保存的密码、ssh key、X.509的certs等。它的特性包括:

因为使用Vault的目的是为了

Vault存储[backend( https://www.vaultproject.io/docs/secrets/index.html)] 可以是

我在用Docker启动Vault服务的时候使用的Proction模式,为了简单使用了磁盘作为存储,但是为了persist,所以将valut的文件存在了docker volume上面。
docker-compose 文件如下:

创建volume,启动vault服务器,配置通过环境变量 VAULT_LOCAL_CONFIG 传入。

从本地的 8200 端口应该就可以访问到了:

下面的API请求可以对Vault进行初始化,两个参数的意思将master key分成几份以及还原,这里就用1吧。

返回结果:

第一个是master key的public key,第二个是unseal key,最后一个是root token。unseal vault之后才能验证进行具体的操作。

结果:

为了安全起见,我们可以用root token创建出有限权限的新token,来继续后面的操作。假设这个token可以读写的路径为 secret/* 。在这个之前我们先创建访问这个路径的policy:

对应的创建 user-policy :

然后我们分别创建两个token,admin token和 user token:

这样就有了对于 secrets/* 路径下进行读写的两个 token,可以尝试去admin的token去添加新的键值对:

这样就有了基本的权限管理。假设vault服务器和应用服务器或者CI的服务器部署在同一私有网络中,应用服务器和CI slave是不可以ssh的,那么通过应用服务器或者CI在启动的时候通过HTTP请求,利用读权限的 user-token 就可以拿到API-TOKEN,同时没有暴露给外部。

AWS的EC2 instance上可以绑定 instanceProfile , instanceProfile对应的是IAM的role,这个role可以设置对AWS资源的访问权限,比如对S3某个bucket的写权限,或者对Dynamodb的写权限等。Vault提供的AppRoles的功能比 instanceProfile 要差很多,不过确实可以将机器和一定权限的Role绑定起来,控制访问的范围。

允许使用approle的验证方式同时创建一个给CI slave使用的role:

下面的API请求可以拿到 role-id ,以及根据 role-id 生成 secret-id ,利用它们可以登录获得从vault读取数据的权限:

使用 secret_id 和 role_id 联合登录,拿到新的token:

然后利用 client_token 去读取前面写入到vault中的search api token:

AWS的EC2 instance的服务器,在启动时,可以绑定一对ssh keypair,以方便用户使用缺省的 ec2-user ssh到服务器上。从最佳实践的角度来说,应该把服务器当做immutable的设施,不允许ssh。但是现实比较嘲讽,这样的需求仍然存在,那么我们可以换种方式,尽量做好ssh key的管理。
比如,对于每个新启动的服务器,动态的生成一对ssh keypair,只应用在这台服务器上,服务器销毁后,吊销key pair。
Vault提供了ssh keypair的管理功能,利用这个功能我们可以对key的生命周期的管理。它支持两种方式:

要让vault发放keypair, 需要先注册一个private key,这个key必须有服务器的管理权限.之后,你需要创建一个role,包括一些限定条件,如admin用户的名字,缺省用户,目标服务器的IP地址应该匹配的CIDR地址,具体过程如下:

整个的过程大概是这样,vault利用注册的private key登陆到目标服务器上,然后将新生成的key pair中的public key写入到目标服务器的 authorized_keys 文件中。在你想登陆到服务器上的时候,用对应的client token验证,获取private key,ssh登陆。key有过期时间,过期之后就被revoke了。

我觉得全站https困难之一就在于PKI的管理,今年出现过几次certficate过期导致的产品环境的问题,还好及时的切换到了AWS Certificate Manager,免费而且到期自动续租,基本上不用担心管理的问题了。而我们原有的内部PKI管理要稍微麻烦些,需要用自己业务线的LOB Intermediate CA去签发新的certs,运行一些自动化的脚本,还得从RatticDB里面找到对应的private key。
但是如果基础设施不是基于AWS,好像就没有很合适的工具了,只能自己维护PKI,Vault也提供了PKI的管理,可以在这方面提供帮助。考虑环境的一致性,开发、测试以及staging也需要certificate,我觉得这个功能是有意义的。

Vault会安全的保存Root CA 的private key。 可以通过http请求拿到ca的pem文件。

需要给Vault配置访问CA和CRL(certificate revocation list)的地址。

创建intermediate CA.

把这个csr内容存在 example_lob.csr 文件中,请求root ca签发这个intermediate ca。

得到Root CA的签发过的intermediate CA certs后,保存为文件,导入。最后就是要设置CA/CRL,和上面相同。

在开始给server签发certs前,需要创建role,之后就可以签发了。

拿到private key和crt就可以放在服务器上测试了,感觉用这个 grunt-connect-proxy 测试起来可能会快点。

Vault还有一个我觉得很好的特性是可以将LDAP作为auth的backend,感觉维护的压力又小了很多:) 剩下的特性大家可以自己尝试,我们也正在考虑把替换RatticDB保存一些private key之类的credential,下次的security meetup上面我可以展示下spike的成果……。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求电脑玩安卓游戏的方法。步骤。以及所有的文件~谢谢 。有的联系我~ 我在电脑管家软件管理下的鹰击长空2都是解压包 澳洲留学读研申请攻略 澳洲留学申请时间是什么时候 去澳大利亚上大学需要什么手续 澳洲留学申请流程时间如何? 中南财经政法大学保险精算专业介绍 黄福记小吃梅干菜扣肉饼怎么样 如何开一家梅干菜扣肉饼店,成本要多少 在照明行业LED配光曲线图怎么看 过膝半身裙怎么搭配衣服好看 二年级下册4古诗二首近义词 山行古诗反义词近义词有哪些? 寒山摄影什么意思 成语 寒山片石 什么意思? 针织连衣裙怎么搭配如何穿出气质 寒山片石的成语解释 跑400公里多少个马拉松 一个马拉松赛跑是多少 一个马拉松有多少个100米 求 魔兽世界 五人基友名 参考资料 - 300字写景美文摘抄 魔兽世界,五个基友想一起在联盟建小号,求给力的名... 有什么好听的魔兽基友名字 《英雄联盟》费德提克重做,普攻、大招效果曝光 用银行卡买余额宝怎麼操作 土耳其买余额必须先花五美元吗 大灰狼老婆是什么狼 喜羊羊与大灰狼里,灰太狼的家族人都叫什么名字? 新小红帽 Ansible 部署 Hadoop Cluster 文化的传承与保护如何体现历史五大素养 邳州银杏甲天下app下载人数 历时空是什么意思 银杏视频显示没有网怎么办 js for循环输出的结果[object HTMLSelectElement],这个怎么搞_百度知 ... 签转让合同需要律师吗 房贷70万多吗 房贷60万能嫁嘛 刘伯承元帅曾指挥过的高级将领都有谁? 宁波新东方烹饪学校怎么样值得去吗 宁波新东方烹饪学校怎么样 实习律师在实习期间一执业律师身份提供法律服务违反了哪些规定 有但添加好友时为什么说用户不存在? 微信加好友输入对方,手机号,QQ号都显示用户不存在,怎么回事? 有但添加好友时为什么说用户不存在 光盘安装系统,提示安装安装失败说请确保安装文件可用是不是,不太欠容... 码加好友显示不存在是怎么回事 一款宠物包吾什么 小小首富可以卖宠物吗