
大家好呀!
最近在使用建木CI部署项目的过程中,集成了Vault,感觉还挺有意思的,这里给大家分享一下我集成的过程吧!
首先贴上建木CI和Vault的介绍,需要了解更多的小伙伴戳链接:建木CI、Vault
建木CI以触发器、流程编排、任务分发等功能为平台核心,可以应用在各类使用场景下,包括但不限于,CI/CD、DevOps、自动化运维、多业务系统集成等场景。
Vault 是一个基于身份的机密和加密管理系统,可以帮你管理一些私密的信息,比如 API 密钥,密码,证书等等。Vault 提供受身份验证和授权方法限制的加密服务,提供统一的接口,可以安全地存储、管理和访问所有隐私信息,同时提供严格的访问控制和记录详细的审计日志。
建木CI从v2.0.0
版本开始集成了Vault,不得不说,使用Vault管理密钥之后方便多了,之前清理过一次建木CI环境,却忘记保存密钥,完蛋😣,最后只能一个个的重新添加,真的是一点也不辛苦呢
使用Vault管理密钥之后,可以对密钥进行统一管理,密钥安全性也大为增加,nice!
接下来,我们就来集成一下Vault吧
1.环境准备
首先,你需要安装以下环境:
Docker 19.30以上
Docker-Compose 1.29.2以上
建木CI v2.0.0以上,安装链接:https://docs.jianmu.dev/guide/quick-start.html
Git
2.部署Vault
建木官方提供了一份基于docker-compose启动Vault的实例,可以更方便地启动Vault,推荐使用👍
使用docker-compose的方式来进行部署,关于docker-compose的详细使用说明可以参考docker官方文档:https://docs.docker.com/compose/
1.通过建木官方提供的实例启动Vault
- 获取建木官方提供的实例
1 | git clone https://gitee.com/jianmu-dev/jianmu-deploy.git |
- 修改
volumes/cert/cert.conf
中的CN
和IP.1
为本机IP
1 | vim volumes/cert/cert.conf |
启动Vault
1
docker-compose -f docker-compose-vault.yml up -d
如果443端口被占用,可以修改docker-compose-vault.yml,映射到其他端口
反正我的443端口已经被占用了😅,这里就用9000吧
2.生成自签名证书
注意: 千万别写错了啊,否则可能导致Chrome等浏览器无法打开Vault的UI界面
在volumes/cert/
目录下,使用openssl生成证书和Key,该命令会生成vault.key、vault.crt两个文件
1 | openssl req -nodes -x509 -days 365 -keyout vault.key -out vault.crt -config cert.conf |
3.初始化Vault,配置Cert认证
- 进入容器
1 | docker exec -it 容器id sh |
- 设置环境变量
1 | export VAULT_SKIP_VERIFY=true |
- 初始化Vault
1 | vault operator init |
示例输出
1 | Unseal Key 1: 4jYbl2CBIv6SpkKj6Hos9iD32k5RfGkLzlosrrq/JgOm |
保存输出的Unseal Key
和Root Token
备用
解封Vault, 输入上面保存的Unseal Key
,默认情况下需要输入3个不同的Key
1 | # 这个命令需要运行三次,输入三个不同的Key |
输入三个key之后,当Sealed
变成了false
,即解封成功
解封后,使用上面的Root Token登录
1 | vault login <Initial_Root_Token> |
登录成功后,开启cert认证模式
1 | # 开启cert认证模式 |
再来验证一下是否成功开启
1 | vault login -method=cert -client-cert=/vault/cert/vault.crt -client-key=/vault/cert/vault.key name=jianmu |
如果正确返回以下信息,恭喜你,Vault部署成功啦
1 | === Data === |
3.建木CI集成Vault
1.准备
建木CI 已成功部署
Vault 已成功部署
2.生成证书
在Vault仓库的根目录,进入
volumes/cert/
目录下,将crt证书转换为P12证书,这里需要设置密码1
2cd volumes/cert
openssl pkcs12 -export -in vault.crt -inkey vault.key -out jianmu.p12再将P12证书转换为Java所需的JKS证书,这里需要输入上面设置的密码,并设置新的密码(千万别搞忘了,下面建木CI配置时会用到该密码)
注意:该命令需要Java环境支持。如果你像我一样没有Java运行环境,也可以将jianmu.p12文件移到有Java环境的计算机上,执行下面命令,再将生成的jianmu.jks文件传回来
1
keytool -importkeystore -keyalg EC -srckeystore jianmu.p12 -destkeystore jianmu.jks -srcstoretype pkcs12
3.建木CI配置Vault
- 编辑建木CI的docker-compose.yml配置文件,修改credential配置
1 | environment: |
注意:jianmu.jks 文件可以放在 docker-compose.yml 文件同级目录下,此时挂载路径为:./jianmu.jks
- 最后一步,启动/重启建木CI
1 | # 直接启动 |
启动成功以后,建木CI终于成功集成Vault了,接下来快去尝试一下用Vault管理的密钥吧!