Не удалось разрешить доступ к секретам Docker Vault с помощью конфигурации Spring Cloud Starter Vault
Я бегу Docker Vault container
в dev
режим, и я не могу прочитать секрет, расположенный в /secret/mobsters/
называется password
,
Вот весенние бревна.
Бег vault kv get secret/mobsters
возвращает пару ключ-значение пароля. Я также могу получить доступ к серверу хранилища локально.
Вот как я ссылаюсь на секрет:
@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}"`
Из пользовательского интерфейса Vault:
1 ответ
Использование Spring Vault/Spring Cloud Vault с HashiCorp Vault 0.10.0 не работает, поскольку бэкэнд ключ / значение монтируется с включенным контролем версий по умолчанию. Это имеет некоторое значение, так как версионный API полностью изменился и нарушает существующие клиентские реализации. Контекстные пути и структура ответа различны.
У вас есть два варианта:
- Используйте более старую версию Vault (например, 0.9.5)
- Старайтесь справляться с изменениями API, пока Spring Cloud Vault не найдет подход к использованию нового API. Вам нужно:
- Задавать
spring.cloud.vault.generic.backend=secret/data
в вашей конфигурации начальной загрузки. - Имена свойств префикса с
data.
так@Value("${hello.world}")
становится@Value("${data.hello.world}")
,
- Задавать
Похоже, есть способ это исправить.
В вашем bootstrap.yml
, удостоверься что generic.enabled
ложно и kv.enabled
правда.
spring:
...
cloud.vault:
...
kv.enabled: true
generic.enabled: false
Согласно этому ответу на GitHub:
Основное различие между этими двумя заключается в том, что kv внедряет сегмент данных в контекстный путь и разворачивает вложенные ответы данных.
Если вы работаете с версией [springboot] до 2.0, вам нужно реализовать bean-компонент org.springframework.cloud.vault.config.VaultConfigurer, который доступен для контекста начальной загрузки. SecretBackendConfigurer принимает путь и PropertyTransformer, который преобразует свойства, прежде чем выставить их как PropertySource.