Интеграция с CI/CD
04 сентября 2026
ID 267228
Kaspersky Container Security позволяет проводить сканирование образов контейнеров и IaC, размещенных в системах управления репозиториями кода в рамках процесса CI/CD, на уязвимости, вредоносное ПО, ошибки конфигурации и наличие конфиденциальных данных.
Continuous Integration/Continuous Delivery – комбинация непрерывной интеграции и непрерывного развертывания программного обеспечения в процессе разработки.
На этапе сборки проекта в системе управления репозиториями можно запустить сканер Kaspersky Container Security для проверки содержащихся в репозитории объектов на соответствие требованиям включенных политик безопасности. Сканер запускается из реестра с помощью агента, например, GitLab Runner в GitLab. Данные о задании для сканирования и направлении результатов сканирования передаются посредством программного интерфейса приложения (API).
При запуске проверки объектов на этапе сборки проекта необходимо убедиться, что в параметрах применимой политики безопасности образов не выбрано Блокировать внешние сканирования. Если этот параметр активирован, решение уведомит вас об ошибке при сканировании.
Результаты сканирования отображаются в таблице в разделе Ресурсы → Внешние сканирования.
Для каждого из представленных в таблице объектов Kaspersky Container Security отображает следующее:
- Дату и время последнего сканирования.
- Название.
- Оценку уровня риска.
- Обобщенные результаты сканирования с указанием выявленных объектов, относящимся к уязвимостям, вредоносному ПО, конфиденциальным данным и ошибкам конфигурации.
- Тип артефакта.
- Номер и пайплайн сборки, в которой проводилось сканирование образа.
В разделе Ресурсы → Внешние сканирования вы также можете сформировать отчет по образам, которые сканируются в рамках процесса CI/CD.
Отчеты формируются только для объектов с типом артефакта Образ. Для других типов артефактов формирование отчета недоступно.
Проверка артефактов в процессах CI/CD
С помощью решения вы можете сканировать образы, которые используются в процессах CI/CD. Для проверки образов из CI/CD вам требуется настроить интеграцию решения с процессами CI/CD.
Между средой CI/CD и решением должна быть обеспечена безопасность передачи данных от прослушивания и перехвата сетевого трафика.
Чтобы выполнять проверку образов или репозиториев (для сканирования конфигурационных файлов), используемых в процессе CI/CD, вам нужно добавить в пайплайн CI/CD отдельный этап, на котором запускается сканер Kaspersky Container Security.
Для проведения сканирования образов из CI/CD в конфигурационном файле интеграции с репозиторием сканеру требуется указать переменные окружения API_BASE_URL (веб-адрес хост-сервера API Kaspersky Container Security) и API_TOKEN (токен для доступа к API Kaspersky Container Security). Также необходимо указать API_CA_CERT (сертификат для проверки хост-сервера API решения) или SKIP_API_SERVER_VALIDATION=true для пропуска такой проверки.
Результаты сканирования передаются на сервер и отображаются в консоли управления в разделе Ресурсы → Внешние сканирования. В представленной таблице перечислены образы, для которых проводилась проверка, указываются результаты оценки риска и выявленные уязвимости.
По ссылке в названии образа вы можете открыть страницу, содержащую подробную информацию о результатах сканирования образа. Страница аналогична странице с результатами сканирования образов из реестров.
Kaspersky Container Security также отображает тип артефакта для каждого объекта. Используются два основных артефакта:
- Файловая система – это репозиторий с содержащимися в нем конфигурационными файлами.
- Образ контейнера – это шаблон, на основе которого реализуется контейнер в среде выполнения.
Для каждого объекта проверки можно указывать номер сборки (BUILD_NUMBER) и пайплайн сборки (BUILD_PIPELINE). С помощью этих параметров можно определить, на каком этапе в объекте произошел сбой.
Последовательность этапов непрерывной разработки и непрерывной доставки ПО (CI/CD), выполняемых в последовательности один за другим.
Вы не можете проводить повторное сканирование при внешнем сканировании объектов.
В Kaspersky Container Security осуществляются следующие виды внешних сканирований:
- Сканирование образов из реестра образов. Решение осуществляет проверку после успешной сборки и сохранения образа в реестр образов.
- Сканирование образов, помещенных в архивы в формате TAR. Созданный TAR-архив сохраняется как артефакт сборки, который сканер решения проверяет в следующем пайплайне сборки.
- Сканирование Git-репозитория, которое может проводиться одним из следующих способов:
- по ветке (отдельному направлению разработки) проекта в Git-репозитории;
- по коммиту (снимку состояния или контрольной точке на временной шкале проекта).
Чтобы провести сканирование образа из реестра образов,
выполните команду запуска сканирования в следующем формате:
/scanner [TARGET] --stdout
где:
<TARGET> –полный адрес образа в реестре;<--stdout> –вывод данных в журнал событий безопасности.
Для доступа к реестру необходимо установить в переменных окружения логин COMPANY_EXT_REGISTRY_USERNAME и пароль (токен) COMPANY_EXT_REGISTRY_PASSWORD.
Для использования сертификата для безопасного подключения к реестру необходимо указать данные сертификата в переменной окружения COMPANY_EXT_REGISTRY_TLS_CERT в виде следующей строки в формате .PEM: -----BEGIN CERTIFICATE-----\n... <данные сертификата> ...\n-----END CERTIFICATE-----.
Чтобы провести сканирование образа из TAR-архива:
- Соберите образ и сохраните его в виде TAR-архива с помощью любого приложения для создания контейнеризированных образов.
- Выполните команду запуска сканирования в следующем формате:
/scanner [TARGET] --file --stdoutгде:
<TARGET>– путь к файлу образа для сканирования;<--file> –флаг, указывающий на сканирование файлаTARGET;<--stdout> –вывод данных в журнал событий безопасности.
Пример конфигурационного файла со значениями параметров для сканирования TAR-архива
stages:
- build_tar
- scan_tar
- push_image
build_tar:
stage: build_tar
tags:
- k8s
- docker
image:
name: gcr.io/kaniko-project/executor:v1.9.0-debug
entrypoint: [""]
dependencies:
- scan_source_branch
- scan_source_commit
script:
- mkdir -p /kaniko/.docker
- echo "${DOCKER_AUTH_CONFIG}" > /kaniko/.docker/config.json
- /kaniko/executor
--context "${CI_PROJECT_DIR}"
--dockerfile "${CI_PROJECT_DIR}/Dockerfile"
--destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}"
--compressed-caching=false
--build-arg GITLAB_USER=gitlab-ci-token
--build-arg GITLAB_TOKEN=${CI_JOB_TOKEN}
--no-push
--tarPath=image.tar
artifacts:
paths:
- image.tar
expire_in: 2 hours
scan_tar:
stage: scan_tar
tags:
- k8s
- docker
dependencies:
- build_tar
image:
name: "company.gitlab.cloud.net:5050/companydev/example/scanner:master-with-db"
pull_policy: always
entrypoint: [""]
variables:
API_BASE_URL: ${API_BASE_URL}
API_TOKEN: ${API_TOKEN}
API_CA_CERT: ${KCS_CA_CERT}
script:
- /scanner image.tar --file --stdout
artifacts:
paths:
- image.tar
expire_in: 2 hours
push_image:
stage: push_image
tags:
- k8s
image:
name: gcr.io/go-containerregistry/crane:debug
entrypoint: [""]
dependencies:
- scan_tar
script:
- mkdir -p $HOME/.docker
- echo "${DOCKER_AUTH_CONFIG}" > $HOME/.docker/config.json
- /ko-app/crane push image.tar "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}"
Чтобы провести сканирование Git-репозитория:
- В конфигурационном файле Git-репозитория в переменных окружения укажите токен для доступа к репозиторию (
GITHUB_TOKENилиGITLAB_TOKEN). - Выполните команду запуска сканирования в следующем формате:
/scanner [TARGET] --repo [--branch BRANCH] [--commit COMMIT] --stdoutгде:
<TARGET> –веб-адрес (URL) Git-репозитория;<--repo>–флаг, указывающий на сканирование файлаTARGET;<--branch BRANCH>–ветка репозитория для сканирования;<--commit COMMIT>–хеш коммита для сканирования;<--stdout> –вывод данных в журнал событий безопасности.
Пример конфигурационного файла с переменными окружения для сканирования образа из Git-репозитория
stages:
- scan_source_branch
- scan_source_commit
scan_source_branch:
stage: scan_source_branch
image:
name: "company.gitlab.cloud.net:5050/companydev/example/scanner:master-with-db"
pull_policy: always
entrypoint: [""]
tags:
- k8s
- docker
variables:
API_BASE_URL: ${API_BASE_URL}
API_TOKEN: ${API_TOKEN}
API_CA_CERT: ${KCS_CA_CERT}
script:
- GITLAB_TOKEN=${CI_JOB_TOKEN} /scanner --repo ${CI_REPOSITORY_URL} --branch ${CI_COMMIT_BRANCH} --stdout
scan_source_commit:
stage: scan_source_commit
image:
name: "company.gitlab.cloud.net:5050/companydev/example/scanner:master-with-db"
pull_policy: always
entrypoint: [""]
tags:
- k8s
- docker
variables:
API_BASE_URL: ${API_BASE_URL}
API_TOKEN: ${API_TOKEN}
API_CA_CERT: ${KCS_CA_CERT}
script:
- GITLAB_TOKEN=${CI_JOB_TOKEN} /scanner --repo ${CI_REPOSITORY_URL} --commit ${CI_COMMIT_SHA} --stdout
Для сканирования файловой системы IaC требуется использовать образ сканера с базой данных vX.X.X-with-db. Для проверки файлов IaC сканеру необходимо предоставить доступ к этим файлам внутри контейнера (например, с помощью монтирования тома с файлами или копирования файлов в файловую систему контейнера).
Infrastructure as a Code – подход для управления и описания инфраструктуры через конфигурационные файлы, а не через ручное редактирование конфигураций на серверах.
Чтобы провести сканирование файловой системы,
выполните команду запуска сканирования в следующем формате:
/scanner [TARGET] --sources --stdout
где:
<TARGET>–путь к папке с файлами для сканирования;<--sources>–флаг, указывающий на необходимость проверки файлов, расположенных в файловой системе;<--stdout> –вывод данных в журнал событий безопасности.
Пример конфигурационного файла с переменными окружения для сканирования файлов в файловой системе
Далее представлены переменные окружения для ситуации, когда в процессе выполнения задачи сканер получает доступ к файлам проекта GitLab, расположенным в локальной файловой системе, через переменную CI_PROJECT_DIR.
scan_folder:
stage: scanner
image:
name: repo.kcs.kaspersky.com/images/scanner:v2.0.0-with-db
entrypoint: [""]
tags:
- k8s
variables:
SCAN_TARGET: ${CI_PROJECT_DIR}
BUILD_NUMBER: ${CI_JOB_ID}
BUILD_PIPELINE: ${CI_PIPELINE_ID}
API_BASE_URL: ${API_BASE_URL}
API_TOKEN: ${API_TOKEN}
SKIP_API_SERVER_VALIDATION: "true"
script:
- /bin/sh /entrypoint.sh $SCAN_TARGET --sources --stdout
Результаты сканирования можно посмотреть в разделе Ресурсы → Внешние сканирования, а также получить в форматах SPDX, JSON и HTML.
Настройка интеграции с GitLab CI/CD
В этом примере используется специальный образ сканера со встроенными базами данных уязвимостей, размещенный в реестре образов производителя решения.
Для использования возможности внешнего сканирования образов в процессе GitLab CI/CD вам нужно включить использование GitLab Container Registry.
Настройка интеграции состоит из следующих этапов:
- Авторизация GitLab CI/CD в реестре образов производителя Kaspersky Container Security.
- На рабочей станции оператора кластера подготовьте хеш по алгоритму Base64 от авторизационных данных, выполнив команду:
printf "login:password" | openssl base64 -Aгде login и password – имя и пароль учетной записи в реестре образов производителя Kaspersky Container Security.
- В переменных окружения GitLab CI/CD создайте переменную DOCKER_AUTH_CONFIG (в GitLab репозитории выберите Settings -> CI/CD, нажмите на кнопку Expand, чтобы развернуть блок Variables, затем нажмите на кнопку Add variable).
- Укажите содержимое переменной в следующем виде:
{"auths": {"repo.cloud.example.com": {"auth": "base64hash"}}}где base64hash – строка, полученная на этапе 1a.
- На рабочей станции оператора кластера подготовьте хеш по алгоритму Base64 от авторизационных данных, выполнив команду:
- Авторизация запросов из GitLab CI/CD при отправке данных в Kaspersky Container Security.
- Скопируйте токен API на странице Мой профиль.
- Укажите скопированное значение токена API в переменной API_TOKEN в конфигурационном файле .gitlab-ci.yml.
- Добавление этапа сканирования образов в процесс CI/CD.
Чтобы добавить этап сканирования в пайплайн CI/CD, необходимо добавить в файл .gitlab-ci.yml следующие строки:
- Добавьте информацию по образу сканера, содержащего базы уязвимостей и других вредоносных объектов, после этапа сборки кода в следующем виде:
scan_image:stage: scannerimage:name: repo.cloud.example.com/repository/company/scanner:v2.5-with-dbentrypoint: [""]pull_policy: alwaysМы рекомендуем указывать always для параметра
pull_policy, чтобы получать свежие сборки с обновленными базами уязвимостей и других вредоносных объектов при каждом сканировании. - Укажите тег, идентификатор сборки, идентификатор пайплайна и токен API для авторизации запросов от CI/CD сканера в Kaspersky Container Security в следующем виде:
SCAN_TARGET: ${CI_REGISTRY_IMAGE}:master
BUILD_NUMBER: ${CI_JOB_ID}
BUILD_PIPELINE: ${CI_PIPELINE_ID}
API_TOKEN:
<значение токена API>В приведенном примере указан тег
master, вы можете указать другой тег. - Если вы настраиваете сканирование для приватного репозитория, для доступа сканера к образу укажите авторизационные данные. Их можно задать в виде переменных.
COMPANY_EXT_REGISTRY_USERNAME: ${COMPANY_EXT_REGISTRY_USERNAME}
COMPANY_EXT_REGISTRY_PASSWORD: ${COMPANY_EXT_REGISTRY_PASSWORD}
- Для использования сертификата для безопасного подключения к реестру укажите данные сертификата в переменной окружения
COMPANY_EXT_REGISTRY_TLS_CERTв виде строки в формате .PEM:-----BEGIN CERTIFICATE-----\n... <данные сертификата> ...\n-----END CERTIFICATE-----. - Укажите следующие параметры, обеспечивающие взаимодействие через прокси-сервер:
HTTP_PROXY:<прокси-сервер для запросов по протоколу HTTP>HTTPS_PROXY:<прокси-сервер для запросов по протоколу HTTPS>NO_PROXY:<домены или соответствующие им маски для исключения из проксирования> - При необходимости укажите переменную для проверки сервера приема данных в CI/CD с помощью СА-сертификата Ingress-контроллера:
API_CA_CERT: ${KCS_CA_CERT}
СА-сертификат Ingress-контроллера указывается в текстовом поле в виде строки в формате .PEM:
-----BEGIN CERTIFICATE-----\n...
<данные сертификата>...\n-----END CERTIFICATE-----Если переменная
API_CA_CERTне задана, проверка будет запускаться, но не будет пройдена.Использование СА-сертификата Ingress-контроллера позволяет запускаемому в CI/CD сканеру убедиться в подлинности сервера приема данных.
Если вы используете самоподписанный сертификат или специально хотите пропустить проверку сервера приема данных с помощью СА-сертификата Ingress-контроллера, укажите значение переменной для пропуска проверки следующим образом:
SKIP_API_SERVER_VALIDATION: 'true'
- Укажите веб-адрес хост-сервера API Kaspersky Container Security:
API_BASE_URL:<веб-адрес>variables:
API_BASE_URL: ${API_BASE_URL}
script:
- /bin/sh /entrypoint.sh $SCAN_TARGET --stdout > artifact-result.json
artifacts:
paths:
- artifact-result.json
- Добавьте информацию по образу сканера, содержащего базы уязвимостей и других вредоносных объектов, после этапа сборки кода в следующем виде:
После настройки интеграции с внешним реестром вы можете проводить сканирование образов в процессе CI/CD, в том числе осуществлять сканирование в режиме SBOM. Результаты сканирования можно посмотреть в разделе Ресурсы → Внешние сканирования, а также получить в форматах .SPDX, .JSON и .HTML.
Настройка интеграции с Jenkins CI/CD
Настройка интеграции с Jenkins CI/CD состоит из следующих этапов:
- Авторизация Jenkins CI/CD в реестре образов производителя Kaspersky Container Security. Для этого на рабочей станции оператора кластера подготовьте хеш по алгоритму Base64 от авторизационных данных, выполнив команду:
printf "login:password" | openssl base64 -Aгде login и password – имя и пароль учетной записи в реестре образов производителя Kaspersky Container Security.
- Авторизация API Kaspersky Container Security. Для авторизации требуется выполнить следующие действия:
- Скопируйте токен API на странице Мой профиль.
- Укажите скопированное значение токена API в переменной API_TOKEN в конфигурационном файле Jenkinsfile.
- Проверка подлинности сервера приема данных в CI/CD с помощью СА-сертификата Ingress-контроллера. Для проведения проверки в конфигурационном файле Jenkinsfile укажите одну из следующих переменных:
-e API_CA_CERT=${KCS_CA_CERT}– проверка будет проведена, и запускаемый в CI/CD сканер сможет убедиться в подлинности сервера приема данных.-e SKIP_API_SERVER_VALIDATION=true– проверка сервера приема данных с помощью СА-сертификата Ingress-контроллера проводиться не будет.
- Создание переменных окружения Jenkins.
Чтобы создать переменные окружения, необходимо добавить в файл Jenkinsfile следующие строки:
- Добавьте информацию по реестру контейнеров, где находится сканер в следующем виде:
LOGIN– имя учетной записи в реестре сканераPASS– пароль для реестра сканера - Если вы настраиваете сканирование для приватного репозитория, для доступа сканера к образу укажите следующие авторизационные данные:
COMPANY_EXT_REGISTRY_USERNAME– имя учетной записи в реестре сканируемого образаCOMPANY_EXT_REGISTRY_PASSWORD– пароль для реестра сканируемого образа - Для использования сертификата для безопасного подключения к реестру укажите данные сертификата в переменной окружения
COMPANY_EXT_REGISTRY_TLS_CERTв виде строки в формате PEM:-----BEGIN CERTIFICATE-----\n... <данные сертификата> ...\n-----END CERTIFICATE-----. - Укажите значения следующих переменных, обеспечивающих взаимодействие через прокси-сервер:
HTTP_PROXY:<прокси-сервер для запросов по протоколу HTTP>HTTPS_PROXY:<прокси-сервер для запросов по протоколу HTTPS>NO_PROXY:<домены или соответствующие им маски для исключения из проксирования>
- Добавьте информацию по реестру контейнеров, где находится сканер в следующем виде:
- Добавление информации для запуска сканера. Информация для запуска сканера, содержащего базы уязвимостей и других вредоносных объектов, добавляется в конфигурационный файл Jenkinsfile в виде декларативного или скриптового пайплайна.
Пример информации для запуска сканера в виде декларативного пайплайна
pipeline {
agent any
stages {
stage('run scanner') {
steps {
sh 'docker login -u ${LOGIN} -p ${PASS} company.example.com'
sh 'docker run -e API_BASE_URL=https://kcs.cust02.int.example.com/ -e SKIP_API_SERVER_VALIDATION=true -e API_TOKEN=${API_TOKEN} -e COMPANY_EXT_REGISTRY_USERNAME=${COMPANY_EXT_REGISTRY_USERNAME} -e COMPANY_EXT_REGISTRY_PASSWORD=${COMPANY_EXT_REGISTRY_PASSWORD} company.example.com:5050/company/kcs/scanner:v
2.5.0-with-db jfrog.company.com/demo-kcs/bad:bad-project-test --html --stdout > result.html'}
}
}
}
Пример информации для запуска сканера в виде скриптового пайплайна
node {
stage ('run scanner') {
sh 'docker login -u ${LOGIN} -p ${PASS} company.example.com'
sh 'docker run -e API_BASE_URL=https://kcs.cust02.int.company.com/ -e API_CA_CERT=${KCS_CA_CERT} -e API_TOKEN=${API_TOKEN} -e COMPANY_EXT_REGISTRY_USERNAME=${COMPANY_EXT_REGISTRY_USERNAME} -e COMPANY_EXT_REGISTRY_PASSWORD=${COMPANY_EXT_REGISTRY_PASSWORD} company.example.com:5050/company/kcs/scanner:v
2.5.0-with-db jfrog.company.com/demo-kcs/bad:bad-project-test --html --stdout > result.html'}
}
- Формирование артефакта для скачивания.
Для получения результатов сканирования вы можете сформировать артефакт для скачивания в формате HTML или JSON. Формат артефакта вы можете указать в строке
--stdout, например:pipeline {agent anystages {stage('run scanner') {steps {sh 'docker login -u ${LOGIN} -p ${PASS} company.example.com'sh 'docker run -e API_BASE_URL=https://kcs.int.company.com -e SKIP_API_SERVER_VALIDATION=true -e API_TOKEN=${API_TOKEN} -e COMPANY_EXT_REGISTRY_USERNAME=${COMPANY_EXT_REGISTRY_USERNAME} -e COMPANY_EXT_REGISTRY_PASSWORD=${COMPANY_EXT_REGISTRY_PASSWORD} company.example.com:5050/company/kcs/scanner:v2.5.1-lite jfrog.company.com/demo-kcs/bad:bad-project-test --html --stdout > result.html'}}stage('archive') {steps {archiveArtifacts artifacts: 'result.html'}}}}Если необходимо сформировать артефакт в формате JSON, строку
--html --stdout > result.html'из приведенного выше примера требуется указать следующим образом:--stdout > result.json',и в строке
archiveArtifacts artifacts:необходимо указать название файла в заданном вами формате: 'result.json'.Результаты сканирования можно получить в указанном вами формате, а также посмотреть в разделе Ресурсы → Внешние сканирования.
Настройка интеграции с TeamCity CI/CD
Чтобы настроить интеграцию с TeamCity CI/CD:
- Скопируйте токен API на странице Мой профиль для авторизации API Kaspersky Container Security в TeamCity.
- В меню настройки параметров в веб-интерфейсе TeamCity выберите Build Configuration Home → Parameters.
- С помощью кнопки Add new parameters добавьте значения следующих переменных окружения:
API_TOKEN– укажите скопированное значение токена API Kaspersky Container Security.API_BASE_URL– укажите URL Kaspersky Container Security.RUST_BACKTRACE– при необходимости укажите значениеfullдля использования обратной трассировки.SKIP_API_SERVER_VALIDATION– укажите значениеtrue, если используется самоподписанный сертификат или необходимо пропустить проверку сервера приема данных с помощью СА-сертификата Ingress-контроллера.COMPANY_EXT_REGISTRY_USERNAME– укажите имя учетной записи в реестре сканируемого образа.COMPANY_EXT_REGISTRY_PASSWORD– укажите пароль для реестра сканируемого образа.COMPANY_EXT_REGISTRY_TLS_CERT– укажите данные сертификата для безопасного подключения к реестру.Данные сертификата указываются в виде строки в формате .PEM:
-----BEGIN CERTIFICATE-----\n... <данные сертификата> ...\n-----END CERTIFICATE-----.HTTP_PROXY– указывается прокси-сервер для запросов по протоколу HTTP.HTTPS_PROXY– указывается прокси-сервер для запросов по протоколу HTTPS.NO_PROXY– указываются домены или соответствующие им маски для исключения из проксирования.
- Перейдите в раздел Build Configuration Home → Build Step: Command Line и с помощью кнопки Add build step добавьте этап сборки.
- В открывшемся окне укажите следующие параметры этапа сборки:
- В раскрывающемся списке Runner type выберите Command Line.
- В раскрывающемся списке Run выберите Custom script.
- В поле Custom script укажите путь к контейнеру для сканирования (например,
/bin/sh /entrypoint.sh nginx:latest).
- В блоке Docker Settings укажите следующие параметры:
- В поле Run step within Docker container укажите адрес сканера в реестре Docker. Например,
company.gitlab.cloud.net:5050/companydev/example/scanner:v2.5.0-with-db. - В поле Additional docker run arguments повысьте значение привилегий до
--privileged.
- В поле Run step within Docker container укажите адрес сканера в реестре Docker. Например,
- Нажмите на кнопку Save, чтобы сохранить параметры.
- Нажмите на кнопку Run в верхнем правом углу страницы, чтобы запустить сборку.
- При необходимости скачайте артефакт с результатами сканирования, который доступен на вкладке Artifacts на странице с результатами проверки сборки в веб-интерфейсе TeamCity.
Настройка интеграции с GitHub CI/CD
В этом примере используется специальный образ сканера со встроенными базами данных уязвимостей, размещенный в реестре образов производителя решения.
Настройка интеграции состоит из следующих этапов:
- Авторизация в GitHub Container Registry для получения доступа к образу в репозитории. Для этого в конфигурационном файле Dockerfile укажите тип реестра, имя пользователя и пароль в GitHub CI/CD следующим образом:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- Авторизация API Kaspersky Container Security. Для авторизации выполните следующие действия:
- Скопируйте токен API на странице Мой профиль.
- Укажите скопированное значение токена API в переменной
API_TOKENв секцииsecrets githubконфигурационного файла Dockerfile.
- Определение значений секретов в проекте GitHub Container Registry. Для этого авторизуйтесь в веб-интерфейсе проекта в GitHub Container Registry и выполните следующие действия:
- Перейдите в раздел Settings → Secrets and Variables → Secrets.
- В блоке Repository secrets нажмите на кнопку New repository secret.
- Укажите секреты, которые будут применены к вашему проекту:
API_TOKEN– значение скопированного на шаге 2а токена API.COMPANY_EXT_REGISTRY_USERNAME– имя пользователя для работы с приватным репозиторием Kaspersky Container Security.COMPANY_EXT_REGISTRY_PASSWORD– пароль для работы с приватным репозиторием Kaspersky Container Security.
- Добавление этапа сканирования образов в процесс CI/CD.
Чтобы добавить этап сканирования в пайплайн CI/CD, необходимо добавить в конфигурационный файл Dockerfile следующие строки:
- Добавьте информацию по образу сканера, содержащего базы уязвимостей и других вредоносных объектов, после этапа сборки кода в следующем виде:
scan_image:steps:- name: Log in toCompanyRegistryuses: docker/login-action@v3with:registry: repo.kcs.company.comusername: ${{ secrets.COMPANY_EXT_REGISTRY_USERNAME }}password: ${{ secrets.COMPANY_EXT_REGISTRY_PASSWORD }} - Если вы настраиваете сканирование для приватного репозитория, для доступа сканера к образу укажите авторизационные данные. Их можно задать в виде переменных.
run: |
docker run --rm \
-e COMPANY_EXT_REGISTRY_USERNAME="${{ secrets.COMPANY_EXT_REGISTRY_USERNAME }}" \
-e COMPANY_EXT_REGISTRY_PASSWORD="${{ secrets.COMPANY_EXT_REGISTRY_PASSWORD }}" \
- Укажите веб-адрес хост-сервера API Kaspersky Container Security:
-e
API_BASE_URL: "<веб-адрес>"\Для запуска сканирования необходимо иметь действующий API-токен на этом хост-сервере.
- При необходимости укажите переменную для проверки сервера приема данных в CI/CD с помощью СА-сертификата Ingress-контроллера:
-e API_CA_CERT: ${KCS_CA_CERT}\
СА-сертификат Ingress-контроллера указывается в текстовом поле в виде строки в формате .PEM:
-----BEGIN CERTIFICATE-----\n...
<данные сертификата>...\n-----END CERTIFICATE-----Если переменная
API_CA_CERTне задана, проверка будет запускаться, но не будет пройдена.Использование СА-сертификата Ingress-контроллера позволяет запускаемому внешнему сканеру убедиться в подлинности сервера приема данных.
Если вы используете самоподписанный сертификат или специально хотите пропустить проверку сервера приема данных с помощью СА-сертификата Ingress-контроллера, укажите значение переменной для пропуска проверки следующим образом:
-e SKIP_API_SERVER_VALIDATION: 'true'
- Укажите токен API для авторизации запросов от внешнего сканера в Kaspersky Container Security в следующем виде:
-e API_TOKEN: <значение токена API>
- Добавьте информацию по образу сканера, содержащего базы уязвимостей и других вредоносных объектов, после этапа сборки кода в следующем виде:
- Добавление информации для запуска сканера. Информация для запуска сканера, содержащего базы уязвимостей и других вредоносных объектов, добавляется в конфигурационный файл Dockerfile следующим образом:
repo.kcs.company.com/images/scanner:v2.5.0-with-db \
- Формирование артефакта для скачивания.
Для получения результатов сканирования вы можете сформировать артефакт для скачивания в формате HTML, SPDX или JSON. Формат артефакта вы можете указать в строке --stdout, например:
--stdout --api-base-url "
<веб-адрес>" "ttl.sh/admin-sd-github-${{ github.run_id }}:1h" > examplefile.json || trueРезультаты сканирования можно посмотреть в разделе Ресурсы → Внешние сканирования, а также получить в форматах .SPDX, .JSON и .HTML.
Определение пути до образов контейнеров
Для начала сканирования решению необходимо определить путь до образов контейнеров, которые требуется проверить. Путь до образов контейнеров может быть указан двумя способами:
- За названием реестра, репозитория и имени образа указывается тег образа. Тег представляет собой изменяемое легкочитаемое описание образа.
Путь в этом случае выглядит следующим образом:
<реестр>/<репозиторий>/<имя образа>:<тег>. Например, http://docker.io/library/nginx:1.20.1. - За названием реестра, репозитория и имени образа указывается контрольная сумма образа. Контрольная сумма является неизменным внутренним свойством образа, а именно хешем его содержимого (используется хеш-алгоритм SHA256).
При использовании контрольной суммы путь представляет собой следующее:
<реестр>/<репозиторий>/<имя образа><контрольная сумма>. Например, http://docker.io/library/nginx@sha256:af9c...69ce.
Тег может соответствовать различным контрольным суммам, а контрольные суммы уникальны для каждого образа.
В зависимости от способа указания пути до образа перед началом сканирования Kaspersky Container Security осуществляет одно из следующих действий:
- Преобразовывает тег в доверенную контрольную сумму.
- Проверяет, является ли указанная в пути до образа контрольная сумма доверенной. Контрольная сумма считается доверенной, если обеспечена необходимая степень уверенности в поддержании требуемого режима безопасности в отношении кодируемого с помощью хеш-алгоритма объекта.
В среду выполнения контейнера передаются только доверенные контрольные суммы.
Перед запуском контейнера содержимое образа сравнивается с полученной контрольной суммой. Для признания контрольной суммы доверенной, а образа неискаженным Kaspersky Container Security проверяет целостность и подлинность подписи образа.
| В этом разделе справки Контроль целостности и происхождения образов Запуск сканера в режиме lite SBOM Получение результатов сканирования в форматах JSON и HTML |