SpringCloud搭建微服务之Vault密钥管理

1. 概述

Vault是一款管理密钥和保护敏感数据的组件,用于保护、存储和严格控制对令牌、密码、证书和加密密钥的访问,可以使用UI客户端、CLI和HTTP API访问密钥和其他敏感数据。更多详细介绍,可以参阅vault官网

2. Vault下载与安装

本文以windows安装为例

2.1. Vault下载

浏览器输入官网地址https://www.vaultproject.io/,进入首页,点击Download进入下载页面
vault官网首页
目前最新版本是1.12.2
vault下载界面
选择适合的操作系统,386对应32位系统,AMD64对应64位系统,根据需要下载对应版本,下载完成的文件是一个压缩包,直接解压即可,解压后是一个名为vault.exe的文件

2.2. 安装

将vault.exe移动到指定目录,在vault.exe目录下打开cmd命令窗口,或者将vault.exe目录配置在环境变量中,在cmd命令窗口输入vault可以查看vault相关命令
vault命令

3. 服务启动和参数配置

vault有多个启动模式,使用命令vault server -help可以查看详细的介绍
vault server
开发环境可以使用dev模式启动,dev模式启动下数据存储在内存中
dev模式
命令如下:vault server -dev
dev模式启动
在最下面有几个重要的参数需要设置
参数
新打开一个cmd窗口,设置vault访问地址,输入命令set VAULT_ADDR=http://127.0.0.1:8200
set addr
保存unseal key,输入命令 echo “Unseak Key” > unseal.key
echo unseal
设置vault初始token,输入命令set VAULT_TOKEN=hvs.RGvfQb2UhGDd8WqB2350Yp2Y
set token
如果需要设置namesapce,输入命令set VAULT_NAMESPACE=boot-vault-nprd
set namespace
输入命令vault status,可以查看vault服务运行情况
vault status

4. 操作密钥

可以在vault管理页面添加密钥,也可以在CLI客户端或者使用HTTP API添加密钥,在dev模式下,默认使用kv安全引擎,使用命令vault kv -help可以查看更多操作
vault kv

4.1. CLI操作密钥

Write secret
使用命令vault kv put可以写入secret,例如:
vault put
同时设置多个kv值时,可以使用如下命令
vault put kvs
Read secret
使用vault kv get命令可以读取密钥
read secret
如果需要读取指定密钥,可以使用下面命令
read zd secret
Delete secret
使用vault kv delete命令可以删除密钥
delete secret
再次读取密钥,会提示密钥已被删除
agen read secret
恢复已删除的secret,可以使用如下命令
undelete secret
再次查询恢复的secret
get undelete secret

5. 管理端配置密钥

在浏览器地址栏输入http://127.0.0.1:8200,输入启动时的token
vault登录页
登录后进入首页
首页

5.1. Secrets配置

vault在dev模式启动下默认的kv Secrets Engines是secret,为了区分项目,可以自己新建Secret,点击Enable new engine
Enable new engine
选择KV模式,点击Next
enable secret
输入Path名称,此参数为项目集成中kv.backend的值,第二处配置是最多显示多少个版本的数据,由于每次修改都是新建一个版本,配置此参数后,默认只显示最近的版本数
Enable Engine
点击Create secret
create secret
输入Path for secret,此参数为项目集成中kv.application-name的值,Secret data就是具体的密钥配置信息
create secret detail

5.2. Policy配置

policy用于管理vault中控制用户可以访问的内容,比如读写权限,选择Policies,点击Create ACL policy创建新的policy,这里可以创建管理员policy和开发policy
policy
输入name和Policy后,点击Create policy
创建policy
同样的方式创建developer策略
developer policy

5.3. Access配置

Access中可以配置权限方式
access配置
点击Enable new method创建新的认证方式,由于token认证方式中token会过期,可以创建appRole方式
approle
Path默认approle,其他选项可以默认,直接点击Enable Method即可
Enable Method
配置approle参数
配置approle
选择Entities,创建entity实体
entity
name可以使用默认名称,选择Policies
create entity
在Entities页面选择Aliases添加alias
Aliases
输入用户名称,选择认证方式
create alias

6. 获取approle参数

在使用approle认证时需要roleId和secretId,使用命令vault list auth/approle/role/可以查看存在哪些role
role list
使用命令vault read auth/approle/role/my-role/role-id获取approle的roleId
read roleId
使用命令vault write -f auth/approle/role/my-role/secret-id获取approle的secretId
write secretId

7. 微服务集成vault

新建一个springboot项目,版本如下:
JDK:11
SpringBoot:2.7.8
SpringCloud:2021.0.5

7.1. 引入核心依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-vault-config</artifactId>
</dependency>

由于springcloud vault3.0和springboot2.4之后默认不再先读取bootstrap.yml配置,所以需要配置spring.cloud.bootstrap.enabled=true或者引入spring-cloud-starter-bootstrap依赖

7.2. yml配置文件

示例中使用token方式验证,由于token会过期,实际开发中会使用approle方式验证,新建bootstrap.yml文件,配置如下:

spring:
  application:
    name: cloud-vault
  cloud:
    vault:
      host: localhost
      port: 8200
      scheme: http
      fail-fast: true
      authentication: token
      token: xxx.xxxxxxxxxxxxx
      #authentication: APPROLE
      #app-role:
        #role-id: xxxxxxxxxxxxxxx
        #secret-id: xxxxxxxxxxxxx
      read-timeout: 15000
      connection-timeout: 5000
      config:
        spring.config.import: vault://
      kv:
        enabled: true
        backend: cloud-vault
        profile-separator: /
        application-name: cloud-vault-qa

application.yml配置如下:

server:
  port: 8099
spring:
  datasource:
    password: ${vault.mysql.password}

7.3. 验证

新建一个类获取application配置中的spring.datasource.password参数配置,再新建一个单元测试类引入,代码如下:

@SpringBootTest(classes = CloudVaultApplication.class)
class CloudVaultApplicationTests {

    @Autowired
    private VaultService vaultService;

    @Test
    void contextLoads() {
        final String mysqlPassword = vaultService.getMysqlPassword();
        System.out.println("mysql password is : " + mysqlPassword);
    }

}

运行单元测试
Test

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Cloud是一个基于Spring Boot实现的微服务框架。它提供了一系列开箱即用的工具和组件,帮助开发者快速构建和管理微服务应用。下面是Spring Cloud框架的详细介绍: 1. 服务发现 Spring Cloud提供了服务发现组件,可以自动注册和发现服务实例。它使用了Consul、Eureka、Zookeeper等注册中心,使得微服务之间的通信更加方便。 2. 负载均衡 Spring Cloud提供了负载均衡组件,可以自动将请求分配到多个实例上,从而实现负载均衡。它使用了Ribbon、LoadBalancer等组件,可以很好地处理高并发的请求。 3. 配置中心 Spring Cloud提供了配置中心组件,可以集中管理微服务的配置信息。它使用了Config Server、Vault等组件,可以实现动态的配置更新和管理。 4. 断路器 Spring Cloud提供了断路器组件,可以在服务发生故障时自动切换到备用服务上。它使用了Hystrix等组件,可以实现高可用性的服务架构。 5. API网关 Spring Cloud提供了API网关组件,可以将多个微服务聚合在一起,对外提供一个统一的接口。它使用了Zuul、Spring Cloud Gateway等组件,可以实现请求路由、过滤、转发等功能。 6. 分布式追踪 Spring Cloud提供了分布式追踪组件,可以跟踪微服务之间的调用链路和传递的数据。它使用了Zipkin、Sleuth等组件,可以实现请求的追踪和监控。 7. 消息总线 Spring Cloud提供了消息总线组件,可以实现微服务之间的消息传递和通信。它使用了Bus、Kafka等组件,可以实现消息的广播和订阅。 8. 安全管理 Spring Cloud提供了安全管理组件,可以实现微服务之间的安全通信和身份认证。它使用了OAuth2、Spring Security等组件,可以实现用户认证、授权和访问控制。 总之,Spring Cloud是一个非常强大的微服务框架,它提供了一系列开箱即用的组件和工具,可以帮助开发者快速构建和管理微服务应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值