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 в качестве ответа:
VaultResponseSupportresponse = vaultTemplate .read("secret/myapp", Credentials.class); String username = response.getData().getUsername(); String password = response.getData().getPassword();
Наши тайные ценности теперь готовы.
7. Заключение
В этой статье мы узнали об основах Spring Vault на примере, показывающем, как хранилище работает в типичных сценариях .
Как обычно, исходный код, представленный здесь, можно найти на GitHub .