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 .