131 lines
6.6 KiB
Markdown
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.
|