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; });