Перейти к содержанию

Инфраструктурные сервисы

PostgreSQL

Общая информация

Параметр Значение
Версия PostgreSQL 16 (Alpine)
Контейнер postgres
IP-адрес 172.28.0.10
Порт 5432
База данных genai (основная), keycloak (отдельная)
Строка подключения postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/genai

Архитектура: одна БД — несколько схем

Вместо отдельных баз данных для каждого микросервиса используется подход одна база данных (genai) с раздельными схемами. Это упрощает управление и снижает потребление ресурсов.

graph TB
    subgraph PG["PostgreSQL"]
        subgraph DB1["База данных: genai"]
            S1[model_management]
            S2[scan_profile]
            S3[results]
            S4[scan_orchestrator]
            S5[jailbreak_service]
            S6[user_management]
            S7[notification]
            S8[auth]
            S9[licensing]
            S10[asr_adversarial]
            S11[cv_adversarial]
        end
        subgraph DB2["База данных: keycloak"]
            KC[Keycloak data]
        end
    end

    classDef cluster fill:transparent,stroke:#888,stroke-width:1px
    class PG,DB1,DB2 cluster

Схемы базы данных

Схема Сервис Описание
model_management Model Management Каталог AI/ML-моделей, контракты, мониторинг, probe
scan_profile Scan Profile Профили сканирования, определения атак, совместимость
results Results Результаты сканирования, уязвимости, артефакты
scan_orchestrator Scan Orchestrator Оркестрация сканирования, задания, состояния
jailbreak_service Jailbreak Service Промпты, шаблоны, библиотека Jailbreak-техник
asr_adversarial ASR Adversarial Данные ASR-атак
cv_adversarial CV Adversarial Данные CV-атак
auth Auth Service Авторизация, роли, сессии
licensing License Service Лицензии, ключи, ограничения
user_management (зарезервирована) Управление пользователями (обёртка над Keycloak)
notification (зарезервирована) Уведомления, предпочтения, история доставки

Расширения PostgreSQL

В базе genai установлены следующие расширения:

Расширение Описание
uuid-ossp Генерация UUID (функции uuid_generate_v4() и др.)
pg_trgm Триграммный поиск по тексту (используется для fuzzy-поиска моделей)

Миграции

Каждый микросервис управляет миграциями своей схемы через Alembic. Миграции выполняются автоматически при запуске платформы через one-shot контейнеры:

# Пример: контейнер model-management-migrations выполняет
alembic upgrade head

Для ручного управления миграциями:

# Проверка текущей версии миграции
docker exec -it model-management alembic current

# Откат последней миграции
docker exec -it model-management alembic downgrade -1

# Применение всех миграций
docker exec -it model-management alembic upgrade head

Резервное копирование

# Полный дамп базы данных
docker exec postgres pg_dump -U postgres genai > backup_genai_$(date +%Y%m%d_%H%M%S).sql

# Дамп конкретной схемы
docker exec postgres pg_dump -U postgres -n model_management genai > backup_model_management.sql

# Восстановление из дампа
docker exec -i postgres psql -U postgres genai < backup_genai_YYYYMMDD_HHMMSS.sql

Рекомендация

Настройте регулярное автоматическое резервное копирование (например, через cron) с хранением последних N копий.


NATS JetStream

Общая информация

Параметр Значение
Версия NATS 2.10 (Alpine)
Тип развёртывания Кластер из 3 узлов
Имя кластера appsec-genai-cluster
Репликация 3 реплики для каждого потока

Узлы кластера

Узел Контейнер IP-адрес Client Monitoring Cluster
Node 1 nats-1 172.28.0.20 4222 8222 6222
Node 2 nats-2 172.28.0.21 4223 8223 6223
Node 3 nats-3 172.28.0.22 4224 8224 6224

Потоки JetStream

Все потоки создаются автоматически контейнером nats-init с replicas=3:

Поток Subjects Retention Max Age Max Msg Size Описание
ATTACKS attacks.*.* limits 7 дней 10 МБ Распределение заданий атак между воркерами
SCANS scans.* limits 30 дней 1 МБ Жизненный цикл сканирований (создание, обновление, завершение)
RESULTS results.*.* limits 90 дней 10 МБ Результаты атак и уязвимости
ARTIFACTS artifacts.*.* limits 30 дней 10 МБ Артефакты атак (ссылки на S3)
VULNERABILITIES vulnerabilities.*.* limits 90 дней 5 МБ Детальные данные уязвимостей
NOTIFICATIONS notifications.* workq 7 дней 1 МБ Очередь уведомлений

Подписки (Consumer Groups)

Каждый микросервис подписывается на соответствующие subjects:

Сервис Подписка Тип Описание
Scan Orchestrator attacks.*.* Publisher Публикует задания атак
Scan Orchestrator scans.* Publisher Публикует события сканирований
Jailbreak workers attacks.jailbreak.* Consumer Получают задания Jailbreak-атак
ASR workers attacks.asr.* Consumer Получают задания ASR-атак
CV workers attacks.cv.* Consumer Получают задания CV-атак
Results results.*.* Consumer Получает результаты от всех атакующих сервисов
Jailbreak reporter results.jailbreak.* Publisher Публикует результаты Jailbreak
ASR reporter results.asr.* Publisher Публикует результаты ASR
CV reporter results.cv.* Publisher Публикует результаты CV

Мониторинг NATS

Состояние кластера доступно через HTTP monitoring:

# Healthcheck
curl -s http://localhost:8222/healthz

# Информация о сервере
curl -s http://localhost:8222/varz | jq .

# Информация о JetStream
curl -s http://localhost:8222/jsz | jq .

# Список потоков
curl -s http://localhost:8222/jsz?streams=true | jq '.streams[]'

# Информация о подключениях
curl -s http://localhost:8222/connz | jq .

Ручное управление потоками

При необходимости потоки можно создать/пересоздать вручную:

# Подключение к NATS Box
docker run --rm -it --network appsec-genai natsio/nats-box

# Список потоков
nats stream list --server=nats://nats-1:4222

# Информация о потоке
nats stream info ATTACKS --server=nats://nats-1:4222

# Удаление и пересоздание потока
nats stream delete ATTACKS --server=nats://nats-1:4222 --force
nats stream add ATTACKS --subjects='attacks.*.*' --storage=file \
    --retention=limits --max-age=7d --max-msg-size=10MB \
    --replicas=3 --server=nats://nats-1:4222 --defaults

Redis

Общая информация

Параметр Значение
Версия Redis 7 (Alpine)
Контейнер redis
IP-адрес 172.28.0.30
Порт 6379
Максимальная память 512 МБ
Политика вытеснения allkeys-lru
Персистентность RDB + AOF

Распределение баз данных

DB Сервис Хранимые данные
0 Model Management, Jailbreak Кеш моделей, статусы задач Jailbreak
1 Scan Orchestrator, Auth Service Статусы сканирований, блокировки, сессии
2 ASR Adversarial, License Service Статусы задач ASR, кеш лицензий
3 CV Adversarial Статусы задач CV, кеш весов моделей

Мониторинг Redis

# Статус сервера
docker exec redis redis-cli info

# Количество ключей по базам
docker exec redis redis-cli info keyspace

# Использование памяти
docker exec redis redis-cli info memory

# Мониторинг команд в реальном времени
docker exec redis redis-cli monitor

# Количество подключённых клиентов
docker exec redis redis-cli info clients

MinIO (S3-совместимое хранилище)

Общая информация

Параметр Значение
Контейнер minio
IP-адрес 172.28.0.40
API порт 9000
Console порт 9001
Режим Single-node

Бакеты и файлы по умолчанию

При инициализации в бакеты загружаются файлы по умолчанию из контейнера simples-defaults:

Бакет Файл Описание
cv-images defaults/panda.jpg Тестовое изображение для CV-атак
audio-samples defaults/daba_sample.wav Тестовый аудиофайл для ASR-атак
model-weights defaults/vgg19_imagenet.pt Веса модели VGG19 (ImageNet)
model-weights defaults/resnet50_imagenet.pt Веса модели ResNet50 (ImageNet)
model-weights defaults/openai_whisper_base.zip Веса модели Whisper Base

Presigned URLs

Для безопасного доступа к файлам из браузера используются presigned URLs — временные подписанные ссылки:

GET /api/v1/models/{id}/weights/download?expiration_seconds=3600

Параметр expiration_seconds задаёт время жизни ссылки (по умолчанию 3600 секунд = 1 час).

Доступ к MinIO Console

Веб-консоль MinIO доступна по адресу http://localhost:9001:

  • Логин: значение S3_ADMIN_USER из .env (по умолчанию minioadmin).
  • Пароль: значение S3_ADMIN_PASSWORD из .env.

Через консоль можно:

  • Просматривать содержимое бакетов.
  • Загружать и скачивать файлы.
  • Управлять политиками доступа.
  • Мониторить использование дискового пространства.

Keycloak

Общая информация

Параметр Значение
Версия Keycloak 23.0
Контейнер keycloak
IP-адрес 172.28.0.50
Порт (внешний) 8180
Порт (внутренний) 8080
Realm appsec-genai

Конфигурация

Keycloak использует собственную базу данных keycloak в PostgreSQL. При первом запуске автоматически импортируется realm из файла auth-service/keycloak/realm-export.json.

Доступ к консоли администратора

http://localhost:8180
  • Логин: значение KEYCLOAK_ADMIN из .env (по умолчанию admin).
  • Пароль: значение KEYCLOAK_ADMIN_PASSWORD из .env.

Роли пользователей

Группа Keycloak Роль в системе Описание
asg-viewer viewer Просмотр результатов
asg-user user Запуск сканирований
asg-power-user power_user Управление моделями и профилями
asg-admin admin Полный доступ

Аутентификация

По умолчанию аутентификация отключена (AUTH_ENABLED=false). Для включения установите AUTH_ENABLED=true в переменных UI Gateway и убедитесь, что Keycloak настроен корректно.