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

Конфигурация микросервисов

Каждый микросервис платформы конфигурируется через переменные окружения, задаваемые в файле docker-compose.yml. В этом разделе приведены полные таблицы переменных для каждого сервиса.

Общий принцип

Переменные, использующие синтаксис ${VAR:-default}, наследуют значение из файла .env. Если переменная не задана в .env, используется значение по умолчанию после :-.


Model Management (порт 8001)

Назначение: каталог AI/ML-моделей, управление контрактами, мониторинг состояния моделей, хранение весов в S3.

Контейнеры: model-management-migrations, model-management-cv-seed, model-management

IP-адрес: 172.28.0.100

Healthcheck: GET http://localhost:8000/healthz

Переменная Значение Описание
APP_NAME Model Management Service Имя сервиса (отображается в логах и трейсинге)
APP_VERSION 0.1.0 Версия сервиса
ENVIRONMENT ${ENVIRONMENT:-dev} Режим работы: dev, staging, production
DEBUG ${DEBUG:-false} Режим отладки
LOG_LEVEL ${LOG_LEVEL:-INFO} Уровень логирования: DEBUG, INFO, WARNING, ERROR
JSON_LOGS ${JSON_LOGS:-true} Формат логов JSON (рекомендуется для production)
DATABASE_URL postgresql+asyncpg://...@postgres:5432/genai Строка подключения к БД (schema: model_management)
DATABASE_POOL_SIZE ${DATABASE_POOL_SIZE:-20} Размер пула подключений к БД
DATABASE_MAX_OVERFLOW ${DATABASE_MAX_OVERFLOW:-10} Дополнительные подключения сверх пула
REDIS_URL redis://redis:6379/0 Подключение к Redis (DB 0)
NATS_URL nats://nats-1:4222 Подключение к NATS JetStream
NATS_MAX_RECONNECTS ${NATS_MAX_RECONNECTS:-10} Макс. количество попыток переподключения к NATS
OTLP_ENDPOINT http://jaeger:4317 Endpoint OpenTelemetry (Jaeger)
S3_ENDPOINT_URL http://minio:9000 Endpoint MinIO S3 API
S3_ACCESS_KEY ${S3_ADMIN_USER:-minioadmin} Ключ доступа MinIO
S3_SECRET_KEY ${S3_ADMIN_PASSWORD:-minioadmin} Секретный ключ MinIO
S3_BUCKET_NAME model-weights Бакет для хранения весов моделей
S3_REGION us-east-1 Регион S3
API_PREFIX /api/v1 Префикс API-маршрутов

Scan Profile (порт 8002)

Назначение: управление профилями сканирования, реестр определений атак (27+ атак), JSON Schema валидация конфигураций, хранение аудио- и изображений.

Контейнеры: scan-profile-migrations, scan-profile-seed, scan-profile.

IP-адрес: 172.28.0.101.

Healthcheck: GET http://localhost:8000/healthz.

Переменная Значение Описание
SERVICE_NAME scan-profile Имя сервиса
ENVIRONMENT ${ENVIRONMENT:-dev} Режим работы
DEBUG ${DEBUG:-false} Режим отладки
LOG_LEVEL ${LOG_LEVEL:-INFO} Уровень логирования
LOG_FORMAT ${LOG_FORMAT:-json} Формат логов: json или text
DATABASE_URL postgresql+asyncpg://...@postgres:5432/genai Строка подключения к БД (schema: scan_profile)
DATABASE_POOL_SIZE ${DATABASE_POOL_SIZE:-20} Размер пула подключений
DATABASE_MAX_OVERFLOW ${DATABASE_MAX_OVERFLOW:-10} Дополнительные подключения
API_PREFIX /api/v1 Префикс API-маршрутов
CORS_ORIGINS ${CORS_ORIGINS:-*} Разрешённые CORS-домены
OTEL_ENABLED ${OTEL_ENABLED:-true} Включение OpenTelemetry
OTEL_EXPORTER_OTLP_ENDPOINT http://jaeger:4317 Endpoint Jaeger
OTEL_SERVICE_NAME scan-profile Имя сервиса в трейсах
MODEL_MANAGEMENT_URL http://model-management:8000 URL сервиса управления моделями
S3_ENDPOINT http://minio:9000 Endpoint MinIO
S3_ACCESS_KEY ${S3_ADMIN_USER:-minioadmin} Ключ доступа
S3_SECRET_KEY ${S3_ADMIN_PASSWORD:-minioadmin} Секретный ключ
S3_AUDIO_BUCKET audio-samples Бакет для аудиофайлов
S3_IMAGE_BUCKET cv-images Бакет для изображений
S3_USE_SSL false Использование SSL при подключении к MinIO
S3_PUBLIC_ENDPOINT ${S3_PUBLIC_ENDPOINT:-http://localhost:9000} Публичный URL для presigned URLs
PRESIGNED_URL_EXPIRY 3600 Время жизни presigned URL в секундах (1 час)
MAX_AUDIO_FILE_SIZE_MB 100 Максимальный размер аудиофайла (МБ)
MAX_IMAGE_FILE_SIZE_MB 50 Максимальный размер изображения (МБ)

Results (порт 8003)

Назначение: хранение результатов сканирования, уязвимостей и артефактов. Подписка на поток RESULTS из NATS.

Контейнеры: results-migrations, results.

IP-адрес: 172.28.0.102.

Healthcheck: GET http://localhost:8002/healthz.

Внутренний порт

Сервис Results слушает на внутреннем порту 8002, но мапится на хостовый порт 8003.

Переменная Значение Описание
SERVICE_NAME results Имя сервиса
SERVICE_VERSION 1.0.0 Версия
ENVIRONMENT ${ENVIRONMENT:-dev} Режим работы
DEBUG ${DEBUG:-false} Режим отладки
LOG_LEVEL ${LOG_LEVEL:-INFO} Уровень логирования
LOG_FORMAT ${LOG_FORMAT:-json} Формат логов
DATABASE_URL postgresql+asyncpg://...@postgres:5432/genai Строка подключения (schema: results)
DATABASE_POOL_SIZE ${DATABASE_POOL_SIZE:-20} Размер пула
DATABASE_MAX_OVERFLOW ${DATABASE_MAX_OVERFLOW:-10} Дополнительные подключения
NATS_URL nats://nats-1:4222 Подключение к NATS
NATS_STREAM_NAME RESULTS Имя потока для подписки
NATS_CONSUMER_NAME results-consumer Имя consumer-группы
S3_ENDPOINT http://minio:9000 Endpoint MinIO
S3_PUBLIC_ENDPOINT ${S3_PUBLIC_ENDPOINT:-http://localhost:9000} Публичный URL MinIO
S3_ACCESS_KEY ${S3_ADMIN_USER:-minioadmin} Ключ доступа
S3_SECRET_KEY ${S3_ADMIN_PASSWORD:-minioadmin} Секретный ключ
S3_BUCKET_NAME results-artifacts Основной бакет результатов
S3_CV_ARTIFACTS_BUCKET cv-attack-artifacts Бакет CV-артефактов
S3_ASR_ARTIFACTS_BUCKET asr-attack-artifacts Бакет ASR-артефактов
S3_ALLOWED_BUCKETS ["cv-attack-artifacts","cv-images","asr-attack-artifacts","audio-samples"] Разрешённые бакеты для чтения
S3_REGION us-east-1 Регион
S3_USE_SSL false Использование SSL
API_HOST 0.0.0.0 Адрес привязки API
API_PORT 8002 Внутренний порт API
API_PREFIX /api/v1 Префикс маршрутов
CORS_ORIGINS ["*"] CORS-домены
EXPORT_MAX_RECORDS ${EXPORT_MAX_RECORDS:-10000} Лимит записей для экспорта

Scan Orchestrator (порт 8004)

Назначение: оркестрация жизненного цикла сканирования, распределение задач атак через NATS, координация между сервисами.

Контейнеры: scan-orchestrator-migrations, scan-orchestrator.

IP-адрес: 172.28.0.103.

Healthcheck: GET http://localhost:8000/healthz.

Переменная Значение Описание
SERVICE_NAME scan-orchestrator Имя сервиса
SERVICE_VERSION 1.0.0 Версия
ENVIRONMENT ${ENVIRONMENT:-development} Режим работы
DEBUG ${DEBUG:-false} Режим отладки
LOG_LEVEL ${LOG_LEVEL:-INFO} Уровень логирования
LOG_FORMAT ${LOG_FORMAT:-json} Формат логов
DATABASE_URL postgresql+asyncpg://...@postgres:5432/genai Строка подключения (schema: scan_orchestrator)
DATABASE_POOL_SIZE ${DATABASE_POOL_SIZE:-20} Размер пула
DATABASE_MAX_OVERFLOW ${DATABASE_MAX_OVERFLOW:-10} Дополнительные подключения
NATS_URL nats://nats-1:4222 Подключение к NATS
NATS_SCANS_STREAM SCANS Поток событий сканирования
NATS_ATTACKS_STREAM ATTACKS Поток заданий атак
NATS_MAX_RECONNECTS ${NATS_MAX_RECONNECTS:-10} Попытки переподключения
REDIS_URL redis://redis:6379/1 Подключение к Redis (DB 1)
MODEL_MANAGEMENT_URL http://model-management:8000 URL Model Management
SCAN_PROFILES_URL http://scan-profile:8000 URL Scan Profile
RESULTS_SERVICE_URL http://results:8002 URL Results
LICENSE_SERVICE_URL http://license-service:8000 URL License Service
JAILBREAK_SERVICE_URL http://jailbreak-api:8000 URL Jailbreak API
ASR_SERVICE_URL http://asr-adversarial-api:8000 URL ASR API
CV_SERVICE_URL http://cv-adversarial-api:8000 URL CV API
API_HOST 0.0.0.0 Адрес привязки
API_PORT 8000 Внутренний порт
API_PREFIX /api/v1 Префикс маршрутов
API_TITLE Scan Orchestrator API Заголовок в Swagger
API_VERSION 1.0.0 Версия API
CORS_ORIGINS ["*"] CORS-домены
CORS_ALLOW_CREDENTIALS true Разрешение credentials
WORKER_ENABLED true Включение NATS-воркера
WORKER_SHUTDOWN_GRACE_PERIOD 30 Период ожидания при остановке (сек)
CIRCUIT_BREAKER_FAILURE_THRESHOLD 5 Порог ошибок для срабатывания circuit breaker
CIRCUIT_BREAKER_RECOVERY_TIMEOUT 60 Время восстановления circuit breaker (сек)
CIRCUIT_BREAKER_HALF_OPEN_ATTEMPTS 3 Количество пробных запросов в состоянии half-open

Jailbreak Service (порт 8005)

Назначение: тестирование LLM-моделей на Jailbreak-уязвимости. Включает конвейер трансформации промптов (24 техники), атакующие алгоритмы (Penetrator, PAIR, GCG, TAP, Crescendo), оценку ответов и формирование отчётов.

Количество контейнеров: 7 (migrations, seed, api, preparator, attacker, judge, reporter).

IP-адрес API: 172.28.0.105.

Healthcheck API: GET http://localhost:8000/healthz.

Общие переменные (для всех контейнеров Jailbreak)

Переменная Значение Описание
SERVICE_NAME jailbreak-service Имя сервиса
SERVICE_VERSION 1.0.0 Версия
DATABASE_URL postgresql+asyncpg://...@postgres:5432/genai Строка подключения (schema: jailbreak_service)
REDIS_URL redis://redis:6379/0 Подключение к Redis (DB 0)
NATS_URL nats://nats-1:4222 Подключение к NATS
S3_ENDPOINT minio:9000 Endpoint MinIO (без протокола)
S3_ACCESS_KEY ${S3_ADMIN_USER:-minioadmin} Ключ доступа
S3_SECRET_KEY ${S3_ADMIN_PASSWORD:-minioadmin} Секретный ключ
S3_BUCKET jailbreak-reports Бакет для отчётов
S3_SECURE false SSL для MinIO

Контейнеры Jailbreak Service

Контейнер Команда Описание
jailbreak-api uvicorn api.main:app REST API — приём заданий, статус, результаты
jailbreak-preparator python -m preparator.main Подготовка промптов, применение трансформаций
jailbreak-attacker python -m attacker.main Выполнение атак на целевую LLM
jailbreak-judge python -m judge.main Оценка ответов на успешность jailbreak
jailbreak-reporter python -m reporter.main Формирование отчётов и сохранение результатов

Ollama (локальный LLM)

Контейнер jailbreak-attacker содержит extra_hosts: host.docker.internal:host-gateway, что позволяет подключаться к Ollama, запущенному на хост-машине. Настройте URL модели в профиле сканирования, указав http://host.docker.internal:11434.


ASR Adversarial (порт 8025)

Назначение: тестирование моделей распознавания речи (ASR) на состязательные атаки: DABA, PIBA, FGSM Audio, Noise Injection, Jingleback, Ultrasonic, Trigger.

Количество контейнеров: 6 (migrations, api, preparator, attacker, judge, reporter).

IP-адрес API: 172.28.0.106.

Healthcheck API: GET http://localhost:8000/healthz.

Общие переменные (для всех контейнеров ASR)

Переменная Значение Описание
SERVICE_NAME asr-adversarial-service Имя сервиса
SERVICE_VERSION 1.0.0 Версия
DATABASE_URL postgresql+asyncpg://...@postgres:5432/genai Строка подключения (schema: asr_adversarial)
REDIS_URL redis://redis:6379/2 Подключение к Redis (DB 2)
NATS_URL nats://nats-1:4222 Подключение к NATS
S3_ENDPOINT http://minio:9000 Endpoint MinIO
S3_ACCESS_KEY ${S3_ADMIN_USER:-minioadmin} Ключ доступа
S3_SECRET_KEY ${S3_ADMIN_PASSWORD:-minioadmin} Секретный ключ
S3_BUCKET asr-attack-artifacts Бакет артефактов атак
S3_SECURE false SSL для MinIO
S3_AUDIO_BUCKET audio-samples Бакет исходных аудиофайлов

Дополнительные переменные attacker-контейнера

Переменная Значение Описание
MODEL_MANAGEMENT_URL http://model-management:8000 URL для получения информации о моделях
MODEL_WEIGHTS_S3_ENDPOINT minio:9000 S3 endpoint для скачивания весов моделей
MODEL_WEIGHTS_S3_BUCKET model-weights Бакет с весами моделей
MODEL_WEIGHTS_S3_ACCESS_KEY ${S3_ADMIN_USER:-minioadmin} Ключ доступа к весам
MODEL_WEIGHTS_S3_SECRET_KEY ${S3_ADMIN_PASSWORD:-minioadmin} Секретный ключ
MODEL_WEIGHTS_S3_SECURE false SSL
WHISPER_DEVICE auto Устройство для Whisper: auto, cpu, cuda
NVIDIA_VISIBLE_DEVICES all Доступные GPU для whitebox-атак

Контейнеры ASR Service

Контейнер Команда Описание
asr-adversarial-api uvicorn api.main:app REST API
asr-adversarial-preparator python -m preparator.main Подготовка аудио, скачивание весов
asr-adversarial-attacker python -m attacker.main Выполнение состязательных атак
asr-adversarial-judge python -m judge.main Оценка результатов атак
asr-adversarial-reporter python -m reporter.main Формирование отчётов

CV Adversarial (порт 8008)

Назначение: тестирование моделей компьютерного зрения (CV) на состязательные атаки: FGSM, I-FGSM, MI-FGSM, PGD, C&W, DeepFool, UAP, APP, TI, JSMA, L-BFGS, LogBarrier, ILA, ZOO, Substitute, TREMBA, OnePixel, ReColorAdv, SinIR.

Количество контейнеров: 6 (migrations, api, preparator, attacker, judge, reporter).

IP-адрес API: 172.28.0.115.

Healthcheck API: GET http://localhost:8000/healthz.

Общие переменные (для всех контейнеров CV)

Переменная Значение Описание
SERVICE_NAME cv-adversarial-service Имя сервиса
SERVICE_VERSION 1.0.0 Версия
DATABASE_URL postgresql+asyncpg://...@postgres:5432/genai Строка подключения (schema: cv_adversarial)
REDIS_URL redis://redis:6379/3 Подключение к Redis (DB 3)
NATS_URL nats://nats-1:4222 Подключение к NATS
S3_ENDPOINT minio:9000 Endpoint MinIO (без протокола)
S3_ACCESS_KEY ${S3_ADMIN_USER:-minioadmin} Ключ доступа
S3_SECRET_KEY ${S3_ADMIN_PASSWORD:-minioadmin} Секретный ключ
S3_BUCKET cv-attack-artifacts Бакет артефактов CV-атак
S3_SECURE false SSL для MinIO

Дополнительные переменные attacker-контейнера

Переменная Значение Описание
MODEL_MANAGEMENT_URL http://model-management:8000 URL Model Management
MODEL_WEIGHTS_S3_ENDPOINT minio:9000 S3 endpoint для весов моделей
MODEL_WEIGHTS_S3_BUCKET model-weights Бакет с весами моделей
MODEL_WEIGHTS_S3_ACCESS_KEY ${S3_ADMIN_USER:-minioadmin} Ключ доступа
MODEL_WEIGHTS_S3_SECRET_KEY ${S3_ADMIN_PASSWORD:-minioadmin} Секретный ключ
MODEL_WEIGHTS_S3_SECURE false SSL
MODEL_CACHE_DIR /tmp/cv-adversarial-models Директория кеша моделей внутри контейнера
MODEL_CACHE_MAX_SIZE_GB 10.0 Макс. размер кеша моделей (ГБ)

Контейнеры CV Service

Контейнер Команда Описание
cv-adversarial-api uvicorn api.main:app REST API
cv-adversarial-preparator python -m preparator.main Подготовка изображений, скачивание весов
cv-adversarial-attacker python -m attacker.main Выполнение состязательных атак
cv-adversarial-judge python -m judge.main Оценка результатов
cv-adversarial-reporter python -m reporter.main Формирование отчётов

UI Gateway (порт 3000)

Назначение: Backend-For-Frontend (BFF) на базе NestJS. Проксирует запросы от Angular UI ко всем Python-микросервисам, выполняя автоматическое преобразование camelCase (JavaScript) в snake_case (Python) и обратно. Поддерживает WebSocket для обновлений статусов сканирования в реальном времени.

Контейнер: ui-gateway.

IP-адрес: 172.28.0.120.

Переменная Значение Описание
NODE_ENV production Режим работы Node.js
PORT 3000 Порт API Gateway
CORS_ORIGIN http://localhost:8080 Разрешённый CORS-домен (URL UI)
MOCK_MODE false Режим моков — для разработки без бэкенда
MODEL_MANAGEMENT_URL http://model-management:8000 URL Model Management
SCAN_ORCHESTRATOR_URL http://scan-orchestrator:8000 URL Scan Orchestrator
SCAN_PROFILE_URL http://scan-profile:8000 URL Scan Profile
RESULTS_SERVICE_URL http://results:8002 URL Results
JAILBREAK_SERVICE_URL http://jailbreak-api:8000 URL Jailbreak
LICENSE_SERVICE_URL http://license-service:8000 URL License Service
CV_ADVERSARIAL_URL http://cv-adversarial-api:8000 URL CV Adversarial
ASR_ADVERSARIAL_URL http://asr-adversarial-api:8000 URL ASR Adversarial
S3_INTERNAL_URL http://minio:9000 Внутренний URL MinIO
S3_PUBLIC_URL ${S3_PUBLIC_URL:-http://localhost:9000} Публичный URL MinIO (для presigned URLs)
CV_ARTIFACTS_BUCKET cv-attack-artifacts Бакет CV-артефактов
ASR_ARTIFACTS_BUCKET asr-attack-artifacts Бакет ASR-артефактов
AUTH_ENABLED ${AUTH_ENABLED:-false} Включение аутентификации
KEYCLOAK_URL http://keycloak:8080 URL Keycloak
KEYCLOAK_REALM appsec-genai Realm Keycloak
AUTH_SERVICE_URL http://auth-service:8000 URL Auth Service

Переменная S3_PUBLIC_URL

Используется для замены внутренних URL MinIO (http://minio:9000) на доступные из браузера (http://localhost:9000 или https://s3.example.com). Это необходимо для корректной работы presigned URLs, возвращаемых сервисами.


UI (порт 8080)

Назначение: веб-интерфейс платформы на Angular 21, раздаётся через nginx-unprivileged.

Контейнер: ui.

IP-адрес: 172.28.0.121.

Healthcheck: wget --spider http://localhost:8080.

UI не имеет переменных окружения. Конфигурация Angular встроена в собранный бандл на этапе сборки Docker-образа. Nginx проксирует запросы /api/* на UI Gateway (ui-gateway:3000).


Auth Service (порт 8006)

Назначение: сервис аутентификации и авторизации, интеграция с Keycloak, управление ролями пользователей.

Контейнеры: auth-service-migrations, auth-service.

IP-адрес: 172.28.0.107.

Healthcheck: GET http://localhost:8000/healthz.

Переменная Значение Описание
SERVICE_NAME auth-service Имя сервиса
SERVICE_VERSION 0.1.0 Версия
SERVICE_PORT 8000 Внутренний порт
ENVIRONMENT ${ENVIRONMENT:-dev} Режим работы
DEBUG ${DEBUG:-false} Режим отладки
LOG_LEVEL ${LOG_LEVEL:-INFO} Уровень логирования
LOG_FORMAT json Формат логов
DATABASE_URL postgresql+asyncpg://...@postgres:5432/genai Строка подключения (schema: auth)
DATABASE_POOL_SIZE ${DATABASE_POOL_SIZE:-5} Размер пула
DATABASE_MAX_OVERFLOW ${DATABASE_MAX_OVERFLOW:-5} Дополнительные подключения
REDIS_URL redis://redis:6379/1 Redis (DB 1)
AUTH_MODE ${AUTH_MODE:-keycloak_only} Режим авторизации
KEYCLOAK_URL http://keycloak:8080 Внутренний URL Keycloak
KEYCLOAK_REALM appsec-genai Realm
KEYCLOAK_CLIENT_ID auth-service Client ID в Keycloak
KEYCLOAK_CLIENT_SECRET ${KEYCLOAK_AUTH_CLIENT_SECRET:-auth-service-secret} Client Secret
KEYCLOAK_JWKS_URL http://keycloak:8080/realms/appsec-genai/protocol/openid-connect/certs URL JWKS
GROUP_ROLE_MAPPING {"asg-viewer":"viewer","asg-user":"user",...} Маппинг групп Keycloak на роли
CORS_ORIGINS ["http://localhost:4200","http://localhost:8080"] CORS-домены

License Service (порт 8009)

Назначение: управление лицензиями платформы, валидация лицензионных ключей, интеграция с License Center.

Контейнеры: license-service-migrations, license-service.

IP-адрес: 172.28.0.108.

Healthcheck: GET http://localhost:8000/healthz.

Переменная Значение Описание
SERVICE_NAME license-service Имя сервиса
SERVICE_VERSION 0.1.0 Версия
SERVICE_PORT 8000 Внутренний порт
ENVIRONMENT ${ENVIRONMENT:-dev} Режим работы
LOG_LEVEL ${LOG_LEVEL:-INFO} Уровень логирования
LOG_FORMAT json Формат логов
DATABASE_URL postgresql+asyncpg://...@postgres:5432/genai Строка подключения (schema: licensing)
REDIS_URL redis://redis:6379/2 Redis (DB 2)
LICENSE_CENTER_PUBLIC_KEY ${LICENSE_CENTER_PUBLIC_KEY:-} Публичный ключ License Center
ORGANIZATION_ID ${ORGANIZATION_ID:-00000000-...} UUID организации
ORGANIZATION_NAME ${ORGANIZATION_NAME:-Default Organization} Название организации
GRACE_PERIOD_DAYS 14 Период отсрочки при истечении лицензии (дней)
CORS_ORIGINS ["http://localhost:4200","http://localhost:8080"] CORS-домены