2

我正在运行Docker Vault containerindev模式,但我无法读取位于/secret/mobsters/被调用的秘密password

这是Spring 日志

运行vault kv get secret/mobsters返回密码键值对。我也可以在本地访问 Vault 服务器。

这是我引用秘密的方式:

@Value("${password}")
String password;

@PostConstruct
private void postConstruct() {
    System.out.println("My password is: " + password);
}

使用文件Spring Cloud Vault设置配置:bootstrap.yml

spring.application.name: mobsters
spring.cloud.vault:
host: localhost
port: 8200
scheme: http
authentication: TOKEN
token: ...

我收到消息异常(此处为完整异常):

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'password' in value "${password}"`

从保险柜用户界面:

在此处输入图像描述

4

2 回答 2

2

使用带有 HashiCorp Vault 0.10.0 的 Spring Vault/Spring Cloud Vault 不起作用,因为键/值后端安装时默认启用版本控制。这具有一定的意义,因为版本化的 API 已经完全改变并破坏了现有的客户端实现。上下文路径和响应结构不同。

你有两个选择:

  1. 使用较旧的 Vault 版本(例如 0.9.5)
  2. 尝试应对 API 更改,直到 Spring Cloud Vault 找到使用新 API 的方法。你需要:
    • spring.cloud.vault.generic.backend=secret/data在您的引导配置中设置。
    • data.使用so为@Value("${hello.world}")属性名称添加前缀@Value("${data.hello.world}").
于 2018-04-24T06:48:11.707 回答
0

看起来有办法解决这个问题。

在您的bootstrap.yml中,确保它generic.enabled是假的并且kv.enabled是真的。

spring:
  ...
  cloud.vault:
      ...
      kv.enabled: true
      generic.enabled: false

根据GitHub 上的这个答案

这两者之间的主要区别在于 kv 在上下文路径中注入数据段并解开嵌套的数据响应。

如果您运行的是 2.0 之前的 [springboot] 版本,那么您需要实现一个暴露于引导上下文的 org.springframework.cloud.vault.config.VaultConfigurer bean。SecretBackendConfigurer 接受一个路径和一个在将属性公开为 PropertySource 之前转换属性的 PropertyTransformer。

于 2019-01-13T22:21:02.493 回答