如何在建木CI中使用Vault管理密钥

大家好呀!

最近在使用建木CI部署项目的过程中,集成了Vault,感觉还挺有意思的,这里给大家分享一下我集成的过程吧!

首先贴上建木CI和Vault的介绍,需要了解更多的小伙伴戳链接:

建木CI :https://jianmu.dev/
Vault:https://www.vaultproject.io/

  • 建木CI以触发器、流程编排、任务分发等功能为平台核心,可以应用在各类使用场景下,包括但不限于,CI/CD、DevOps、自动化运维、多业务系统集成等场景。
  • Vault 是一个基于身份的机密和加密管理系统,可以帮你管理一些私密的信息,比如 API 密钥,密码,证书等等。Vault 提供受身份验证和授权方法限制的加密服务,提供统一的接口,可以安全地存储、管理和访问所有隐私信息,同时提供严格的访问控制和记录详细的审计日志。

建木CI从v2.0.0版本开始集成了Vault,不得不说,使用Vault管理密钥之后方便多了,之前清理过一次建木CI环境,却忘记保存密钥,完蛋😣,最后只能一个个的重新添加,真的是一点也不辛苦呢

no_hard.gif

使用Vault管理密钥之后,可以对密钥进行统一管理,密钥安全性也大为增加,nice!

接下来,我们就来集成一下Vault吧

start.gif

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
  • 获取建木官方提供的实例
git clone https://gitee.com/jianmu-dev/jianmu-deploy.git

图片

  • 修改volumes/cert/cert.conf中的CNIP.1为本机IP
vim volumes/cert/cert.conf

图片

  • 启动Vault

    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两个文件

openssl req -nodes -x509 -days 365 -keyout vault.key -out vault.crt -config cert.conf
3.初始化Vault,配置Cert认证
  • 进入容器
docker exec -it 容器id sh
  • 设置环境变量
export VAULT_SKIP_VERIFY=true
export VAULT_ADDR="https://172.16.50.43:9000"
  • 初始化Vault
vault operator init

示例输出

Unseal Key 1: 4jYbl2CBIv6SpkKj6Hos9iD32k5RfGkLzlosrrq/JgOm
Unseal Key 2: B05G1DRtfYckFV5BbdBvXq0wkK5HFqB9g2jcDmNfTQiS
Unseal Key 3: Arig0N9rN9ezkTRo7qTB7gsIZDaonOcc53EHo83F5chA
Unseal Key 4: 0cZE0C/gEk3YHaKjIWxhyyfs8REhqkRW/CSXTnmTilv+
Unseal Key 5: fYhZOseRgzxmJCmIqUdxEm9C3jB5Q27AowER9w4FC2Ck

Initial Root Token: s.KkNJYWF5g0pomcCLEmDdOVCW

Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests.

Vault does not store the generated master key. Without at least 3 key to
reconstruct the master key, Vault will remain permanently sealed!

It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information.

保存输出的Unseal KeyRoot Token备用

解封Vault, 输入上面保存的Unseal Key,默认情况下需要输入3个不同的Key

# 这个命令需要运行三次,输入三个不同的Key
vault operator unseal

输入三个key之后,当Sealed变成了false,即解封成功

图片

解封后,使用上面的Root Token登录

vault login <Initial_Root_Token>

登录成功后,开启cert认证模式

# 开启cert认证模式
vault auth enable cert
# 开启名为jianmu的v1版本的密钥引擎
vault secrets enable -path="jianmu" -version=1 kv
# 写入证书
vault write auth/cert/certs/jianmu policies=jianmu certificate=@/vault/cert/vault.crt ttl=1h
# 写入policy
vault policy write jianmu /vault/config/jianmu-policy.hcl

再来验证一下是否成功开启

vault login -method=cert -client-cert=/vault/cert/vault.crt -client-key=/vault/cert/vault.key name=jianmu
# 写入数据
vault kv put jianmu/test bar=baz
# 读取数据
vault kv get -version=1 jianmu/test

如果正确返回以下信息,恭喜你,Vault部署成功啦

=== Data ===
Key   Value
---   -----
bar   baz

3.建木CI集成Vault

1.准备
  • 建木CI 已成功部署
  • Vault 已成功部署
2.生成证书
  • 在Vault仓库的根目录,进入volumes/cert/目录下,将crt证书转换为P12证书,这里需要设置密码

    cd 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文件传回来

    keytool -importkeystore -keyalg EC -srckeystore jianmu.p12 -destkeystore jianmu.jks -srcstoretype pkcs12
    
3.建木CI配置Vault
  • 编辑建木CI的docker-compose.yml配置文件,修改credential配置
environment:
# 使用Vault管理密钥
CREDENTIAL_TYPE: vault
# 认证方式为cert
CREDENTIAL_VAULT_AUTHENTICATION: cert
# jianmu.jks文件的路径
CREDENTIAL_VAULT_SSL_KEY-STORE: file:/jianmu.jks
# 转换jks证书时设置的密码
CREDENTIAL_VAULT_SSL_KEY-STORE-PASSWORD: jianmudev
CREDENTIAL_VAULT_SSL_TRUST-STORE: file:/jianmu.jks
CREDENTIAL_VAULT_SSL_TRUST-STORE-PASSWORD: jianmudev
# Vault服务的地址和端口
CREDENTIAL_VAULT_URL: https://172.16.50.43:9000
# 建木CI在Vault中使用的密钥引擎
CREDENTIAL_VAULT_VAULT-ENGINE-NAME: jianmu
volumes:
# 将jianmu.jks文件挂载到容器内
- ./jianmu.jks:/jianmu.jks

注意: jianmu.jks 文件可以放在 docker-compose.yml 文件同级目录下,此时挂载路径为:./jianmu.jks

  • 最后一步,启动/重启建木CI
# 直接启动
docker-compose up -d

# 只重启ci-server,不重启mysql和web
docker-compose stop ci-server
docker-compose rm -vf ci-server
docker-compose up -d ci-server

启动成功以后,建木CI终于成功集成Vault了,接下来快去尝试一下用Vault管理的密钥吧!

no_hair.jpeg

本文为OSCHINA作者【metting】的原创投稿文章

原文链接:https://my.oschina.net/u/4554453/blog/5359135

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值