vault是一个server,其他地址可以通过api,cli或者envconsole访问这个server以获取加密后的解密的值
整个架构:secret存于secret angine内(可以是k/v,aws,gcp等),在vault内是一个secret的路径,role保存了该role可以访问哪个secret以及都有啥权限,使用者首先要与vault授信,然后拿到roleid和secretid,通过俩id去到对应的secret路径下请求token,拿着这个token访问对应的服务(aws的某个服务或者某个db等等),那么ladps的作用就是类似于jenkins的那个预授权,拿着ladps的token就可以获取到对应的roleid和secretid
终极目的是拿到一个token。拿到这个token后就可以对应的secret内取值,这些值是用户储存进去的。
拿到token的方式有如下几种:
1.拿到role的id和secretid,拿着俩id和对应的secret请求,得到一个token;
2.直接拿着token,在envconsul里配好,直接读取secret路径并把读到的值(秘密)变成变量
policy可以限定任何路径的权限,包括role和secret engine
vault原理:本身是一个server,加密解密可以由这个server处理,也可以由其他的引擎处理(比如aws,gcp或者数据库等)。
secret engine:存储,处理加密解密的引擎,有很多种,vault自带一种叫kv(key/value)。
secret engine有很多类型,每个类型又可以创建无限多的path(在server上会生成这个path(相对路径)),这个path是唯一的,当read或get时针对path即可取到对应的值
path很重要
步骤:
1.安装:下载,解压,直接就是一个二进制,配置到环境变量中即可执行
2.启动server: vault server -dev,启动后输出一大堆的信息,其中有token。默认监听8200端口,在访问机上可以设置vault_add为server的ip:port。
3.server上添加engine,自带的默认是kv类型的,还可以添加aws类型等其他类型。vault secrets enable -path xxx/ aws(表示xxx/这个路径绑定到aws类型的secret engine),当有指定path的请求进来时就会以aws的类型进行处理并返回结果.这个xxx可以是单个目录,也可以是连续的目录
4.写数据:两种方式:a.vault xx put xxx/yyy data(xx是类型,比如aws,kv等,xxx是之前创建的secret engine,yyy是啥东东? data是数据,比如kv类型的就是key=value格式,aws的就是aws的格式)。b.也可以使用write,vault write xxx/yyy data,此时不需要指定类型。
5.读取:两种,a.vault xx get xxx/yyy (获取yyy下的所有数据)b.vault read xxx/yyy。直接读取
单独部署一台可以外部访问的vault的步骤(实际搭建成功):https://learn.hashicorp.com/vault/getting-started/deploy
坑:
1.当使用vault server -dev创建时,默认是测试模式的,通过netstat -anp即可查看到8200端口对应的local address是127.0.0.1,意味着这个地址只能内部访问,当其他server访问时,显示connection refused。(各种关防火墙,无济于事)
2.创建时使用的hcl配置文件中server的地址要使用0.0.0.0,而不要使用127.0.0.1.否则不通。切记
1.依赖:consul。安装同vault
2.按照步骤,唯一要注意的是hcl里的127.0.0.1要改为0.0.0.0,否则外部不能访问,这是基本的local address知识。
3.另起一个终端,f非ip登录后使用key携带的token授权并获取data。<