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, но так же есть возможнось указать настройки через переменные среды. Для этого следует взять идентификатор секрета и сконвертировать его по следующим правилам:
Разбиваем camelCase на части через символ „_“. Например: camelCase → camel_Case
Заменяем все символы ‘-“ и „.“ на „_’
Заменяем все символы, которые не входят в перечень
[a-zA-Z0-9_]
на_X{код_символа}_
Переводим получившуюся строку в верхний регистр и добавляем префикс “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;
});