Переменные окружения в командах сканеров
При запуске сканера через оркестрацию контейнеру автоматически передаётся набор переменных окружения. Эти переменные можно использовать в команде сканера — как в предустановленных профилях, так и при настройке собственных команд.
Краткая справка
Наиболее часто используемые переменные в командах профилей:
| Переменная | Описание | Значение по умолчанию |
|---|---|---|
RESULTS_FILE |
Полный путь к файлу результатов | ${REPORTS_DIR}/${RESULTS_FILENAME} |
SRC_DIR |
Путь к распакованным исходникам репозитория | /data/src |
CURRENT_DIR |
Текущая директория | . |
ARTIFACT_REFERENCE |
Ссылка на Docker-образ (при скане артефакта) | — |
SCANNER_CLI_PATH |
Путь к CLI-бинарнику сканера | /data/scanner_cli/scanner-cli |
SCANNER_CONFIG_PATH |
Путь к конфигурационному файлу сканера | /data/scanner_config/config |
CACHE_DIR |
Директория кэша сканера | /tmp/scanner_cache |
HW_REGISTRY |
Хост container registry (для скачивания баз, например Trivy DB) | — |
Пример использования в команде сканера:
Переменные, зависящие от цели сканирования
Скан репозитория
| Переменная | Описание |
|---|---|
REPOSITORY_SLUG |
Slug репозитория |
REPOSITORY_BRANCH |
Сканируемая ветка |
SRC_DIR |
Путь к распакованным исходникам (/data/src) |
Скан артефакта (Docker-образа)
| Переменная | Описание |
|---|---|
ARTIFACT_REFERENCE |
Каноническая ссылка на образ (hostname/image:tag) |
PRODUCT_SLUG |
Slug продукта, к которому относится артефакт |
Предопределённые пути
Фиксированные директории внутри контейнера сканера:
| Переменная | Значение | Описание |
|---|---|---|
BASE_DATA_DIR |
/data |
Корневая директория данных |
SRC_DIR |
/data/src |
Исходники репозитория |
REPORTS_DIR |
/data/reports |
Директория результатов |
DOWNLOAD_DIR |
/data/download |
Скачанные архивы |
SCANNER_DATA_DIR |
/data/scanner_data |
Рабочая директория сканера |
SCANNER_CLI_DIR |
/data/scanner_cli |
Бинарники CLI сканера |
SCANNER_CONFIG_DIR |
/data/scanner_config |
Конфигурация сканера |
CACHE_DIR |
/tmp/scanner_cache |
Кэш (например, базы Trivy) |
Переменные результатов
| Переменная | Описание |
|---|---|
RESULTS_FILE |
Полный путь к файлу результатов (${REPORTS_DIR}/${RESULTS_FILENAME}) |
RESULTS_FILENAME |
Имя файла результатов (генерируется автоматически) |
REPORTS_DIR |
Директория результатов (/data/reports) |
Сканер должен записать результаты в ${RESULTS_FILE} — платформа автоматически заберёт этот файл после завершения команды.
Приватный registry образа сканера
Новое в 2026.10.1
Если образ сканера лежит в приватном registry, для его скачивания нужны учётные данные. В Docker Compose orchestration скачивает образ, если его ещё нет на хосте; уже скачанный образ повторно не скачивается. В Kubernetes образ скачивает кластер по imagePullSecrets pod сканера. Учётные данные не передаются в команду сканера внутри контейнера.
Источник учётных данных (достаточно одного, пара логин и пароль обязательна):
- в профиле оркестрации - переменные
SCANNER_REGISTRY_USERNAMEиSCANNER_REGISTRY_PASSWORDв блоке Переменные окружения сканера (в API - полеextraEnvVarsсканера в профиле). Пароль хранится в зашифрованном виде и в API возвращается замаскированным; - глобально для установки - в Docker Compose см. подраздел ниже, в Kubernetes -
secretsKeyRefsв values chart.
Если заданы и глобальные значения, и переменные в профиле, приоритет у профиля. Профиль заменяет глобальные значения целиком: если в профиле задать только одну из двух переменных, запуск завершится ошибкой, недостающее значение из глобальных настроек не подставляется.
В Kubernetes переменные из профиля и secretsKeyRefs действуют только в динамическом режиме, см. подраздел "Учётные данные из профиля" ниже. Без него используются только статические imagePullSecrets.
| Переменная | Описание |
|---|---|
SCANNER_REGISTRY_USERNAME |
Имя пользователя registry |
SCANNER_REGISTRY_PASSWORD |
Пароль или токен registry |
Отдельных полей для registry в форме профиля нет: используются только эти переменные окружения.
Переменная HW_REGISTRY в таблице выше относится к другому сценарию: скачивание баз и артефактов изнутри команды сканера (например, баз Trivy), а не pull образа сканера orchestration.
Docker Compose
Общие учётные данные для pull образов сканеров можно задать в /opt/hw-vmp/config/user.ini (секция [main]):
| Параметр | Назначение |
|---|---|
v.orchestration.scanner.registry.username |
Имя пользователя registry |
v.orchestration.scanner.registry.password |
Пароль или токен registry |
Полный список ключей: user-template.ini в той же директории.
Пример в user.ini:
[main]
v.orchestration.scanner.registry.username = registry-user
v.orchestration.scanner.registry.password = <token-or-password>
Примените конфигурацию:
Параметры попадают в контейнер v_orchestration как ORCHESTRATION_SCANNER_REGISTRY_USERNAME и ORCHESTRATION_SCANNER_REGISTRY_PASSWORD и используются для pull, если в профиле свои SCANNER_REGISTRY_* не заданы.
Kubernetes
По умолчанию pod сканера использует только статические imagePullSecrets, заданные в values chart. Отдельно можно включить режим, когда учётные данные берутся из профиля (SCANNER_REGISTRY_USERNAME / SCANNER_REGISTRY_PASSWORD) или из secretsKeyRefs: orchestration создаёт Secret типа kubernetes.io/dockerconfigjson и подключает его к pod сканера. Для этого образ должен быть указан с хостом registry, например registry.example.com/scanner:tag; для образов без хоста Secret не создаётся. Secret не удаляется после сканирования, а переиспользуется следующими запусками с теми же учётными данными. После смены учётных данных создаётся новый Secret, старый остаётся в namespace.
Общие шаги установки чарта: Установка чарта.
Статический pull Secret
Подходит, если один и тот же registry и учётная запись для всех сканов, и политика не запрещает заранее созданные pull Secret.
- Создайте Secret registry (подставьте namespace релиза):
kubectl create secret docker-registry scanner-registry-static \
--namespace="${RELEASE_NAMESPACE}" \
--docker-server=registry.example.com \
--docker-username='<registry-username>' \
--docker-password='<registry-password>'
- Добавьте Secret в values (фрагмент
override.yaml):
Включать режим dynamicSecrets для этого не нужно.
Учётные данные из профиля
Явно включаемая опция. Chart может создать ServiceAccount и Role с правами на pod сканера и на Secret в namespace релиза (create, get, list, patch, delete).
Учётные данные для pull образа orchestration берёт из профиля (переменные SCANNER_REGISTRY_USERNAME / SCANNER_REGISTRY_PASSWORD, как в разделе выше) или из Secret в кластере через secretsKeyRefs в values (переменные окружения pod orchestration, без хранения пароля в ConfigMap).
- Если в override заданы
secretsKeyRefs, создайте opaque Secret с ключамиusernameиpassword(имя и ключи должны совпасть с values):
kubectl create secret generic scanner-registry-credentials \
--namespace="${RELEASE_NAMESPACE}" \
--from-literal=username='<registry-username>' \
--from-literal=password='<registry-password>'
- Включите dynamic mode в values:
vOrchestration:
scannerRegistry:
dynamicSecrets:
enabled: true
createSA: true
secretsKeyRefs:
username:
name: scanner-registry-credentials
key: username
password:
name: scanner-registry-credentials
key: password
createSA: false используйте только если ServiceAccount <release>-v-orchestration-registry-sa и Role/RoleBinding уже созданы вручную с нужными правами на Secret в namespace.
- Установите или обновите релиз с этим override (
helm upgrade --install).
Не включайте dynamic mode, если политика безопасности разрешает только статические pull Secret, созданные оператором заранее.