From 6ffd63236590826fc4ea75dabeef6beae6a5d6cf Mon Sep 17 00:00:00 2001 From: Nikita Velgin Date: Thu, 26 Feb 2026 03:18:56 +0300 Subject: [PATCH 1/4] add vault credentials storage description --- .../admin/security/credentials.ru.md | 48 ++++++++++++++++++- .../documentation/admin/security/rbac.ru.md | 3 ++ .../documentation/release-notes/v1.3.0.ru.md | 7 ++- 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/content/documentation/admin/security/credentials.ru.md b/content/documentation/admin/security/credentials.ru.md index 0eb3e3d..5cb4771 100644 --- a/content/documentation/admin/security/credentials.ru.md +++ b/content/documentation/admin/security/credentials.ru.md @@ -20,9 +20,17 @@ weight: 30 После сохранения пользователь не может просмотреть значение учетных данных, только обновить его. В профиле отображается информация о том, заполнены ли те или иные учетные данные. +### Выбор хранилища для типа учётных данных + +При создании или редактировании типа учётных данных указывается **хранилище**: +- **База данных** — значения хранятся в PostgreSQL (по умолчанию). +- **Vault** — значения хранятся в HashiCorp Vault или в Deckhouse Stronghold. Доступно только если в платформе включена и настроена интеграция с Vault. + +Один и тот же тип учётных данных всегда использует одно выбранное хранилище. Изменить хранилище для существующего типа можно; при этом уже сохранённые учётные данные в старом хранилище не переносятся автоматически. + ### Хранение в базе данных -Учетные данные хранятся в базе данных PostgreSQL. Перед сохранением в базу данных значения шифруются с использованием алгоритма **AES-GCM**. +Учетные данные с хранилищем «База данных» сохраняются в PostgreSQL. Перед сохранением значения шифруются с использованием алгоритма **AES-GCM**. **Параметры шифрования:** - **Алгоритм:** AES-GCM. @@ -36,6 +44,40 @@ weight: 30 При изменении ключа шифрования (`security.secretKey`) в конфигурации все текущие учетные данные станут невалидными и не смогут быть расшифрованы. {{< /alert >}} +### Хранение в HashiCorp Vault + +Если для типа учётных данных выбрано хранилище **Vault**, значения пользователей сохраняются платформой в HashiCorp Vault или в Deckhouse Stronghold. + +**Как это устроено:** +- В Vault используется движок **KV Secrets Engine v2**. Путь к секретам задаётся в настройках Vault в DDP (например, `secrets/data/ddp`). +- Для каждого пользователя создаётся отдельный секрет по пути `{path}/credentials/{uuid_типа}/users/{uuid_пользователя}`. Внутри секрета один ключ **value**, значение — зашифрованные учетные данные. Шифрование выполняется ключом DDP (`security.secretKey`). +- Подключение к Vault выполняется по **AppRole** (AppRole Role ID и AppRole Secret ID). AppRole Role ID и AppRole Secret ID сохраняются в БД DDP в зашифрованном виде. Токен Vault продлевается автоматически; при сбое продления выполняется повторный вход по AppRole. + +**Настройка Vault в DDP:** + +1. В разделе «Администрирование» → «Учетные данные» нажмите **«Настройки Vault»**. +2. Включите использование Vault (**Включено**). +3. Заполните параметры: + - **URL** — адрес сервера Vault (например, `https://vault.example.com`). + - **AppRole Role ID** — идентификатор AppRole, выданный при создании роли в Vault. + - **AppRole Secret ID** — секрет AppRole, используется вместе с Role ID для аутентификации в Vault. + - **Путь** — путь к секретам в KV v2. Для KV v2 путь должен содержать сегмент `/data/` (например, `secrets/data/ddp` или `secrets/data/ddp/credentials`). Mount (например, `secrets`) должен быть заранее создан в Vault; подкаталоги после `data/` создаются платформой автоматически при сохранении учётных данных. +4. Нажмите **«Проверить подключение»**, чтобы убедиться, что DDP может аутентифицироваться и обращаться к Vault. +5. Сохраните конфигурацию. + +После сохранения конфигурации при создании или редактировании типа учётных данных в списке хранилищ будет доступен вариант **Vault**. Если Vault выключен или не настроен, типы с хранилищем Vault останутся в списке, но учётные данные такого типа заполнять и использовать будет нельзя до включения и настройки Vault. + +**Права доступа:** + +Для просмотра, изменения конфигурации Vault и проверки подключения требуется глобальное разрешение на редактирование типов учётных данных: `edit:user-access-credentials-types`. + +**Особенности конфигурации:** + +- Поддерживается только **KV Secrets Engine v2**. Путь в настройках должен включать `/data/` (например, `mount/data/подкаталог`). +- Одна конфигурация Vault на инстанс DDP: один URL, одна AppRole, один базовый путь. Все типы учётных данных с хранилищем Vault используют этот путь (подкаталоги формируются автоматически по UUID типа). +- Очистить все сохранённые значения типа из текущего хранилища (база данных или Vault) в любой момент можно через действие **«Очистить хранилище»** в таблице типов учётных данных. +- Смена ключа шифрования DDP (`security.secretKey`) делает нечитаемыми и учётные данные в Vault, так как значения в Vault хранятся в зашифрованном виде. + ### Использование учетных данных Учетные данные расшифровываются только при необходимости их использования, непосредственно перед обращением к внешнему сервису. После использования расшифрованные значения не сохраняются в памяти дольше необходимого. @@ -106,6 +148,10 @@ security: - Не должен быть слабым или часто используемым ключом. - Не должен состоять из одного повторяющегося символа. +### Интеграция с Vault + +Подключение к HashiCorp Vault (URL, AppRole, путь к KV v2) настраивается в веб-интерфейсе в разделе «Администрирование» → «Учетные данные» → «Настройки Vault». В конфигурационном файле DDP задаётся только ключ шифрования (`security.secretKey`), который используется в том числе для шифрования значений, хранящихся в Vault. + ## Безопасность - Учетные данные никогда не передаются пользователю в расшифрованном виде. diff --git a/content/documentation/admin/security/rbac.ru.md b/content/documentation/admin/security/rbac.ru.md index 85a54e9..8ae3b71 100644 --- a/content/documentation/admin/security/rbac.ru.md +++ b/content/documentation/admin/security/rbac.ru.md @@ -107,6 +107,9 @@ weight: 20 - `create:icons` — создание иконок. - `delete:icons` — удаление иконок. +Типы учётных данных: +- `edit:user-access-credentials-types` — создание, редактирование и удаление типов учётных данных; настройка интеграции с Vault (просмотр и изменение конфигурации, проверка подключения). + {{< alert level="info" >}} Разрешение `update:team-variables` позволяет редактировать переменные только тех команд, участником которых является пользователь. Даже супер-администратор не сможет изменить переменные команд, в которых не состоит. {{< /alert >}} diff --git a/content/documentation/release-notes/v1.3.0.ru.md b/content/documentation/release-notes/v1.3.0.ru.md index 979eaef..59626a6 100644 --- a/content/documentation/release-notes/v1.3.0.ru.md +++ b/content/documentation/release-notes/v1.3.0.ru.md @@ -32,12 +32,17 @@ weight: 940 ### Ролевая модель -Добавлено глобальное разрешение `edit:team-filter-rules` для настройки правил фильтрации при синхронизации команд ([подробнее](../../admin/security/rbac/#глобальные-разрешения)). +- Добавлено глобальное разрешение `edit:team-filter-rules` для настройки правил фильтрации при синхронизации команд ([подробнее](../../admin/security/rbac/#глобальные-разрешения)). +- Добавлено глобальное разрешение `edit:user-access-credentials-types` для управления типами учётных данных ([подробнее](../../admin/security/rbac/#глобальные-разрешения)). ### Параметры Добавлен новый тип параметра **Enum** ([подробнее](../../user/properties/#enum)). +### Учётные данные + +Добавлена возможность хранения пользовательских учётных данных в **HashiCorp Vault** или **Deckhouse Stronghold** ([подробнее](../../admin/security/credentials/#хранение-в-hashicorp-vault)). + ## Исправленные проблемы - Решена проблема с отображением команды-владельца на карточках раздела «Самообслуживание». From 8d4b1b45bdf4f7345acdc9b758befc0a7025a684 Mon Sep 17 00:00:00 2001 From: Nikita Velgin Date: Thu, 26 Feb 2026 03:27:27 +0300 Subject: [PATCH 2/4] corrected the phrasing --- content/documentation/admin/security/credentials.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/documentation/admin/security/credentials.ru.md b/content/documentation/admin/security/credentials.ru.md index 5cb4771..fd20718 100644 --- a/content/documentation/admin/security/credentials.ru.md +++ b/content/documentation/admin/security/credentials.ru.md @@ -46,7 +46,7 @@ weight: 30 ### Хранение в HashiCorp Vault -Если для типа учётных данных выбрано хранилище **Vault**, значения пользователей сохраняются платформой в HashiCorp Vault или в Deckhouse Stronghold. +Если для типа учётных данных выбрано хранилище **Vault**, то реквизиты пользователей сохраняются платформой в HashiCorp Vault или в Deckhouse Stronghold. **Как это устроено:** - В Vault используется движок **KV Secrets Engine v2**. Путь к секретам задаётся в настройках Vault в DDP (например, `secrets/data/ddp`). From ff6d3245dc804d35fb418c17051bd64334a49a6e Mon Sep 17 00:00:00 2001 From: Nikita Velgin Date: Thu, 26 Feb 2026 03:28:11 +0300 Subject: [PATCH 3/4] corrected the phrasing --- content/documentation/admin/security/credentials.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/documentation/admin/security/credentials.ru.md b/content/documentation/admin/security/credentials.ru.md index fd20718..8609297 100644 --- a/content/documentation/admin/security/credentials.ru.md +++ b/content/documentation/admin/security/credentials.ru.md @@ -59,7 +59,7 @@ weight: 30 2. Включите использование Vault (**Включено**). 3. Заполните параметры: - **URL** — адрес сервера Vault (например, `https://vault.example.com`). - - **AppRole Role ID** — идентификатор AppRole, выданный при создании роли в Vault. + - **AppRole Role ID** — идентификатор AppRole, полученный при создании роли в Vault. - **AppRole Secret ID** — секрет AppRole, используется вместе с Role ID для аутентификации в Vault. - **Путь** — путь к секретам в KV v2. Для KV v2 путь должен содержать сегмент `/data/` (например, `secrets/data/ddp` или `secrets/data/ddp/credentials`). Mount (например, `secrets`) должен быть заранее создан в Vault; подкаталоги после `data/` создаются платформой автоматически при сохранении учётных данных. 4. Нажмите **«Проверить подключение»**, чтобы убедиться, что DDP может аутентифицироваться и обращаться к Vault. From 50c985501f973cb727c184b07cccd78e51333c43 Mon Sep 17 00:00:00 2001 From: Nikita Velgin Date: Thu, 26 Feb 2026 11:22:35 +0300 Subject: [PATCH 4/4] corrected the phrasing --- content/documentation/admin/security/credentials.ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/documentation/admin/security/credentials.ru.md b/content/documentation/admin/security/credentials.ru.md index 8609297..292c879 100644 --- a/content/documentation/admin/security/credentials.ru.md +++ b/content/documentation/admin/security/credentials.ru.md @@ -30,7 +30,7 @@ weight: 30 ### Хранение в базе данных -Учетные данные с хранилищем «База данных» сохраняются в PostgreSQL. Перед сохранением значения шифруются с использованием алгоритма **AES-GCM**. +Учетные данные с типом хранилища «База данных» сохраняются в PostgreSQL. Перед сохранением значения шифруются с использованием алгоритма **AES-GCM**. **Параметры шифрования:** - **Алгоритм:** AES-GCM.