Переменные окружения: backend и worker¶
Справочник всех переменных окружения Go-компонентов Security Hub: backend (HTTP API) и worker (фоновые задачи). Worker запускается тем же config.Load(), что и backend, поэтому читает тот же набор переменных; в колонке «Компонент» отмечено, где переменная реально влияет.
Колонка «По умолчанию»: [code] — литерал в Go, [chart] — значение из Helm-чарта (charts/security-scan-hub/values.yaml). Если значения расходятся, указаны оба.
Секреты (
DB_PASSWORD,JWT_SECRET,KEYCLOAK_CLIENT_SECRET,LOCAL_ADMIN_PASSWORD,LLM_API_KEYи т.п.) в Helm передаются черезsecretKeyRef(k8s Secret), а не plain values. В production задавайте их через секрет-менеджер (Vault / External Secrets / SealedSecrets).
Аутентификация, авторизация, SSO¶
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
AUTH_MODE |
Режим аутентификации | LOCAL | SSO (иное → аварийный останов) |
SSO [code] / LOCAL [chart] |
оба |
SSO_PROVIDERS |
Список активных провайдеров через запятую. Каждый даёт кнопку на странице входа. keycloak настраивается через KEYCLOAK_*, остальные — через OIDC_<ИМЯ>_* |
список через запятую, имена строчными | keycloak |
оба |
APP_ENV |
Окружение. В не-development включаются проверки https и обязательность секретов |
development | production | test |
production [code] |
оба |
ALLOW_DEV_MODE |
Разрешает обход аутентификации по служебному токену разработки. Требует одновременно APP_ENV=development. Принимается только точное значение true |
true | false |
false |
backend |
KEYCLOAK_URL |
Внутренний URL Keycloak (backend → KC) | URL | http://localhost:9090 [code] / "" [chart] |
оба |
KEYCLOAK_PUBLIC_URL |
Публичный URL Keycloak (редиректы браузера). Пусто → берётся KEYCLOAK_URL |
URL | "" |
оба |
KEYCLOAK_REALM |
Realm Keycloak | строка | securityhub [code] / "" [chart] |
оба |
KEYCLOAK_CLIENT_ID |
Client ID в Keycloak | строка | security-hub [code] / "" [chart] |
оба |
KEYCLOAK_CLIENT_SECRET |
Client secret. При AUTH_MODE=SSO и не-dev — обязательная (fatal без неё) |
строка (секрет) | change-me [code] |
оба |
KEYCLOAK_JWKS_URL |
Переопределение jwks_uri из OIDC discovery (Docker/K8s split network) |
URL; в prod обязан https:// |
"" |
оба |
KEYCLOAK_TOKEN_URL |
Переопределение token_endpoint |
URL; в prod обязан https:// |
"" |
оба |
KC_JWKS_URL |
JWKS для валидации внешних Keycloak JWT (transparent SSO / atom-idp) | URL; в prod обязан https:// |
"" |
оба |
KC_ISSUER |
Ожидаемый iss во внешнем JWT |
URL; в prod обязан https:// |
"" |
оба |
KC_AUDIENCES |
Разрешённые aud (client_id) внешних JWT |
CSV-список | "" |
оба |
KC_AUTO_PROVISION |
Автосоздание пользователей в БД при первом входе по внешнему JWT | true | false |
false |
оба |
FEATURE_SECURITY_HUB_INTEGRATION |
Мастер-флаг прозрачного SSO + эндпоинта /findings/by-correlation-keys |
true | false |
false |
оба |
ATOM_IDP_BASE_URL |
Доп. CORS-origin для atom-idp | URL | "" |
backend |
GOOGLE_OAUTH_CLIENT_ID |
Google OAuth client id | строка | "" |
оба |
GOOGLE_OAUTH_CLIENT_SECRET |
Google OAuth client secret | строка (секрет) | "" |
оба |
GOOGLE_OAUTH_REDIRECT_URL |
Google OAuth redirect URL | URL | http://localhost:8080/api/v1/auth/google/callback |
оба |
Generic OIDC-провайдеры (OIDC_<NAME>_*)¶
Для каждого провайдера, указанного в SSO_PROVIDERS (кроме keycloak), задаётся набор переменных с префиксом OIDC_<UPPER(NAME)>_. Пример: провайдер azure → переменные OIDC_AZURE_*.
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
OIDC_<NAME>_DISPLAY_NAME |
Метка кнопки входа в UI | строка | имя провайдера | оба |
OIDC_<NAME>_DISCOVERY_URL |
URL OIDC well-known (/.well-known/openid-configuration). Обязательна, если не заданы все endpoint-overrides явно |
URL | "" |
оба |
OIDC_<NAME>_CLIENT_ID |
Client ID в IdP | строка | "" |
оба |
OIDC_<NAME>_CLIENT_SECRET |
Client Secret | строка (секрет) | "" |
оба |
OIDC_<NAME>_SCOPES |
Запрашиваемые scopes — через пробел | строка | openid profile email |
оба |
OIDC_<NAME>_AUTO_PROVISION |
Автосоздание пользователей в БД при первом входе (роль viewer). false — принимать только уже существующих |
true | false |
true |
оба |
OIDC_<NAME>_TRUST_EMAIL |
Доверять email из IdP как верифицированному, даже если email_verified отсутствует в токене. Обязательна для Microsoft Entra ID (Azure AD v2) — без неё любой вход через Azure завершается 403 |
true | false |
false |
оба |
OIDC_<NAME>_AUTH_URL |
Переопределение authorization endpoint | URL | из discovery | оба |
OIDC_<NAME>_TOKEN_URL |
Переопределение token endpoint | URL | из discovery | оба |
OIDC_<NAME>_JWKS_URL |
Переопределение jwks_uri | URL | из discovery | оба |
OIDC_<NAME>_ISSUER |
Переопределение issuer | URL | из discovery | оба |
OIDC_<NAME>_END_SESSION_URL |
Переопределение end_session_endpoint | URL | из discovery | оба |
Разрешение адресов: явное переопределение важнее сведений из документа обнаружения; если не хватает и того и другого — старт прерывается. Адрес возврата, который нужно зарегистрировать у провайдера:
{FRONTEND_URL}/auth/callback.
Токены и доступ¶
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
JWT_SECRET |
Секрет подписи внутренних токенов. Вне development — обязательная, иначе аварийный останов |
строка (секрет) | change-this-secret-key [code] |
оба |
LICENSE_SECRET |
Отдельный секрет для лицензионных данных. Если не задан — берётся JWT_SECRET. Задавайте явно на новых установках, чтобы JWT_SECRET можно было менять независимо |
строка (секрет) | значение JWT_SECRET |
оба |
ACCESS_TOKEN_TTL_MINUTES |
Срок жизни токена доступа | целое ≥ 1 | 15 |
backend |
REFRESH_TOKEN_TTL_DAYS |
Срок жизни токена обновления | целое ≥ 1 | 7 |
backend |
LOCAL_ADMIN_PASSWORD |
Пароль первого администратора в режиме LOCAL. Без него на чистой базе войти невозможно |
строка (секрет) | "" |
backend |
ALLOWED_ORIGINS |
Список разрешённых источников для межсайтовых запросов. Значение * отклоняется |
адреса через запятую | http://localhost:3000,http://localhost:8084 |
backend |
TRUSTED_PROXIES |
Адреса и подсети обратных прокси, которым разрешено подменять адрес клиента заголовками X-Forwarded-For / X-Real-IP. Пусто — не доверять никому: адресом клиента считается адрес TCP-соединения |
список IP или CIDR через запятую | "" |
backend |
TRUSTED_PROXIES и ограничение частоты
По умолчанию заголовки пересылки игнорируются полностью — это безопасно, потому что иначе клиент мог бы подделать свой адрес и обойти ограничение частоты обращений к эндпоинтам входа, а в журнале действий остался бы чужой адрес.
Обратная сторона: если Hub стоит за обратным прокси и переменная не задана, все запросы будут выглядеть пришедшими с адреса прокси — ограничение частоты станет общим на всех. Задавайте её, когда прокси действительно есть, и не задавайте, когда его нет.
База данных¶
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
DB_HOST |
Хост PostgreSQL | hostname | localhost [code] |
оба |
DB_PORT |
Порт PostgreSQL | число | 5432 |
оба |
DB_NAME |
Имя БД | строка | securityhub |
оба |
DB_USER |
Пользователь БД | строка | securityhub |
оба |
DB_PASSWORD |
Пароль базы. Вне development — обязательная, иначе аварийный останов |
строка (секрет) | securityhub123 [code] |
оба |
DB_SSLMODE |
Режим TLS (disable, require, verify-full и другие значения libpq) |
перечисление | disable |
оба |
DB_MAX_OPEN_CONNS |
Верхний предел соединений с базой на процесс | целое ≥ 1 | 25 |
оба |
DB_MAX_IDLE_CONNS |
Сколько соединений держать открытыми в простое | целое ≥ 0 | 5 |
оба |
DB_CONN_MAX_LIFETIME_MINUTES |
Максимальное время жизни соединения | целое ≥ 1 | 30 |
оба |
Предел соединений действует на процесс. Каждая реплика backend и worker открывает свой пул: при пяти репликах с настройками по умолчанию это уже 125 соединений — сверяйтесь с
max_connectionsбазы.
LLM / Sandbox (активная верификация находок)¶
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
LLM_BASE_URL |
Базовый URL LLM API | URL | "" |
оба |
LLM_API_KEY |
Ключ LLM API | строка (секрет) | "" |
оба |
LLM_MODEL |
Имя модели | строка | glm-4-plus |
оба |
LLM_DRY_RUN |
Не обращаться к LLM (заглушка) | true | false |
false [code] / true [chart] |
оба |
LLM_FALSE_POSITIVE_THRESHOLD |
Порог уверенности для отсева false-positive | float 0..1 |
0.9 |
оба |
LLM_WORKERS |
Кол-во LLM-worker | целое | 5 [code] |
оба |
LLM_PROMPTS_DIR |
Каталог с промптами | путь | "" |
оба |
LLM_REQUEST_TIMEOUT_SECONDS |
Таймаут запроса к LLM | целое (сек) | 180 |
оба |
SANDBOX_TYPE |
Тип песочницы | "" (выкл) | docker | kubernetes |
"" [code] / worker kubernetes [chart] |
worker |
SANDBOX_IMAGE |
Docker-образ песочницы | image ref | dexionius/sshub-sandbox-tools:latest |
оба |
SANDBOX_TIMEOUT_SECONDS |
Таймаут выполнения в песочнице | целое (сек) | 120 |
оба |
SANDBOX_OUTPUT_LIMIT_KB |
Лимит вывода песочницы | целое (КБ) | 10 |
оба |
SANDBOX_NAMESPACE |
k8s namespace для pod песочницы | строка | "" (= namespace релиза) |
оба |
SANDBOX_KUBECONFIG |
Путь к kubeconfig; пусто → in-cluster | путь | "" |
оба |
SANDBOX_WG_SECRET_NAME |
Имя k8s Secret с WireGuard-ключами | строка | "" |
оба |
SANDBOX_WG_POD_IP |
WireGuard IP pod (CIDR) | CIDR | 10.200.0.3/32 |
оба |
SANDBOX_WG_PRIVATE_KEY |
WireGuard приватный ключ (docker/local) | строка (секрет) | "" |
оба |
SANDBOX_WG_SERVER_PUBLIC_KEY |
WireGuard публичный ключ сервера | строка | "" |
оба |
SANDBOX_WG_SERVER_ENDPOINT |
WireGuard endpoint сервера | host:port | "" |
оба |
Уведомления (Telegram / Mattermost)¶
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
NOTIFICATIONS_DRY_RUN |
Не отправлять уведомления по-настоящему | true | false |
false |
worker |
FRONTEND_BASE_URL |
Базовый адрес интерфейса для ссылок внутри уведомлений | адрес | http://localhost:3000 |
worker |
Токены ботов Telegram и MAX, а также входящий адрес Mattermost хранятся в настройках уведомлений в базе и задаются через интерфейс, а не переменными окружения.
Электронная почта¶
Единые параметры на всю установку — отдельно для каждого проекта они не задаются. Используются для оповещений о нарушении сроков и сводок об исправленных находках.
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
SMTP_HOST |
Сервер отправки. Пусто — отправка по почте не работает | имя узла | "" |
worker |
SMTP_PORT |
Порт | число | 587 |
worker |
SMTP_USERNAME |
Учётная запись | строка | "" |
worker |
SMTP_PASSWORD |
Пароль | строка (секрет) | "" |
worker |
SMTP_FROM |
Адрес отправителя | адрес почты | "" |
worker |
SMTP_TLS_MODE |
Режим TLS: starttls (обычно порт 587) или прямой TLS |
строка | starttls |
worker |
Параллелизм очередей¶
| Переменная | Очередь | По умолчанию |
|---|---|---|
DISPATCHER_WORKERS |
Очередь по умолчанию: диспетчер событий, разбор отчётов | 10 |
JIRA_SYNC_WORKERS |
Создание и обновление задач в Jira | 4 |
JIRA_REVERSE_SYNC_WORKERS |
Перенос статуса из Jira в Hub | 1 |
TELEGRAM_NOTIFICATION_WORKERS |
Уведомления в Telegram | 5 |
MATTERMOST_NOTIFICATION_WORKERS |
Уведомления в Mattermost | 10 |
MAXRU_NOTIFICATION_WORKERS |
Уведомления в MAX | 5 |
EMAIL_NOTIFICATION_WORKERS |
Уведомления по электронной почте | 5 |
FINDING_COPY_WORKERS |
Копирование находок между продуктами | 4 |
DUAL_VERIFY_WORKERS |
Перепроверка вторым источником | 2 |
PLUGIN_FINDING_SOURCE_SYNC_WORKERS |
Опрос источников-плагинов | 4 |
Все значения — для процесса worker. Ноль не допускается: очередь с нулевым
параллелизмом не обрабатывается. Число обработчиков очереди обогащения
находок отдельной переменной не имеет — оно на единицу меньше
PLUGIN_RUNNER_PER_PLUGIN_LIMIT.
Jira (интеграция, маршрутизация, webhook, SSRF-гард)¶
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
FALLBACK_JIRA_URL |
URL Jira, если у проекта не задан jira_config.base_url |
URL | "" |
оба |
FEATURE_FINDING_COPY |
Включить fan-out копирование находок | true | false |
false |
оба |
FEATURE_JIRA_REVERSE_SYNC |
Включить периодический Jira→Hub sync статусов | true | false |
false |
оба |
JIRA_REVERSE_SYNC_INTERVAL_MINUTES |
Период тика reverse-sync | целое (мин) | 60 |
оба |
JIRA_REVERSE_SYNC_BATCH_SIZE |
Размер батча reverse-sync | целое | 500 |
оба |
FEATURE_JIRA_ENGINE_ROUTING |
Per-engine issuetype override (issuetype_by_engine) |
true | false |
true |
worker |
FEATURE_JIRA_WEBHOOK |
Jira→Hub webhook receiver (при false → 404) |
true | false |
true |
backend |
HUB_BASE_URL |
Публичный URL Hub для callback-URL webhook и ссылок | URL | "" |
оба |
JIRA_ALLOW_HTTP |
Разрешить http:// для Jira base URL (SSRF-гард) |
true | false |
false |
оба |
JIRA_ALLOW_LOCAL_DIAL |
Разрешить обращение к локальным/приватным адресам Jira | true | false |
false |
оба |
JIRA_BASE_URL_ALLOWLIST |
Allowlist допустимых Jira base URL | CSV/список | "" (без ограничения) |
оба |
Dual-verify (Hub ↔ DomainScope)¶
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
FEATURE_DUAL_VERIFY |
Мастер-флаг dual_confirm flow | true | false |
false |
оба |
DOMAINSCOPE_VERIFY_URL |
Endpoint сканера для POST verify-находка. В prod обязан https:// |
URL | "" |
оба |
DOMAINSCOPE_VERIFY_API_KEY |
Outbound API-key Hub→DomainScope | строка (секрет) | "" |
оба |
DOMAINSCOPE_VERIFY_HMAC_SECRET |
HMAC-подпись исходящих запросов | строка (секрет) | "" |
оба |
SCANNER_CALLBACK_API_KEY |
Inbound API-key для callback от сканера | строка (секрет) | "" |
оба |
SCANNER_CALLBACK_HMAC_SECRET |
Primary HMAC inbound callback (32+ байт) | строка (секрет) | "" |
оба |
SCANNER_CALLBACK_HMAC_SECRET_PREVIOUS |
Доп. HMAC-ключ на окно ротации | строка (секрет) | "" |
оба |
DUAL_VERIFY_CALLBACK_BASE_URL |
Публичный URL Hub для генерации callback_url. При FEATURE_DUAL_VERIFY=true пустой → fail-fast |
URL | "" |
оба |
DUAL_VERIFY_SCANNER_TIMEOUT |
Таймаут ожидания callback | duration | 60s |
оба |
DUAL_VERIFY_SCHEDULER_INTERVAL |
Период тика scheduler | duration | 15m |
оба |
DUAL_VERIFY_BATCH_SIZE |
Кандидатов за тик | целое | 100 |
оба |
DUAL_VERIFY_MAX_CONCURRENT |
Глобальный cap конкурентности | целое | 5 |
оба |
DUAL_VERIFY_PER_PROJECT_HOURLY_CLOSURE_CAP |
Лимит закрытий/час на проект | целое | 10 |
оба |
DUAL_VERIFY_RETRY_BACKOFF |
Задержки между retry | CSV duration | 30m,2h,6h |
оба |
DUAL_VERIFY_INCONCLUSIVE_COOLDOWN |
Окно перед re-enqueue inconclusive | duration | 720h |
оба |
DUAL_VERIFY_REAPER_INTERVAL |
Период тика reaper | duration | 1h |
оба |
Manual Rescan (Hub → сканеры)¶
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
FEATURE_MANUAL_RESCAN |
Включить ручной rescan | true | false |
false |
backend |
DOMAINSCOPE_RESCAN_URL |
URL DomainScope для rescan/probe | URL | "" |
оба |
DOMAINSCOPE_RESCAN_API_KEY |
API-key DomainScope rescan | строка (секрет) | "" |
оба |
IAC_SCANNER_RESCAN_URL |
URL iac-scanner для rescan | URL | "" |
оба |
IAC_SCANNER_RESCAN_API_KEY |
API-key iac-scanner rescan | строка (секрет) | "" |
оба |
RESCAN_TIMEOUT_SECONDS |
Таймаут rescan/probe-запроса | целое (сек) | 10 |
оба |
RESCAN_HOST_ALLOWLIST |
Allowlist хостов rescan (SSRF-гард) | список | "" |
оба |
Автоматическое закрытие исправленных находок¶
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
FEATURE_AUTO_VERIFY_FIXES |
Глобальное разрешение автоматически закрывать исправленные находки. Одно из трёх условий: нужны ещё признак в настройках проекта и verify_fixes=true при загрузке отчёта |
true | false |
false |
оба |
AUTO_VERIFY_PROBE_RETRIES |
Сколько раз подряд проверять отсутствие находки внутри одной проверки. Любой ответ «на месте» или «неопределённо» немедленно оставляет находку открытой | целое ≥ 1 | 3 |
worker |
AUTO_VERIFY_ABSENT_THRESHOLD |
Сколько последовательных проверок должны дать «отсутствует» до закрытия. Любое обнаружение сбрасывает счётчик. Значение 1 возвращает прежнее поведение «закрывать по одному наблюдению» |
целое ≥ 1 | 3 |
worker |
Не ставьте AUTO_VERIFY_ABSENT_THRESHOLD=1
Именно такое поведение было раньше и привело к массовому ложному закрытию настоящих находок: значительная часть вернулась при следующем сканировании. Два уровня защиты — повторы внутри проверки и кворум между проверками — добавлены как реакция на этот случай и по отдельности недостаточны.
Сервер, хранилище, логи, лимиты, лицензия¶
| Переменная | Назначение | Значения | По умолчанию | Компонент |
|---|---|---|---|---|
SERVER_PORT |
Порт HTTP-сервера | число | 8080 [code] / 8082 [chart] |
backend |
FRONTEND_URL |
URL фронта (редиректы, ссылки, fallback callback) | URL | http://localhost:3000 [code] / https://hub.example.com [chart] |
оба |
STORAGE_PATH |
Каталог хранения отчётов | путь | ./storage [code] / /app/storage/reports [chart] |
оба |
LOGS_PATH |
Каталог логов | путь | ./logs |
оба |
LOG_MAX_SIZE_MB |
Размер лог-файла до ротации | целое ≥1 | 50 |
оба |
LOG_MAX_BACKUPS |
Кол-во хранимых ротированных логов | целое ≥0 | 5 |
оба |
LOG_MAX_AGE_DAYS |
Макс. возраст ротированного лога | целое ≥0 | 30 |
оба |
LOG_COMPRESS |
Сжимать ротированные журналы | true | false |
true |
оба |
LOG_LEVEL |
Уровень подробности: debug, info, warn, error. Переопределяет уровень, выведенный из APP_ENV, не меняя формат вывода — можно включить подробный вывод в промышленной среде для диагностики |
строка | по APP_ENV: development → debug, иначе info |
оба |
LICENSE_SERVER_URL |
Адрес сервера лицензий. Пусто — проверка не выполняется | адрес | "" |
оба |
MAX_UPLOAD_SIZE_MB |
Предел размера загружаемого файла. Обратите внимание: предел разбора — 50 МиБ, он ниже | целое ≥ 1 | 500 |
backend |
RATE_LIMIT_API |
Частота обращений к обычным эндпоинтам, запросов в минуту | целое ≥ 1 | 100 |
backend |
RATE_LIMIT_AUTH |
Частота обращений к эндпоинтам входа, запросов в минуту | целое ≥ 1 | 10 |
backend |
CLEANUP_RETENTION_COMPLETED_DAYS |
Хранение обработанных отчётов, суток | целое ≥ 0 | 7 |
worker |
CLEANUP_RETENTION_FAILED_DAYS |
Хранение отчётов с ошибкой разбора, суток | целое ≥ 0 | 30 |
worker |
CLEANUP_RETENTION_PENDING_DAYS |
Хранение необработанных отчётов, суток | целое ≥ 0 | 0 |
worker |
CLEANUP_RETENTION_ORPHAN_HOURS |
Через сколько часов удалять файлы без записи в базе. 0 отключает |
целое ≥ 0 | 24 |
worker |
CLEANUP_BATCH_SIZE |
Размер порции при очистке — и при выборке из базы, и при обходе каталога. Определяет память на одну порцию. 0 — значение по умолчанию из кода; значения выше 10 000 обрезаются |
целое 0…10 000 | 0 |
worker |
CLEANUP_DRY_RUN |
Очистка без удаления: только сообщения о том, что было бы удалено | true | false |
false |
worker |
REFRESH_CLEANUP_RETENTION_DAYS |
Хранение токенов обновления, суток | целое ≥ 1 | 30 |
worker |
Платформа плагинов¶
| Переменная | Назначение | По умолчанию |
|---|---|---|
PLUGIN_RUNNER_GLOBAL_LIMIT |
Предел одновременно работающих процессов плагинов | значение из кода |
PLUGIN_RUNNER_PER_PLUGIN_LIMIT |
Предел одновременных запусков одного плагина | 4 |
PLUGIN_RUNNER_KEEP_WARM_SECONDS |
Сколько держать процесс готовым после работы | значение из кода |
WASM_RUNNER_BINARY_PATH |
Путь к исполняемому файлу среды исполнения плагинов | значение из кода |
ENRICH_TAGS_RATE_LIMIT_PER_MINUTE |
Предел ручных запусков обогащения находки | значение из кода |
PLUGIN_EGRESS_ALLOWLIST |
Узлы, к которым плагинам разрешено обращаться | "" |
PLUGIN_EGRESS_ALLOW_HTTP |
Разрешить плагинам схему http |
false |
PLUGIN_EGRESS_ALLOW_LOCAL_DIAL |
Разрешить плагинам обращения к локальным и внутренним адресам | false |
PLUGIN_CATALOG_ALLOWLIST |
Разрешённые адреса каталогов плагинов | "" |
PLUGIN_CATALOG_ALLOW_HTTP |
Разрешить http для каталога |
false |
PLUGIN_CATALOG_ALLOW_LOCAL_DIAL |
Разрешить локальные адреса для каталога | false |
PLUGIN_OCI_ALLOWLIST |
Разрешённые реестры образов, откуда ставятся плагины | "" |
PLUGIN_OCI_ALLOW_HTTP |
Разрешить http для реестра |
false |
PLUGIN_OCI_ALLOW_LOCAL_DIAL |
Разрешить локальные адреса для реестра | false |
Для плагинов, исполняемых как обычные процессы, действует отдельная группа
переменных с префиксом PLUGIN_NATIVE_: предел памяти, тайм-ауты вызовов,
политика перезапуска после аварийного завершения, ограничение частоты
обращений и параметры удержания блокировки. Значения по умолчанию рассчитаны
на то, что аварийно завершающийся плагин не должен ни перезапускаться
бесконечно, ни оставаться выключенным навсегда. Подробнее:
Плагины.
Автономное тестирование на проникновение¶
Отдельная возможность, выключенная по умолчанию: находки в состояниях «принятый риск» и «не будет исправлено», доступные извне, передаются во внешнюю систему автономного тестирования, а её результат возвращается в Hub новыми находками.
| Переменная | Назначение | По умолчанию |
|---|---|---|
FEATURE_PENTAGI_INTEGRATION |
Общий переключатель | false |
PENTAGI_BASE_URL |
Адрес внешней системы. В промышленной среде обязан быть https |
"" |
PENTAGI_API_TOKEN |
Токен доступа | "" |
PENTAGI_PROVIDER |
Языковая модель, используемая внешней системой | "" |
PENTAGI_STATUSES |
Состояния находок, которые берутся в работу | risk_accepted,wont_fix |
PENTAGI_SUBMIT_INTERVAL |
Период постановки новых заданий | 1h |
PENTAGI_POLL_INTERVAL |
Период опроса выполняющихся заданий | 5m |
PENTAGI_MAX_CONCURRENT_FLOWS |
Предел одновременных заданий | 3 |
PENTAGI_PER_TICK_SUBMIT_CAP |
Предел новых заданий за один такт | 5 |
PENTAGI_COOLDOWN |
Окно, в течение которого одна и та же цель не берётся повторно | 168h |
PENTAGI_DRY_RUN |
Готовить задания, но не отправлять | false |
PENTAGI_EXTRA_ROE |
Дополнительные правила проведения работ, через \| |
"" |
PENTAGI_HTTP_TIMEOUT |
Тайм-аут обращений | 30s |
PENTAGI_TLS_INSECURE |
Отключить проверку сертификата. В промышленной среде запрещено — старт прервётся | false |
PENTAGI_LLM_EXTRACT |
Преобразовывать отчёт в структурированные находки языковой моделью | true |
PENTAGI_INGEST_WORKERS |
Параллелизм приёма результатов | значение из кода |
Это активное воздействие
Возможность запускает автоматизированное тестирование на проникновение против ваших же систем. Включайте только с согласованными правилами проведения работ и заведомо верным перечнем целей.
Устаревшие переменные¶
Читаются только для того, чтобы предупредить оператора записью в журнале. Расписание очистки задаётся в коде и этими переменными не управляется.
| Переменная | Прежнее назначение | Компонент |
|---|---|---|
CLEANUP_SCHEDULE |
Расписание очистки отчётов — игнорируется | worker |
REFRESH_CLEANUP_SCHEDULE |
Расписание очистки токенов — игнорируется | worker |
Переменные, без которых сервис не стартует¶
| Переменная | При каком условии обязательна |
|---|---|
JWT_SECRET |
Всегда, кроме APP_ENV=development |
DB_PASSWORD |
Всегда, кроме APP_ENV=development |
KEYCLOAK_CLIENT_SECRET |
При AUTH_MODE=SSO и провайдере keycloak вне development. Вне development значение по умолчанию change-me также отвергается — нужен собственный секрет |
OIDC_<ИМЯ>_CLIENT_ID и OIDC_<ИМЯ>_CLIENT_SECRET |
Для каждого провайдера из SSO_PROVIDERS, кроме keycloak |
DUAL_VERIFY_CALLBACK_BASE_URL |
При FEATURE_DUAL_VERIFY=true |
LOCAL_ADMIN_PASSWORD |
Формально нет, фактически обязательна при AUTH_MODE=LOCAL — без неё на чистой базе некому войти |
Неизвестное значение APP_ENV или AUTH_MODE также прерывает запуск — это
сделано намеренно, чтобы опечатка не ослабляла защиту молча.
Обязательный https в промышленной среде¶
При APP_ENV=production запуск прерывается, если любой из этих адресов задан
и использует http:
KEYCLOAK_URL, KEYCLOAK_PUBLIC_URL, KEYCLOAK_JWKS_URL,
KEYCLOAK_TOKEN_URL, KC_JWKS_URL, KC_ISSUER, DOMAINSCOPE_VERIFY_URL,
LLM_BASE_URL, PENTAGI_BASE_URL, а также любой адрес провайдера из
SSO_PROVIDERS.
По этим каналам передаются секреты, поэтому исключений нет. Проверка адресов
Keycloak не выполняется при AUTH_MODE=LOCAL — там он не используется вовсе.
В чарте по умолчанию задаётся лишь часть переменных: группы перепроверки, ручного пересканирования, маршрутизации Jira,
KC_*, ограничения частоты и другие работают на значениях из кода, пока оператор не пробросит их явно черезextraEnv.