Перейти к основному содержимому
Версия: 1.2

Интеграция в CI-процесс

Система поддерживает интеграцию сканирования уязвимостей в GitLab CI/CD pipeline с возможностью отправки результатов в ASOC.

Настройка переменных окружения

Для работы скрипта необходимо определить следующие переменные:

ПеременнаяОписание
IMAGE_TO_SCANDocker-образ для сканирования (формат: yourimagename/latest)
REPORT_FILEИмя файла для сохранения отчёта (по умолчанию: trivy-report.json)
API_URLURL API для отправки результатов: http://your-tronasoc-url/api/v1/check/{check_id}/external
API_TOKENAPI-токен для аутентификации в TRON.ASOC (формат: asoc-your_api_token_here)

Эти переменные должны быть определены в секции variables файла .gitlab-ci.yml.

Пример реализации CI/CD пайплайна (Trivy)

Пайплайн состоит из двух этапов:

  1. scan - сканирование образа на уязвимости
  2. upload - отправка результатов в ASOC
stages:
- scan
- upload

variables:
IMAGE_TO_SCAN: "anaisurlichs/cns-website:0.0.6" # Целевой Docker-образ
REPORT_FILE: "trivy-report.json" # Файл отчёта
API_URL: "http://example.asoc.ximi.group/api/v1/check/{check_id}/external"
API_TOKEN: "asoc-exampletoken" # Защищённый токен доступа

scan_image:
stage: scan
image: aquasec/trivy:latest # Официальный образ Trivy
script:
- trivy image --format json --output ${REPORT_FILE} ${IMAGE_TO_SCAN}
- echo "[INFO] Сканирование завершено. Отчёт сохранён в ${REPORT_FILE}"
artifacts:
paths:
- ${REPORT_FILE}
when: always # Сохранять артефакты даже при ошибках
expire_in: 1 week # Срок хранения артефактов

upload_report:
stage: upload
image: curlimages/curl:latest # Образ с curl
script:
- echo "[INFO] Отправка отчёта ${REPORT_FILE} на ${API_URL}"
- >
curl --fail --location "${API_URL}" \
--header "x-api-token: ${API_TOKEN}" \
--header "Content-Type: application/json" \
--data-binary @"${REPORT_FILE}"
dependencies:
- scan_image # Ожидание завершения сканирования

Пример реализации CI/CD пайплайна (Grype)

grype_scan:
image: anchore/grype:latest
stage: scan
script:
- echo "[INFO] Начато сканирование образа ${IMAGE_TO_SCAN}"
- grype ${IMAGE_TO_SCAN} --output json --file ${REPORT_FILE}
- test -f ${REPORT_FILE} && echo "[SUCCESS] Отчёт сохранён в ${REPORT_FILE}"
artifacts:
paths:
- ${REPORT_FILE}
when: always

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

  • Для существующих отчётов можно использовать только этап upload
  • Все секретные значения (API_TOKEN) должны храниться в защищённых переменных GitLab
  • Для других инструментов (Semgrep, KICS и т.д.) необходимо изменить:
    • Docker-образ в image
    • Команду сканирования в script