ECOS Секреты

ECOS Секрет - объект, содержащий конфиденциальные данные, такие как пароль, токен или ключ.

Расположение артефактов с данным типом: model/secret

Модель конфигурации:

id: String # идентификатор секрета
type: Enum {BASIC|...} # тип секрета
data: ObjectData # данные секрета. Полностью зависят от типа

Типы секретов:

Тип

Содержимое поля data

BASIC

username: String
password: String

Пример конфигурации:

---
id: content-storage-s3-credentials
name:
ru: Ключи доступа к API S3 хранилища
en: S3 storage API Keys
type: BASIC
data:
username: sMJjtYPxFGjPEKeFp1lC
password: KenKpEhD6Lag3acImDAq2ZeLtlSij1vyaYZt8lyH

Информация о секретах по умолчанию хранится и загружается из БД микросервиса ecos-model, но так же есть возможнось указать настройки через переменные среды. Для этого следует взять идентификатор секрета и сконвертировать его по следующим правилам:

  1. Разбиваем camelCase на части через символ „_“. Например: camelCase → camel_Case

  2. Заменяем все символы ‘-“ и „.“ на „_’

  3. Заменяем все символы, которые не входят в перечень [a-zA-Z0-9_] на _X{код_символа}_

  4. Переводим получившуюся строку в верхний регистр и добавляем префикс “ECOS_SECRET_“

Таким образом для примера выше мы можем задать следующие переменные среды:

ECOS_SECRET_CONTENT_STORAGE_S3_CREDENTIALS_TYPE=BASIC
ECOS_SECRET_CONTENT_STORAGE_S3_CREDENTIALS_USERNAME=sMJjtYPxFGjPEKeFp1lC
ECOS_SECRET_CONTENT_STORAGE_S3_CREDENTIALS_PASSWORD=KenKpEhD6Lag3acImDAq2ZeLtlSij1vyaYZt8lyH

Переменные среды приоритетнее хранилища секретов в БД микросервиса ecos-model и они могут быть заданы как непосредственно в микросервисе который будет использовать эти секреты так и в ecos-model.

Использование секретов в коде

Получение:

BasicSecretData basicData = EcosSecrets.getBasicData("content-storage-s3-credentials");
String username = basicData.getUsername();
String password = basicData.getPassword();

Подписка на изменения:

EcosSecrets.listenChanges((secretId) -> {
    // здесь можем пересоздать подключения, которые зависят от secretId
    return Unit.INSTANCE;
});