我正在以Docker Vault container
模式运行dev
,而我无法读取名为/secret/mobsters/
password
的秘密。
以下是Spring logs。
运行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: ...
我收到消息的异常(完全例外here):
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'password' in value "${password}"`
来自Vault UI:
答案 0 :(得分:2)
将Spring Vault / Spring Cloud Vault与HashiCorp Vault 0.10.0一起使用不起作用,因为默认情况下启用版本控制时会挂载键/值后端。这具有一定的意义,因为版本化的API已经完全改变并且破坏了现有的客户端实现。上下文路径和响应结构是不同的。
您有两种选择:
@Value("${hello.world}")
。@Value("${data.hello.world}")
添加属性名称,以便@pytest.fixture(scope="session", autouse=True)
def before_all_tests(request):
# Code that I want to run only once before all tests start to run
成为{{1}}。答案 1 :(得分:0)
似乎有一种解决方法。
在您的bootstrap.yml
中,确保generic.enabled
为假,kv.enabled
为真。
spring:
...
cloud.vault:
...
kv.enabled: true
generic.enabled: false
两者之间的主要区别是kv注入数据 在上下文路径中进行细分,并解开嵌套的数据响应。
如果您正在运行2.0之前的[springboot]版本,则需要实现一个 org.springframework.cloud.vault.config.VaultConfigurer bean是 暴露于引导上下文。 SecretBackendConfigurer接受 路径和一个PropertyTransformer,它可以先转换属性 将这些作为PropertySource公开。