環(huán)境:SpringBoot2.7.16 + Vault1.15.5(Vault服務(wù)版本)
SpringBoot作為流行的Java微服務(wù)框架,其配置文件可能包含數(shù)據(jù)庫密碼、API密鑰等敏感數(shù)據(jù)。為了保障這些信息的安全,Vault作為一個開源的秘密管理工具,成為了眾多開發(fā)者的選擇。本文將深入探討如何整合SpringBoot與Vault,實現(xiàn)對配置文件中敏感信息的有效保護,從而確保微服務(wù)應(yīng)用的安全性。
Spring Vault 為訪問、存儲和撤銷秘密提供客戶端支持。有了 HashiCorp 的 Vault,你就有了一個集中的地方來管理所有環(huán)境中應(yīng)用程序的外部秘密數(shù)據(jù)。Vault 可以管理應(yīng)用程序數(shù)據(jù)、遠程應(yīng)用程序/資源的用戶名/密碼等靜態(tài)和動態(tài)秘密,并為 MySQL、PostgreSQL、Apache Cassandra、Consul、AWS 等外部服務(wù)提供憑證。
本文將通過Docker安裝Vault服務(wù)。執(zhí)行如下命令即可
docker run -d --name vault --cap-add=IPC_LOCK / -e 'VAULT_LOCAL_CONFIG={"storage": {"file": {"path": "/vault/file"}}, "listener": [{"tcp": { "address": "0.0.0.0:8200", "tls_disable": true}}], "default_lease_ttl": "168h", "max_lease_ttl": "720h", "ui": true}' / -p 8200:8200 hashicorp/vault server上面以服務(wù)的模式運行vault。
--cap-add=IPC_LOCK:這是 Vault 鎖定內(nèi)存所必需的,這會阻止內(nèi)存被交換到磁盤。強烈推薦這個。在非開發(fā)環(huán)境中,如果不想使用該功能,則必須添加"disable_mlock: true"配置信息。
這將運行一個禁用 TLS 的 Vault 服務(wù)器,file存儲后端位于路徑/vault/file,默認秘密租約期限為一周,最長為 30 天。file不建議在生產(chǎn)使用中禁用 TLS 和使用存儲后端。
通過http://localhost:8200/ui/ 訪問Vault管理頁面
圖片
這里輸入你初次進入頁面時會給你生成一份token文件,文件中包含了token信息。如下:
圖片
進入管理頁面后點擊Secrets Engines菜單,在該菜單中進行信息的配置
圖片
創(chuàng)建新的密鑰管理
圖片
選擇KV
圖片
輸入路徑Path,這個路徑就是以后你要訪問的路徑,然后點擊Enable Engine。
最后添加你需要的配置信息
圖片
以上就是基本的配置。
在上面的加密引擎選擇中有個,Transit這個類型可以同來對數(shù)據(jù)進行加解密也是非常的實用。
接下來我們通過Transit進行數(shù)據(jù)的加解密。
private VaultEndpoint vaultEndpoint ;private VaultTemplate vaultTemplate ;@BeforeEachpublic void init() { vaultEndpoint = new VaultEndpoint() ; vaultEndpoint.setHost("localhost") ; vaultEndpoint.setPort(8200) ; vaultEndpoint.setScheme("http") ; vaultTemplate = new VaultTemplate(vaultEndpoint, new TokenAuthentication("hvs.xxxxxxxxxxooooooooo"));}加密數(shù)據(jù)
@Testpublic void testEncrypt() { String ret = vaultTemplate.opsForTransit().encrypt("db.password", "123123") ; System.out.println(ret) ;}// 輸出vault:v1:1WxwJjUJnN78FnqsTzxo+9wnGyHln3yCdG+lf5ZC/SDmeQ==解密數(shù)據(jù)
@Testpublic void testDecrypt() { String ret = vaultTemplate.opsForTransit().decrypt("db.password", "vault:v1:wBLlqFGICCnONZgwm+9JRRiOF/0xoxuO+OIy4omZoS1FBg==") ; System.out.println(ret) ;}// 輸出123123首先在Vault上建立一個mydata秘鑰引擎。
@Testpublic void testCreate() { Secrets ss = new Secrets(); ss.username = "admin"; ss.password = "123123"; Map<String, Object> data = new HashMap<>() ; data.put("data", ss) ; vaultTemplate.write("/mydata/data/db", data) ;}
圖片
查詢獲取數(shù)據(jù)
@Testpublic void testRead() { System.out.println( vaultTemplate.read("/mydata/data/db").getData()) ;}添加配置文件vault.properties,內(nèi)容如下:
vault.uri=http://localhost:8200vault.token=hvs.xxxxxxxxoooooooo配置類
@Configuration@VaultPropertySource(value = {"demo/db"})@PropertySource("vault.properties")@Import(EnvironmentVaultConfiguration.class)public class AppVaultConfig {}@VaultPropertySource注解配置你需要查詢的密鑰key信息@Import(EnvironmentVaultConfiguration.class) 該配置會自動在容器中配置VaultTemplate類型的Bean,并且讀取的配置信息就是上面vault.properties中的。
以上就是SpringBoot與Vault整合所需要的全部內(nèi)容。接下來在Vault服務(wù)上配置數(shù)據(jù)庫的信息
圖片
以上準(zhǔn)備工作做完后,接下來就可以在SpringBoot配置文件中去引用這些配置了。
spring: datasource: driverClassName: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/batch?serverTimeznotallow=GMT%2B8&nullCatalogMeansCurrent=true&useSSL=false username: ${db.username} password: ${db.password} type: com.zaxxer.hikari.HikariDataSource hikari: minimumIdle: 10 maximumPoolSize: 13到此,就完成了所有的配置工作,接下來只需要啟動服務(wù),查看是否有異常即可。
圖片
數(shù)據(jù)庫正確的連接。
以上是本篇文章的全部內(nèi)容,希望對你有所幫助。
完畢!!!
本文鏈接:http://m.www897cc.com/showinfo-26-76553-0.html使用Vault保護SpringBoot配置文件中的敏感數(shù)據(jù),你學(xué)會了嗎?
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 如何擴展大模型的上下文長度