Как читать Vault KV с загрузкой Java / Spring - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь понять, как использовать Hashicorp's Vault с пружинной загрузкой.

Сначала я пытался следовать руководству:

https://spring.io/guides/gs/vault-config/#scratch

Но из-за изменений API я использовал следующую команду в CLI хранилища:

vault kv put secret/gs-vault-config example.username=demouser example.password=demopassword

, который сохранил оба, и я могу получить его с помощью следующей команды

vault kv get secret/gs-vault-config

Затем я создал Application.java и MyConfiguration.java, как описано в руководстве. Сначала я запустил программу, не запустив сервер хранилища, что привело к connection refused. Затем я запустил сервер хранилища и ввел имя пользователя и пароль из CLI. Из журнала я вижу, что он действительно входит в приложение и выписывает Здесь мы goooo

@SpringBootApplication
public class Application implements CommandLineRunner {

@Autowired
private VaultTemplate vaultTemplate;

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}

@Override
public void run(String... strings) throws Exception {

    // You usually would not print a secret to stdout
    System.out.println("Here we gooooo");
    VaultResponse response = vaultTemplate.read("secret/gs-vault-config");
    System.out.println("Value of username");
    System.out.println("-------------------------------");
    System.out.println(response.getData().get("example.username"));
    System.out.println("-------------------------------");
    System.out.println();

Но я не могу получить какие-либо данные из Vault - возможно, из-за проблем V1 и V2

2018-08-30 17:10:07.375 ERROR 21582 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:781) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
    at hello.Application.main(Application.java:23) [classes!/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [gs-vault-config-0.1.0.jar:na]
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [gs-vault-config-0.1.0.jar:na]
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [gs-vault-config-0.1.0.jar:na]
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [gs-vault-config-0.1.0.jar:na]
Caused by: java.lang.NullPointerException: null
    at hello.Application.run(Application.java:34) [classes!/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
    ... 13 common frames omitted

Кто-нибудь знает, есть ли подобное руководство к фрагменту кода spring-boot, где данные извлекаются из хранилища, которое было введено с помощью механизма kv?

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Я наткнулся на одну заметку на этой странице: https://cloud.spring.io/spring-cloud-vault/multi/multi_vault.config.backends.html

В котором я говорю: Spring Cloud Vault добавляет данные / контекст между путем монтирования и фактическим путем контекста

Итак, я попытался изменить код на:

VaultResponse response = vaultTemplate.read("/secret/data/gs-vault-config");

И тогда это сработало.

0 голосов
/ 30 марта 2019

Я думаю, что это связано с проблемой V1 против V2. Я столкнулся с подобной проблемой, пытаясь следовать этому руководству: https://spring.io/guides/gs/accessing-vault/

Я использовал пользовательский интерфейс Vault для создания секретного механизма V1 и добавил секреты, и это сработало. Ниже приведены шаги:

  1. Войдите в систему http://127.0.0.1:8200/,, используйте метод токена для входа в систему и введите токен в руководстве (00000000-0000-0000-0000-000000000000)
  2. В правом верхнем углу нажмите Включить новый двигатель
  3. Выберите «KV» и нажмите «Далее»
  4. Убедитесь, что в версии выбрано «1», затем нажмите «Включить механизм» (см. Vault_Secret_Engine_V1.png)
  5. Нажмите «Создать секрет»
  6. Введите «Путь», «Ключ» и «Значение», затем нажмите «Сохранить»
  7. Секреты будут сохранены с путем "kv / github" (см. Vault_Key.png)
  8. Затем измените код на:
* 1 028 * VaultResponseresponse = vaultTemplate.read ( "кВ / GitHub");

Если я изменю версию на 2 на шаге 4 и оставлю все остальные шаги такими же. Я получу такое же исключение, как и ваше.

Vault_Secret_Engine_V1.png

Vault_Key.png

0 голосов
/ 03 сентября 2018

Вместо запуска сервера от имени dev, запустите сервер с помощью файла конфигурации. Для этого вы можете создать файл json с именем vault.json и добавить следующий код.

ui = true

listener "tcp" {
  address          = "0.0.0.0:8200"
  cluster_address  = "192.168.56.1:8201"
  tls_disable      = "true"
}
storage "file" {
  path = "data"
}


api_addr = "http://192.168.56.1:8200"
cluster_addr = "https://192.168.56.1:8201"

Для запуска кода вы можете использовать

$vault server -config=vault.json

Наконец добавьте токен хранилища в файл bootstrap.yml

spring:
    application.name: app-name
    cloud.vault:
        host: 127.0.0.1
        port: 8200
        authentication: TOKEN
        token:  your token
        scheme: http
...