Настройки безопасности и маскирования
Политики, DLP, маскирование, наблюдение, уведомления и SIEM: значения и область действия.
Роль: администратор контура. Эти действия выполняются в операторской консоли. В обычном hosted-кабинете доступны собственные ключи и лимиты; изменение политик, режима защиты и маскирования запрашивается у администратора.
IAM.Secure отделяет обнаружение, действие политики, замену найденных значений и доставку событий. Настройки этих механизмов независимы. Изменять политику и интеграции может только роль с соответствующими правами на tenant; редакция продукта дополнительно ограничивает некоторые возможности.
Где включать и отключать механизмы
| Механизм | Путь в приложении | Что делает выключение |
|---|---|---|
| Конкретная политика | Политики → выбрать → Поставить на паузу | Эта политика перестаёт участвовать; другие активные политики и аварийная защита остаются. |
| Применение новой политики | Политики → Новая политика → статус «Черновик» / «Активна» | Draft не исполняется; Active исполняется. Сохранение активного документа меняет текущую обработку. |
| Маскирование | Маскирование → режим → Сохранить | verdict_classes уменьшает повторный поиск, а не отключает замену. |
| Правило уведомления | Alert Rules → правило → Активно → Сохранить | Прекращает пороговые уведомления, не инспекцию. |
| Подписка webhook | Webhooks → подписка → enabled | Прекращает доставку подписки. |
| SIEM | SIEM → Включить SIEM экспорт → Сохранить | Прекращает экспорт; локальный аудит и проверки продолжаются. |
| Обновление / поток | Откл / Пауза в отчёте | Меняет отображение в браузере, не обработку шлюзом. |
Единого клиентского переключателя «выключить весь анализ трафика» в этих разделах нет. Для проверки решения без блокировки используйте целевое действие flag в узком scope и убедитесь, что более строгая активная политика не переопределяет его. Это изменение защитного действия, а не отключение детектора.
Создать, включить, приостановить и настроить политику
- Политики → Новая политика. Укажите уникальный ID, название, владельца, описание и статус Черновик.
- Выберите конкретный tenant, не
*. Hosted-версия отклоняет непустые scope.apps и scope.groups с HTTP 422: эти границы ещё не поддерживаются. Для изоляции используйте отдельный tenant. - Добавить правило → Тип условия → Значение условия → Действие. Укажите заметку. Стрелками разместите более конкретное правило раньше общего.
- Для составных условий,
pointи канонических действий откройте JSON. Сохраните документ, проверьте его чтением обратно и тестом учебного текста. - Только после проверки переведите статус в Активна. Для прекращения исполнения конкретной политики — Поставить на паузу. Проверяйте результат в аудите.
2026-10-15 · Реальный общий staging с восстановленным gateway и редактором r8. Синтетическая политика ограничена отдельным тестовым tenant; профиль и секреты исключены из исходного кадра. Сохранение через форму и active/paused проверены отдельными запросами на обеих репликах без reload. После проверки исходный draft восстановлен, временный ключ отозван.
- Проверить все условия
- Статус
- Тенант
- true / false
- Действие
- Сохранить политику
Редактор и сервер опубликованы 15.10.2026. Каноническое действие block, ID правила и дополнительные условия сохраняются при JSON → Форма → JSON. Для injection_detected и provider_unlisted форма показывает и позволяет выбрать true либо false; значение false больше не изображается как RESTRICTED. Составные условия, включая point, проверяйте в JSON. Неподдерживаемые groups/apps отключены с пояснением и отвергаются сервером с 422; используйте конкретный tenant. Сохранённое состояние автоматически читается всеми репликами из общего хранилища.
| Поле | Значения и влияние |
|---|---|
id, name, owner, description | ID уникален и используется в аудите; остальные поля объясняют назначение и владельца. |
status | draft, active, paused; только active участвует в решении. |
scope.tenant | Конкретный tenant; пусто / * — все. |
scope.groups, scope.apps | Непустые поля отклоняются с HTTP 422 без изменения сохранённой политики. Используйте отдельный tenant; app/group isolation пока не поддерживается. |
rules[].id | Уникальный внутри политики ID для трассировки. |
when.data_class | Класс данных, например из реестра/вердикта; совпадение привязывает правило к детекции. |
when.min_severity | Минимальная критичность low / medium / high / critical. |
when.sensitivity | PUBLIC / INTERNAL / CONFIDENTIAL / RESTRICTED. |
when.content_type | GENERAL / CODE / ARCHITECTURE / RESEARCH в серверном контракте; проверяется валидатором. |
when.point | request / response / attachment / tool_input / tool_output / web_content — место инспекции. Настраивается в JSON. |
when.injection_detected | true — обнаружена injection; false — условие отсутствия, если явно задано. |
when.provider_unlisted | true — провайдер не разрешён реестром в данном контексте. |
then | Канонический контракт: allow, flag, mask, reroute, block. |
note | Причина правила для сопровождения. |
on_inspection_unavailable | fail_closed или пусто; отказ инспекции не должен становиться разрешением. |
block_message | Сообщение при блокировке без исходного секрета. |
Совместимость формы и JSON. Некоторые версии визуального редактора записывают blocked / masked / rerouted / flagged / allowed, а валидатор шлюза принимает block / mask / reroute / flag / allow. При 422 используйте канонические значения в JSON; отвергнутая форма не считается сохранённой политикой. Простая форма представляет одно условие на правило: для нескольких условий и point оставайтесь в JSON, иначе часть условий может потеряться при преобразовании.
Как разрешаются несколько правил
В одной политике выигрывает первое совпадение сверху вниз. Среди всех подходящих активных политик применяется самое строгое действие: allow < flag < mask < reroute < block. Условия одного when должны выполняться вместе. Если ни одно правило не совпало и инспекция доступна, результат — allow; поэтому проверяйте полное покрытие нужного scope. При отказе инспекции действует block, даже если доступен on-prem: непроверенный запрос не отправляется ни в один upstream. Если инспекция успешна, но mask невозможен, действие повышается до reroute при доступном on-prem, иначе block.
Проверить текстовое вложение в интеграции
Для вызова API нужен inference key вашего tenant; просмотр аудита и оригинала требует отдельных административных прав. Передайте текстовый файл через OpenAI file.file_data / input_file.file_data либо SDK document.source с type=base64 и media_type=text/plain. Поддерживаются текстовые MIME, JSON, XML, JavaScript и YAML; для raw base64 file_data укажите filename с поддерживаемым расширением. Это контракт интеграции; новая кнопка загрузки в консоли не добавляется.
{"messages":[{"role":"user","content":[{"type":"file","file":{"filename":"example.txt","file_data":"data:text/plain;base64,aGVsbG8="}}]}],"point":"attachment","context":"chat"}
- На staging отправьте этот учебный объект в
/v1/inspect, используя свой inference key. Содержимое файлаhelloдекодируется до классификации; итоговое действие зависит от активных политик. - Повторите проверку с учебными приватными данными и injection внутри файла. Проверьте
decision,verdict.pointи Request ID в Аудит и форензика. Inspect проверяет решение, но не вызывает генерацию ответа провайдера. - Для разрешённого вызова
/v1/chat/completionsшлюз сохраняет исходные encoded bytes при отправке провайдеру. Streaming-ответ с data URL/JSON удерживается до полной проверки; обычный текст продолжает проверяться окнами. - Некорректная кодировка, превышение лимита, неподдерживаемый бинарный файл или документ через
file_id,file_url/source.urlдают fail-closed block. Исправьте данные или передайте поддерживаемый текстовый экспорт; не повторяйте недоступную ссылку как способ обхода проверки.
Извлечение ограничено 64 MiB суммарно декодированных данных и глубиной восьми вложенных кодировок. Удерживаемые SSE frames ограничены 96 MiB; превышение блокирует поток без частичной выдачи вложения. PDF/DOCX, OCR, расшифровка аудио и загрузка удалённого документа этим текстовым контрактом не подтверждаются. Сохранение SDK media fields при пересылке не означает анализ содержимого изображения или аудио.
Для декодированного текста span_basis=extracted_text: spans относятся к извлечённому содержимому. Пока исходный формат не поддерживает безопасное переписывание, такой вердикт не является maskable; API маскирования с запросом реальной замены возвращает ошибку вместо успешного ответа с неизменённым секретом. Проверьте причину блокировки/маршрутизации в аудите; успешное извлечение само по себе не обещает allow или reversible FPE.
Пример: маскировать email в запросах отдельного учебного tenant
Создайте черновик; имя класса возьмите из реального вердикта вашего реестра.
{
"id": "DOCS-EMAIL",
"name": "Mask email in support requests",
"status": "draft",
"owner": "secops",
"description": "Educational policy; activate only after scoped checks",
"scope": {"tenant": "docs-demo", "groups": [], "apps": []},
"on_inspection_unavailable": "fail_closed",
"block_message": "Request blocked by organization policy",
"rules": [
{"id": "INJECTION", "when": {"injection_detected": true}, "then": "block"},
{"id": "EMAIL", "when": {"data_class": "pii.email", "point": "request"}, "then": "mask"}
]
}
Для проверки отправьте учебный email, чистый текст и injection с нужными tenant/app/point; дополнительно проверьте другую организацию, ответ модели и вывод инструмента. Draft не исполняется: используйте предусмотренную симуляцию или активируйте только на тестовом tenant staging. Простой инспектор показывает решение действующих политик, а не автоматически открытого черновика.
Наблюдать без блокировки
В целевом правиле замените block на flag, сохраняя условия и узкую область применения. flag пропускает текст и отмечает событие. Наличие другого правила block в активной политике всё равно блокирует запрос. Проверьте policy_id и rule_id победившего решения. Для отмены восстановите предыдущий документ / версию и повторите проверку.
Настроить маскирование
- Маскирование → Автообнаружение / Только классы вердикта.
- Нажмите Сохранить, затем Обновить и проверьте возвращённый режим.
- Протестируйте замену на учебных данных через реально подключённый защищаемый поток, а не только внешний вид переключателя.
2026-10-15 · Реальный изолированный Kubernetes-staging со своими PostgreSQL/Redis и синтетическим клиентом. Режим verdict_classes сохранён через UI и перечитан на обеих репликах, затем через UI восстановлен auto. Общие настройки клиентов не изменялись. Оригинальные пиксели без ретуши; этот кадр не доказывает все классы замен.
- Обновить
- Автообнаружение
- Только классы вердикта
- Сохранить
| Настройка | Смысл | Где менять |
|---|---|---|
auto | Повторный поиск всех известных приватных значений; auto_discover=true | Кнопка «Автообнаружение». |
verdict_classes | Замена классов первичного вердикта; auto_discover=false | «Только классы вердикта». |
iam_masking / заголовки X-IAM-Masking-Mode, Auto-Mask / Auto-Discover | Переопределение режима запроса по поддерживаемому контракту | Интеграция клиента. off/false здесь означают verdict_classes, а не полный bypass. |
iam_masking.session_id | Стабильный словарь KEY_N для диалога | Непрозрачный ID клиента; не передавайте персональные данные в ID. |
session_backend, session_encrypted, session_ttl_hours | Хранилище, шифрование и TTL словаря замены | Таблица только для чтения; конфигурация оператора. |
Router имеет дополнительный floor. Не переносите его автоматически на standalone Secure: это разные административные контракты. Hosted-версия сохраняет режим в общем Redis без TTL; перезапуск gateway и смена реплики его не сбрасывают. settings_backend=redis означает общее хранилище настроек; memory — только память процесса. Потеря Redis и резервное копирование остаются отдельной ответственностью оператора.
Custom DLP: добавить или изменить свой детектор
- Убедитесь, что редакция разрешает Custom DLP и у вас есть административные права.
- Передайте оператору JSON с массивом
patterns: стабильныйid, имяname, категорияcheck,severityиregex/keywords. Файл подключается черезIAM_SEC_CUSTOM_DLP_PATH. - Custom DLP → Перезагрузить, проверьте число загруженных паттернов. Экран не содержит редактора самого файла.
- В Проверить используйте положительный и отрицательный учебные примеры; затем создайте правило по ID обнаруженного класса и проверьте финальное действие.
- Для удаления детектора обновите файл и перечитайте его; проверьте политики, которые ссылались на этот ID. Выключение одного детектора не выключает остальные классы DLP.
Готовый файл и проверка совпадений
{
"patterns": [
{"id": "org.customer_id", "name": "Учебный номер клиента", "check": "dlp", "severity": "high", "regex": "\\bDOCS-CUST-[0-9]{6}\\b"},
{"id": "org.project_name", "name": "Учебный код проекта", "check": "dlp", "severity": "medium", "keywords": ["DOCS-PROJECT-ORION"]}
]
}
| Поле файла | Контракт и проверка |
|---|---|
id | Обязателен и уникален во всём файле; этот ID укажите в when.data_class политики. |
name | Название для оператора; не условие совпадения. |
check | secret, pii, dlp, toxicity; обязателен. Это категория проверки, не regex/keywords. |
severity | low, medium, high, critical; если не задана — medium. |
regex | Go/RE2, регистр зависит от выражения; двойной backslash нужен для JSON. |
keywords | Подстроки без учёта регистра; границы слов автоматически не добавляются. |
regex и keywords | Нужен хотя бы один непустой способ; оба можно задать в одном детекторе. |
Отдельных type, pattern и sensitivity в этом файловом контракте нет. Чувствительность в условии политики относится к вердикту инспекции, а не к произвольному полю custom-файла. Детекторы текущей версии общие для шлюза, не изолированы верхним tenant-фильтром; ограничивайте действие политики через её scope.
В Custom DLP → Проверить введите DOCS-CUST-123456: ожидайте org.customer_id в matched. Для DOCS-CUST-12345 совпадения нет. docs-project-orion должен находиться без учёта регистра; DOCS-PROJECT-OTHER — нет. Проверка возвращает совпадения и masked_text, но не исполняет все активные политики: отдельно проверьте итоговое решение защищённого запроса. Если «Перезагрузить» вернул reload_failed / 400, продолжает работать предыдущий успешно загруженный набор; исправьте файл и повторите чтение/проверку. 404 not_configured означает, что оператор не подключил путь.
Оповещения, коррелятор, webhook и SIEM
| Параметр | Где | Значение / эффект |
|---|---|---|
| Название, tenant, kind, data_class | Alert Rules → Добавить правило | Tenant * — все; класс пустой — все; тип — блокировки/injection/DLP/любое событие. |
threshold | Порог (событий) | > 0; число событий, а не severity или процент. |
window_minutes | Окно (мин) | ≥ 1; окно подсчёта. |
cooldown_minutes | Cooldown (мин) | ≥ 0; пауза между повторными оповещениями. |
enabled | Активно | Включает правило уведомления; не меняет защитное действие. |
injection_burst, dlp_burst | Инциденты → Коррелятор | Пороги создания групповых инцидентов. |
block_rate_min_reqs, block_rate_threshold, window_seconds | Коррелятор | Минимальная выборка, доля блокировок и окно; единицы не совпадают с Alert Rules. |
| URL, события, secret, enabled | Webhooks → Добавить webhook | Куда и какие события доставлять; secret используется получателем для подписи. |
| Ping / replay / deliveries | Карточка webhook | Тест/повторная доставка имеют внешний эффект; проверяйте реальные ответы получателя. |
| enabled / Endpoint / Format | SIEM → конфигурация → Сохранить | JSON / CEF / LEEF. Выключение касается экспорта. |
events_sent, last_sent, last_error | SIEM → статус экспортёра | Доказательство отправки или ошибка; запись настройки не означает доставку. |
2026-10-15 · Реальное приложение на staging, существующая операторская сессия. Только синтетические данные или обезличенные параметры; секреты и профиль оператора исключены из кадра. Кадр формы сам по себе не доказывает сохранение или согласованность всех реплик.
- Тенант
- Событие
- Порог / окно / cooldown
- Сохранить
Настроить коррелятор инцидентов
- Откройте Инциденты → Коррелятор → Настроить. Если панель отсутствует, проверьте доступность API коррелятора: это не доказательство выключенного анализа.
- Запишите прежние значения, измените нужные поля и нажмите Применить. Отмена сбрасывает несохранённый редактор.
- Перечитайте панель и сравните значения. Проверьте события тестового tenant, окно времени и созданный инцидент; новое решение обработки запроса этим не задаётся.
2026-10-15 · Реальное приложение на staging, существующая операторская сессия. Только синтетические данные или обезличенные параметры; секреты и профиль оператора исключены из кадра. Кадр формы сам по себе не доказывает сохранение или согласованность всех реплик.
- Порог инъекций
- Порог DLP
- Доля блокировок
- Окно, секунды
- Применить
| Поле | Допустимое значение | Исходный default / смысл |
|---|---|---|
Инъекции / injection_burst | Целое ≥ 1 | 3 события injection одного tenant в окне. |
DLP / dlp_burst | Целое ≥ 1 | 15 записей с обнаруженными классами одного tenant; несколько классов в записи не делают её несколькими событиями. |
Мин. запросов / block_rate_min_reqs | Целое ≥ 1 | 10 записей tenant перед оценкой доли блокировок. |
Блокировки (%) / block_rate_threshold | UI: 1–100%; API: доля > 0 и ≤ 1 | 50% = 0.5, не 50 в JSON. При 5 блокировках из 10 записей порог 0.5 достигнут. |
Окно (сек) / window_seconds | Целое ≥ 10 секунд | 600 секунд = 10 минут; относится также к подавлению повторов той же пары правило+tenant. |
Tick / tick_interval | Только чтение в UI/API изменения | 60 секунд между проходами; новые пороги используются на следующем проходе. |
Dedup / dedup_entries | Только чтение | Число ключей подавления повторов, не число угроз. Зелёная точка сама по себе не подтверждает свежий проход. |
API: GET /admin/incidents/correlation-config, затем PATCH по тому же адресу с административным правом записи и телом ниже; повторный GET возвращает окно строкой 10m0s, а не window_seconds.
{"injection_burst": 3, "dlp_burst": 15, "block_rate_min_reqs": 10, "block_rate_threshold": 0.5, "window_seconds": 600}
Это учебный пример исходных значений, не настройка вашего стенда. PATCH меняет только переданные поля; tick_interval не изменяется этим запросом. 422 — нарушен диапазон; 503 — коррелятор недоступен. Изменение runtime не обещает сохранение после рестарта или распространение на другие реплики: перечитайте значения на затронутом экземпляре. Для возврата примените прежние параметры и проверьте следующий проход. Коррелятор читает до 2000 последних записей в окне; на большом потоке его выборка не равна полной статистике всей организации. Нулём эти пороги не выключаются; выключение уведомления задаётся отдельным правилом Alert Rules.
Подключить SIEM
- Получите от администратора SIEM адрес и требуемый формат.
- SIEM → Endpoint URL → Формат событий → Включить SIEM экспорт → Сохранить.
- Токен получателя настраивает оператор через
IAM_SEC_SIEM_WEBHOOK_AUTH; интерфейс не показывает его. Не вставляйте токен в опубликованный URL. - Выполните Тестовая доставка только в согласованный получатель. Проверьте статус и событие на стороне SIEM.
- Для отключения снимите переключатель и сохраните; проверьте статус «Отключён». Анализ и локальный аудит продолжаются.
Сервисные параметры и хранилища
Значения ниже — исходные defaults, не утверждение о текущем hosted-стенде. Изменяет оператор; клиент запрашивает нужное значение и проверяет его через доступный контракт.
| Параметр | Default / единица | Что регулирует |
|---|---|---|
IAM_SEC_MASKING_MODE | auto | Базовый режим поиска для замены. |
IAM_SEC_CLASSIFIER_TIMEOUT_MS | 1500 мс | Ожидание инспектора. |
IAM_SEC_CLASSIFIER_BREAKER_THRESHOLD / IAM_SEC_CLASSIFIER_BREAKER_COOLDOWN_MS | 5 ошибок / 30000 мс | Открытие circuit breaker / ожидание новой попытки. |
IAM_SEC_PRIVATE_MASK_TTL_HOURS | 12 ч | Жизнь словаря замены. |
IAM_SEC_CUSTOM_DLP_PATH | Пусто | Подключение организационных детекторов. |
IAM_SEC_AUDIT_RING | 1000 записей | Недолговечный буфер аудита. |
IAM_SEC_RESPONSE_WINDOW_CHARS | 240 символов | Размер обычного текстового окна streaming-ответа; encoded/JSON данные удерживаются до конца. Не срок хранения. |
| Postgres / Redis / ключ шифрования | Конфигурация оператора | История, доступность аналитики и защищённые сессии. |
| Upstream / on-prem | Конфигурация подключения | Куда отправляется разрешённый / перенаправленный запрос; назначение требует реального подключённого провайдера. |
Все разделы приложения · Анализ трафика · FAQ
Согласованность реплик после сохранения
В hosted-версии, выпущенной 15.10.2026, политики сохраняются в общем PostgreSQL. Реплики перечитывают сохранённые overrides при чтении и перед принятием нового решения. После Сохранить политику, Активировать и Поставить на паузу отдельный ручной reload каждой реплики не требуется.
- Сохраните исходный JSON, ID и конкретный tenant. Создавайте и проверяйте изменения сначала как Черновик на staging.
- Сохраните документ, перечитайте GET /admin/policies/{id}?format=document и сравните scope, status, ID правил и все условия. Переход JSON → форма → JSON не должен терять
pointили явно заданныйfalse. - Включите тестовую политику и выполните новый
/v1/inspectсвоим клиентским ключом. Сверьтеdecision.action,policy_id,rule_idи Request ID. Администратор проверяет тот же документ и запрос через каждую обслуживающую реплику. - Поставить на паузу исключает только эту политику. Другие активные правила продолжают действовать, поэтому результат не обязан стать allow. Для возврата нажмите Активировать.
- При откате восстановите исходный документ или нужную версию и повторите чтение и контрольный запрос. Файловую базовую политику нельзя удалить через API: для временного исключения используйте паузу.
При недоступности общего хранилища запись не подтверждается как успешная; инспекция с непрочитанным актуальным набором политик блокируется. Не исправляйте ошибку хранилища изменением scope на * или ослаблением правил. В старых self-hosted версиях возможен прежний ручной reload; сначала уточните версию gateway у оператора.
Проверка общего staging выполнила сохранение через операторский редактор и active → block → paused → другое действующее правило → active на обеих репликах без reload. На отдельном изолированном staging заменены обе реплики; политика и выбранный режим сохранились.
Что подтверждено на работающем стенде
- Штатный SSO клиента, создание ключа, сохранение списка после reload, реальный API-запрос, отзыв и HTTP 401 старого ключа.
- Изменение лимитов клиента, чтение после полной перезагрузки, приостановка входа и восстановление — клиентский кабинет.
- Сохранение и переключение тестовой политики с контролем каждой реплики. Tenant-граница проверена; app-граница не исполнялась.
- Маскирование: общий контур сохраняет режим в Redis и перечитывает его между репликами. На отдельном реальном staging со своими PostgreSQL/Redis проверены UI-сохранение auto → verdict_classes → auto, сохранность после замены обоих pod, замена синтетического email на [CONTACT] у тестового получателя и отсутствие вызова получателя при block. Этот серверный механизм выпущен в hosted production. Приёмка не является проверкой всех классов замен или гарантией сохранности Redis после потери самого хранилища.
На безопасном вопросе о столице Франции /v1/inspect вернул HTTP 200, CONFIDENTIAL и reroute по другой политике. Это ложноположительная классификация, а не доказательство наличия секретов или успешной генерации ответа. Передайте оператору Request ID и обезличенный пример; не ослабляйте глобальную защиту ради зелёного теста.
Доступ шлюза к PostgreSQL
Для администратора self-hosted-контура. В hosted-версии клиент не получает доступ к БД: ключи приложения и роль оператора консоли не являются учётной записью PostgreSQL. Для настройки политик используйте консоль выше.
| Назначение | Разрешения |
|---|---|
| Работающий шлюз | Подключение к своей БД, чтение нужных таблиц, разрешённые INSERT/UPDATE/DELETE и использование последовательностей. Не владеет объектами и не состоит в административных ролях. |
| Владелец схемы | Отдельная роль без LOGIN. Используется администратором при контролируемой миграции. |
| Резервное копирование | Отдельная учётная запись с SELECT таблиц и последовательностей. Не изменяет данные. |
| Обслуживание БД | Отдельный локальный оператор; peer-аутентификация от пользователя ОС postgres. Сетевой вход этой роли запрещён. |
У роли шлюза отключены SUPERUSER, CREATEROLE, CREATEDB, REPLICATION и BYPASSRLS. Запрещены изменение схемы, DROP/TRUNCATE, отключение триггеров, серверные команды и чтение файлов сервера. Это не заменяет изоляцию tenant на уровне приложения и не делает аудит неизменяемым: штатное удаление аудита по сроку хранения остаётся разрешено.
- До ограничения прав сделайте согласованную резервную копию и восстановите её в отдельной БД. Сохраните параметры аутентификации и роли отдельно от публичной документации.
- Установите схему административной ролью. Для работающего шлюза задайте IAM_DB_SCHEMA_MODE=verify: запуск проверяет схему без CREATE/ALTER. Ошибки миграции исправляйте через администратора, без выдачи SUPERUSER шлюзу.
- Разделите владельца, рабочую роль и резервное копирование. В существующей установке сохраните пароль DSN; не подменяйте его паролем администратора. Для дампов необходим SELECT последовательностей, который не нужен шлюзу.
- Перезапустите реплики gateway последовательно. Убедитесь, что все физические подключения прежней привилегированной роли закрыты; смена флагов роли сама по себе не завершает старые подключения.
- Проверьте создание, ротацию и отзыв тестового ключа, сохранение политики, Активировать → Поставить на паузу, аудит/инциденты, сохранённый поиск и восстановление из резервной копии. Удалите временные ключи; не очищайте клиентские таблицы для теста.
Если после обновления не сохраняются настройки. Проверьте режим verify, доступ к нужной БД и точечные DML-права по журналу ошибки. Для ключей нужен UPDATE(version, updated_at) таблицы версии кэша: его вызывает триггер. Для архива оригиналов нужен UPDATE(ciphertext, status), для истории — INSERT и USAGE выделяющей последовательности. Исправляйте конкретное разрешение и повторяйте сценарий на staging. Не включайте режим migrate в рабочем gateway с ограниченной ролью.