Files
2026-06-11 21:38:19 +04:00

131 lines
6.6 KiB
Markdown

# Техническое задание
## Микросервис управления доверенными адресами клиентов (Белые списки 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=<id>` — выгрузка по конкретной компании
---
# 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.