Рубрики
Без рубрики

Пружинный свод

Узнайте о том, что может предложить Spring при работе с Vault – популярным инструментом для хранения и защиты секретов

Автор оригинала: baeldung.

1. Обзор

Хранилище HashiCorp – это инструмент для хранения и защиты секретов. Хранилище, как правило, решает проблему безопасности разработки программного обеспечения, связанную с управлением секретами. Чтобы узнать больше об этом, ознакомьтесь с нашей статьей здесь .

Spring Vault предоставляет абстракции Spring для хранилища HashiCorp.

В этом уроке мы рассмотрим пример того, как хранить и извлекать секреты из хранилища.

2. Зависимости Maven

Для начала давайте рассмотрим зависимости, необходимые для начала работы с Spring Vault:


    
        org.springframework.vault
        spring-vault-core
        2.1.1.RELEASE
    

Последнюю версию spring-vault-core можно найти на Maven Central .

3. Настройка хранилища

Теперь давайте рассмотрим шаги, необходимые для настройки хранилища.

3.1. Создание шаблона хранилища

Чтобы защитить наши секреты, нам придется создать экземпляр шаблона хранилища , для которого нам нужна Конечная точка хранилища и Проверка подлинности токенов экземпляры:

VaultTemplate vaultTemplate = new VaultTemplate(new VaultEndpoint(), 
  new TokenAuthentication("00000000-0000-0000-0000-000000000000"));

3.2. Создание конечной точки хранилища

Существует несколько способов создания экземпляра Конечной точки хранилища . Давайте взглянем на некоторые из них.

Первый – просто создать его экземпляр с помощью конструктора по умолчанию, который создаст конечную точку по умолчанию, указывающую на http://localhost:8200:

VaultEndpoint endpoint = new VaultEndpoint();

Другой способ-создать конечную точку хранилища , указав хост и порт хранилища:

VaultEndpoint endpoint = VaultEndpoint.create("host", port);

И, наконец, мы также можем создать его из URL-адреса хранилища:

VaultEndpoint endpoint = VaultEndpoint.from(new URI("vault uri"));

Здесь следует отметить несколько вещей – хранилище будет настроено с помощью корневого токена 00000000-0000-0000-0000-000000000000 чтобы запустить это приложение.

В нашем примере мы использовали аутентификацию токена , но также поддерживаются и другие методы аутентификации|/.

4. Настройка Компонентов Хранилища С Помощью Spring

С помощью Spring мы можем настроить хранилище несколькими способами. Один из них заключается в расширении конфигурации Абстрактного хранилища, а другой-в использовании EnvironmentVaultConfiguration , которая использует свойства среды Spring.

Теперь мы рассмотрим оба пути.

4.1. Использование конфигурации Абстрактного Хранилища

Давайте создадим класс, который расширяет Абстрактную конфигурацию хранилища, для настройки Spring Vault:

@Configuration
public class VaultConfig extends AbstractVaultConfiguration {

    @Override
    public ClientAuthentication clientAuthentication() {
        return new TokenAuthentication("00000000-0000-0000-0000-000000000000");
    }

    @Override
    public VaultEndpoint vaultEndpoint() {
        return VaultEndpoint.create("host", 8020);
    }
}

Этот подход аналогичен тому, что мы видели в предыдущем разделе. Отличие заключается в том, что мы использовали Spring Vault для настройки компонентов хранилища, расширяя абстрактный класс AbstractVaultConfiguration.

Нам просто нужно предоставить реализацию для настройки Конечной точки хранилища и Аутентификации клиента .

4.2. Использование конфигурации хранилища среды

Мы также можем настроить Spring Vault с помощью конфигурации Environment Vault :

@Configuration
@PropertySource(value = { "vault-config.properties" })
@Import(value = EnvironmentVaultConfiguration.class)
public class VaultEnvironmentConfig {
}

Конфигурация хранилища среды использует источник свойств Spring для настройки компонентов хранилища. Нам просто нужно предоставить файл свойств с некоторыми приемлемыми записями.

Более подробную информацию обо всех предопределенных свойствах можно найти в официальной документации .

Чтобы настроить хранилище, нам нужно, по крайней мере, несколько свойств:

vault.uri=https://localhost:8200
vault.token=00000000-0000-0000-0000-000000000000

5. Защита Секретов

Мы создадим простой класс Учетные данные , который сопоставляется с именем пользователя и паролем:

public class Credentials {

    private String username;
    private String password;
    
    // standard constructors, getters, setters
}

Теперь давайте посмотрим, как мы можем защитить ваш Учетные данные объект с помощью шаблона Vault:

Credentials credentials = new Credentials("username", "password");
vaultTemplate.write("secret/myapp", credentials);

После завершения этих строк наши секреты теперь хранятся.

Далее мы посмотрим, как получить к ним доступ.

6. Доступ к Секретам

Мы можем получить доступ к защищенным секретам с помощью метода read() в шаблоне Vault, который возвращает поддержку ответа Vault в качестве ответа:

VaultResponseSupport response = vaultTemplate
  .read("secret/myapp", Credentials.class);
String username = response.getData().getUsername();
String password = response.getData().getPassword();

Наши тайные ценности теперь готовы.

7. Заключение

В этой статье мы узнали об основах Spring Vault на примере, показывающем, как хранилище работает в типичных сценариях .

Как обычно, исходный код, представленный здесь, можно найти на GitHub .