# Техническое задание ## Микросервис управления доверенными адресами клиентов (Белые списки IP) --- # 1. Назначение Клиенты облачного провайдера через личный кабинет управляют своими доверенными IPv4-адресами. Эти адреса исключаются из блокировки при DDoS-атаках. Администраторы Нубеса могут просматривать и редактировать списки всех клиентов. --- # 2. Авторизация ## 2.1. Вход Пользователь входит через Keycloak (OIDC). После входа приложение запрашивает IAM API — сервис авторизации экосистемы Nubes. IAM возвращает: - email пользователя - список компаний, к которым он принадлежит - активную компанию - флаг администратора (isAdmin) ## 2.2. Роли | Роль | Возможности | |---|---| | Клиент | Видит и редактирует только записи своих компаний | | Администратор Нубеса | Видит и редактирует записи всех компаний, меняет лимиты, смотрит аудит, выгружает списки | Администратором считается пользователь с `isAdmin = true` в IAM и `clientId = WZ01112`. Если у пользователя несколько компаний, он переключается между ними. ## 2.3. Режим администратора Пользователь Нубеса видит переключатель «Администратор». В обычном режиме интерфейс как у клиента. При включении — выпадающий список всех компаний, ссылки на аудит и управление лимитами. --- # 3. Управление записями ## 3.1. Просмотр Клиент видит таблицу записей своей компании. Администратор выбирает компанию из списка. Для каждой записи показывается: адрес/подсеть, комментарий, кто добавил, даты создания и изменения. Удалённые записи отображаются зачёркнутыми и полупрозрачными, без кнопок редактирования. Кнопки «Изменить» и «Удалить» — в строке таблицы. Счётчик: «X из N записей». ## 3.2. Добавление Форма: IPv4-адрес или CIDR, комментарий (необязательно, до 255 символов). Проверки: - Формат: только IPv4, одиночный адрес или подсеть /22–/32 - Нормализация: хост-биты обнуляются, пользователь уведомляется - Запрещённые диапазоны: 14 служебных подсетей (RFC1918, CGNAT, loopback и др.) - Нет дубликатов и пересечений внутри компании - Лимит компании (по умолчанию 15) При превышении лимита — блокировка с сообщением. ## 3.3. Редактирование Изменение адреса и комментария. Все проверки — как при добавлении. ## 3.4. Удаление Логическое (soft delete): запись помечается удалённой, но физически сохраняется. Освобождает место в лимите. Исключается из выгрузки. --- # 4. Лимиты - По умолчанию: 15 записей на компанию - Администратор задаёт индивидуальный лимит компании (больше или меньше) - Снижение лимита не удаляет существующие записи, но блокирует новые --- # 5. Экспорт Администратор выгружает агрегированный список всех активных CIDR. - По умолчанию — JSON: `{ cidrs: [...], count: N }` - `?format=txt` — текстовый файл, одна подсеть на строку - `?company=` — выгрузка по конкретной компании --- # 6. Аудит Все изменения (создание, редактирование, удаление) пишутся в журнал. Записи неизменяемы. Состав записи: кто сделал, когда, компания, действие, старое и новое значение. При имперсонации добавляется поле «имперсонировал» — кто на самом деле совершил действие. Журнал доступен только администратору. Фильтр по компании. --- # 7. Имперсонация Администратор IAM может «притворяться» другим пользователем или компанией. Приложение получает флаг `is_impersonated` из IAM. При активной имперсонации: - Жёлтый баннер: «Режим имперсонации — от имени Компания (вы: originalUserEmail)» - CRUD идёт в контексте имперсонируемой компании - Аудит: `created_by = имперсонируемый`, `impersonated_by = реальный админ` Без имперсонации `impersonated_by = NULL`. --- # 8. Интерфейс - Главная страница: таблица записей, форма добавления, переключатель компаний - Аудит: `/audit` — журнал с фильтром по компании - Лимиты: `/admin` — список компаний с лимитами - Экспорт: `/export` — выгрузка списка Шапка: логотип, версия приложения, email пользователя, переключатель «Администратор», кнопка «Выйти». --- # 9. Технологии Node.js, Express, EJS, PostgreSQL, Keycloak OIDC, IAM API.