Spring Cloud Vault快速入门Demo
1.什么是Spring Cloud Vault?
Spring Cloud Vault 是 Spring Cloud 生态系统中的一个项目,旨在简化 Spring 应用程序与 HashiCorp Vault 的集成。它提供了一种方便的方式来管理和访问应用程序的敏感配置数据,如数据库凭证、API 密钥和其他机密信息。
工作原理
-
配置加载:在应用程序启动时,Spring Cloud Vault 会根据配置文件中的设置连接到 Vault 服务器,并从指定路径加载配置数据。
-
属性注入:加载的配置数据会被注入到 Spring 的
Environment
中,应用程序可以通过@Value
注解或Environment
对象访问这些配置属性。 -
安全访问:通过使用 Vault 的访问控制策略,确保只有授权的应用程序和用户能够访问特定的配置数据。
使用场景
- 管理敏感信息:如数据库密码、API 密钥、证书等。
- 动态配置管理:需要频繁更新配置而不希望重启应用程序。
- 多环境配置:在不同的部署环境中使用不同的配置。
2.环境搭建
docker搭建vault
docker run --cap-add=IPC_LOCK -e 'VAULT_DEV_ROOT_TOKEN_ID=root' -e 'VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200' -p 8200:8200 --name=vault -d vault:1.13.3
env config
export VAULT_TOKEN="hvs.9rUli4rwArRrAUYkVp0NVUlu"
export VAULT_ADDR="http://0.0.0.0:8200"
init datas
vault kv put secret/application example.username=myuser example.password=mypassword
you can init by using web UI
3.代码工程
实验目标
Spring Boot读取vault里面的值
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud-demo</artifactId><groupId>com.et</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>spring-cloud-vault</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Cloud Vault Config --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-vault-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-vault-config-databases</artifactId></dependency><!-- Spring Boot Starter Test --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
</project>
controller
package com.et;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
class SecretController {@Value("${example.username}")private String username;@Value("${example.password}")private String password;@GetMapping("/secrets")public String getSecrets() {return "Username: " + username + ", Password: " + password;}
}
VaultDemoApplication.java
package com.et;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class VaultDemoApplication {public static void main(String[] args) {SpringApplication.run(VaultDemoApplication.class, args);}
}
application.yml
logging:level:org.springframework.cloud.vault: DEBUGspring:application:name: vault-democonfig:import: vault://cloud:vault:uri: http://localhost:8200token: hvs.9rUli4rwArRrAUYkVp0NVUlukv:enabled: truebackend: secretdefault-context: application
以上只是一些关键代码,所有代码请参见下面代码仓库
代码仓库
- https://github.com/Harries/springcloud-demo(Spring Cloud Vault)
4.测试
- 启动Spring Boot 工程
- 访问http://127.0.0.1:8080/secrets
- 结果过将返回
Username: harries, Password: 123456
5.引用
- Spring Cloud Vault
- Spring Cloud Vault快速入门Demo | Harries Blog™