将密钥添加到 Spring Boot 保险库

Posted

技术标签:

【中文标题】将密钥添加到 Spring Boot 保险库【英文标题】:Adding keys to Spring Boot vault 【发布时间】:2022-01-14 09:55:59 【问题描述】:

我正在实施 Spring Boot 保险库。每当我尝试添加多个密钥时,只会保存最后一个。例如,在这个页面,https://www.javainuse.com/spring/cloud-vault,他们有这个例子

但是当我随后查询保险库时,我看到了

c:\vault>vault kv get secret/javainuseapp
======= Data =======
Key           Value
---           -----
dbpassword    root

如果我同时设置两个键,它似乎工作

c:\vault>vault kv put secret/javainuseapp dbusername=root dbpassword=root
Success! Data written to: secret/javainuseapp

c:\vault>vault kv get secret/javainuseapp
======= Data =======
Key           Value
---           -----
dbpassword    root
dbusername    root

如何添加额外的键?

【问题讨论】:

【参考方案1】:

这是 Vault API 的标准用法,因此也适用于 CLI,它是围绕 REST API 的 Golang 绑定的包装器。如果您想使用 Vault CLI 覆盖键值对并保留以前的键值对,则必须像在最后一个示例中那样另外指定它们:

kv put secret/javainuseapp dbusername=root dbpassword=root

在命令期间为特定路径指定的所有键值对都将存储在该秘密版本中(该版本对应于等于该路径上写入次数的整数,除非之前的版本被删除)。所有键值对仍然存储,但在以前的秘密版本。当您执行命令vault kv get secret/javainuseapp 时,您正在检索与最近写入对应的当前版本的密钥。

但是,请注意,如果一个或多个 Vault 策略支持对关联角色/用户/等的秘密路径上的 patch 操作,那么您还可以执行 patch 子命令以仅更新一个键值对,同时将其他人保留在最新版本的秘密中:

vault kv patch secret/javainuseapp dbusername=root

在这种情况下,dbpassword 密钥将保留在最新的机密版本中。

【讨论】:

谢谢。你是说如果我做一个附加值的put,其他值仍然保留,但get 没有显示它们?我尝试做一个patch,但显然我的kv 是版本1,我需要版本2。如何启用对patch 的支持?您能否指出任何对此进行更彻底记录的资源? 如上面答案中所写,在指定路径写入秘密仅包含最新版本中的指定键值对,而使用kv get 读取则隐式仅检索最新版本。如果您检索了多个版本,这可能会给您带来问题。 KV 版本 1 已经弃用了几年,因此强烈建议尽快升级。如答案中所述,您可以在该路径的密钥策略中启用patch 功能。我假设基于您制定政策的问题,但以防万一这里有更多信息的文档:vaultproject.io/docs/concepts/policies

以上是关于将密钥添加到 Spring Boot 保险库的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 2.1 嵌入式 Tomcat - 密钥库密码不正确

找不到spring-boot可执行war密钥库

Spring Boot中添加Thymeleaf模板

在 spring boot application.properties 中指定信任存储信息

保护https密钥库时,Wildfly保险库(JCEKS)有什么意义?

Spring Boot 未加载 application.yml 中指定的密钥库