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

news2024/9/22 9:49:04

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python学习笔记】6. Python3 基本数据类型(下)——列表、元组、集合、字典、数据类型转换

前言 本文介绍Python3基本数据类型——列表、元组、集合、字典、数据类型转换。 List&#xff08;列表&#xff09; List&#xff08;列表&#xff09; 是 Python 中使用最频繁的数据类型。 列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同&#xff0…

MySQL存储结构

数据结构 数据结构可视化&#xff1a;https://www.cs.usfca.edu/~galles/visualization/ 树 二叉树缺点&#xff1a; 单边节点过多时无法提高效率 红黑树&#xff1a; 具有平衡功能的二叉树&#xff0c;解决了单边节点过多导致的效率无法提高的问题&#xff0c;缺点是平衡算法…

移动端 自适应布局方案

文章目录DPRrem布局实现机理优点缺点相关技术方案viewport 布局优点缺点相关技术方案媒体查询等比缩放原理DPR DPR 设备物理像素 / CSS像素 DPR 2 为例&#xff0c;把 4&#xff08;2x2&#xff09;个物理像素当一个 CSS 像素使用 rem布局 rem 就是相对于根元素 html 的…

【正点原子FPGA连载】第二十章Linux图形化配置及其原理 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十章Linux图…

Python获取信用企业的数据

文章目录前言一、需求二、分析三、测试运行前言 本系列文章来源于真实的需求本系列文章仅供学习参考本系列文章你来提我来做 one:Leave a message at the end of the article two:Get wechat contact information 一、需求 需求 URL&#xff1a;https://szxt.zjamr.zj.gov.cn…

如何保持线上安全:你们的个人网络安全指南

在互联网上保持安全的最佳做法。 我们之前写过关于保护你们的加密资产的文章——你们可以在此处查看我们的加密操作安全指南。现在是时候准备一组更通用的提示来帮助你们保持线上安全。我们知道你们可能大部分的购物都是在网上进行的&#xff0c;我们真的不希望你们被黑客攻击。…

HTB_Funnel_ssh隧道转发

文章目录信息收集hydra ssh 暴破ssh 隧道转发 postgresql 流量postgresql 使用动态端口转发信息收集 nmap -sC -sV 10.129.143.249 账号密码 Anonymous:ftp 发现两个文件&#xff0c;下载 默认密码 funnel123#!# 一封邮件 邮箱名可能是用户名 hydra ssh 暴破 hydra -L userna…

Redis_主从复制

一、介绍主机数据更新后根据配置和策略&#xff0c;自动同步到备机的master/slaver机制&#xff0c;Master以写为主&#xff0c;Slave以读为主。二、作用读写分离&#xff0c;性能拓展容灾快速恢复&#xff08;一主多从&#xff09;三、搭建配置1、创建/myredis文件夹2、复制Re…

一篇五分生信临床模型预测文章代码复现——FIgure 9.列线图构建,ROC分析,DCA分析 (二)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

【GPLT 二阶题目集】L2-041 插松枝

人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上&#xff0c;做成大大小小的松枝。他们的工作流程&#xff08;并不&#xff09;是这样的&#xff1a; --->每人手边有一只小盒子&#xff0c;初始状态为空。 --->每人面前有用不完的松枝干和一个推送器&#xf…

[NSSRound#7 Team]Web学习

系列文章目录 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录系列文章目录一、ecRCE二、Shadowflag三、[NSSRound#7 Team]新的博客四、[NSSRound#7 Team]0o0提示&#xff1a;以下是本篇文章正文内容&#xff0c;下…

【异常】发送失败,此请求可能存在风险,已被微信拦截

一、背景说明 今天上线了新年红包的功能&#xff0c;但是部分用户提示了如下的异常&#xff0c;没有明显的异常提示&#xff0c;就是在查询ELK时&#xff0c;看了如下的错误提示&#xff0c;错误截图如图 提示“发送失败&#xff0c;此请求可能存在风险&#xff0c;已被微信拦…

【Redis】hmdp点赞、排行榜、分页功能的实现

【Redis】hmdp点赞、排行榜、分页功能的实现 文章目录【Redis】hmdp点赞、排行榜、分页功能的实现1.点赞功能实现1.1 需求1.2 实现步骤1.3 思路分析1.4 代码实现1.5 逻辑解析2. 排行榜功能实现2.1 需求2.2 实现步骤2.3 思路分析2.4 代码实现2.5 逻辑解析3. 分页功能实现3.1 需求…

算法之美~贪心算法

如何理解贪心算法&#xff1f;假设有一个可以容纳100kg物品的背包&#xff0c;可以装各种物品。有以下5种豆子&#xff0c;每种豆子的总量和总价值都各不相同。为了让背包中所装物品的总价值最大&#xff0c;如何选择在背包中装哪些豆子&#xff1f;每种豆子又该装多少呢&#…

Pikachu靶场攻略(代码分析)

2023年将会持续于B站、CSDN等各大平台更新&#xff0c;可加入粉丝群与博主交流:838681355&#xff0c;为了老板大G共同努力。 一、安装 Phpstudy_pro设置数据库用户名密码 root 123456 更改\pikachu\inc\config.inc.php 访问pikachu页面点击配置即可。 二、 攻略(包含审计…

BiQuadDesigner相关算法研究

一、获取相关源码方法如下 1、打开BiQuadDesigner相关网页如下 2、菜单:更多工具->开发者工具 3、在此重点研究BiQuadDesigner,选择BiQuadDesigner下的javascript,分别查看BiQuad.js和BiQuadFilter.js 二、研究频响曲线生成步骤如下 1、参数输入及换算滤波器系数如下参…

【数据结构基础】线性表 - 栈和队列

知识点栈 - LIFO示意图实现使用数组实现的叫静态栈使用链表实现的叫动态栈队列 - FIFO示意图实现使用数组实现的叫静态队列使用链表实现的叫动态队列栈和队列相关题目用栈实现队列232. Implement Queue using Stacks (Easy)栈的顺序为后进先出&#xff0c;而队列的顺序为先进先…

【前端设计】复位保护模块的整体设计思路

前言 复位保护模块,是在单系统进行动态复位的过程中,对接口进行硬性逻辑保护,避免异步复位过程中的毛刺对周围系统产生影响的模块。一般而言,简单的单系统动态复位流程可以归纳为: 停止业务功能,收齐接口上的rsp,进入待复位状态;使能复位保护,通过逻辑避免毛刺和误触…

【SCL】博图SCL语言回顾和第一个面向对象程序

西门子SCL语言回顾复习和编写第1个面向对象程序 &#xff08;形参&#xff1a;形参指的是指令上标记该指令要使用的数据位置的标识符;简单来说就是只有数据类型&#xff0c;没有实际的地址&#xff0c;在调用时可以写入&#xff09;。 &#xff08;实参&#xff1a;实参指的是包…

并发编程学习(九):同步模式之顺序控制、交替打印

1、固定运行顺序例如&#xff1a;两个线程&#xff0c;运行是必须先2后1打印。1.1、Object之wait、notify版在同步代码块中&#xff0c;wait开始后&#xff0c;CPU将释放给另一个线程使用&#xff0c;直到①若wait(xxxx)&#xff0c;则x秒后当前线程被唤醒&#xff0c;继续占用…