JavaRush /Курси /Модуль 5. Spring /Лекція 227: Практика: інтеграція HashiCorp Vault з мікрос...

Лекція 227: Практика: інтеграція HashiCorp Vault з мікросервісами

Модуль 5. Spring
Рівень 23 , Лекція 6
Відкрита

Привіт! На попередній лекції ми розібралися, навіщо потрібен Vault і що він вміє. Сьогодні переходимо до практики — встановимо, налаштуємо і змусимо його працювати з нашими Spring Boot додатками.


Встановлення Vault

Найпростіший спосіб — через Docker. Одна команда — і маємо робочий Vault:


docker run --cap-add=IPC_LOCK \
-e 'VAULT_DEV_ROOT_TOKEN_ID=myroot' \
-p 8200:8200 \
vault

Запам'ятайте токен myroot — він нам знадобиться!


Перші кроки з Vault CLI

Давайте познайомимось з командним рядком Vault. Спочатку вкажемо адресу сервера:

export VAULT_ADDR='http://127.0.0.1:8200'

Тепер залогіньмося з нашим токеном:


vault login myroot

Додаємо перші секрети

Vault зберігає секрети в спеціальних "відділеннях". Давай створимо таке для нашого додатка:


vault secrets enable -path=secret kv-v2

Тепер додамо перший секрет:


vault kv put secret/myapp/database \
username=dbuser \
password=dbpass

Перевіримо, що все збереглося:

vault kv get secret/myapp/database

Підключаємо Spring Boot

А тепер найцікавіше — підключимо наш додаток до Vault.

1. Додаємо залежності

В pom.xml:


<dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-vault-config</artifactId>
</dependency>

2. Налаштовуємо додаток

В application.yml:


spring:
cloud:
vault:
host: localhost
port: 8200
scheme: http
authentication: TOKEN
token: myroot
kv:
enabled: true
backend: secret
default-context: myapp

3. Використовуємо секрети

У коді це виглядає просто:


@Value("${database.username}")
private String username;

@Value("${database.password}")
private String password;

Перевіряємо роботу

Створимо простий REST-контролер:


@RestController
public class TestController {

       @Value("${database.username}")
       private String username;

       @GetMapping("/test")
       public String test() {
           return "Connected as: " + username;
       }
}

Запускаємо додаток і перевіряємо:

curl http://localhost:8080/test

Корисні можливості

1. Оновлення секретів «на льоту»

Змініть секрет у Vault:


vault kv put secret/myapp/database \
username=newuser \
password=newpass

І оновіть конфігурацію додатка:

curl -X POST http://localhost:8080/actuator/refresh

2. Різні секрети для різних оточень

У Vault:


vault kv put secret/myapp/database/dev \
username=devuser \
password=devpass

vault kv put secret/myapp/database/prod \
username=produser \
password=prodpass

У додатку:


spring:
cloud:
vault:
kv:
default-context: myapp/database/${spring.profiles.active}

Просунуті техніки: оновлення в реальному часі

Підключаємо Spring Cloud Bus

В pom.xml:


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

Налаштовуємо RabbitMQ

В application.yml:


    spring:
      rabbitmq:
        host: localhost
        port: 5672
        username: guest
        password: guest
      cloud:
        bus:
          enabled: true

Автоматичне оновлення секретів

Тепер при зміні секрету у Vault:

  1. Відправляємо подію в RabbitMQ
  2. Spring Cloud Bus доставляє її всім мікросервісам
  3. Кожен сервіс оновлює свої секрети

Робота з різними оточеннями

Структура секретів у Vault

secret/
├── dev/
│   ├── app1/
│   └── app2/
├── staging/
│   ├── app1/
│   └── app2/
└── prod/
    ├── app1/
    └── app2/

Налаштування Spring профілів

В bootstrap.yml:


spring:
  cloud:
    vault:
      kv:
        application-name: ${spring.application.name}/${spring.profiles.active}

Типові проблеми та їх вирішення

1. Vault недоступний при старті

Додайте в application.yml:


spring:
cloud:
vault:
fail-fast: false
config:
lifecycle:
enabled: true

2. Секрети не оновлюються

Не забудьте додати:


@RefreshScope
public class MyConfig {
// ...
}

Домашнє завдання

  1. Встановіть Vault локально
  2. Створіть простий Spring Boot додаток
  3. Налаштуйте зберігання і отримання мінімум трьох різних секретів
  4. Бонус: налаштуйте роботу з різними профілями (dev/prod)

На наступній лекції розглянемо просунуті техніки роботи з Vault: політики доступу, аудит і автоматичну ротацію секретів.

До зустрічі на практиці! І не забудьте почистити історію терміналу — там могли лишитися секрети

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ