将密钥添加到 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 application.properties 中指定信任存储信息