Kaspersky Security для контейнеров

Проверка артефактов в процессах CI/CD

С помощью решения вы можете сканировать образы, которые используются в процессах CI/CD. Для проверки образов из CI/CD вам требуется настроить интеграцию решения с процессами CI/CD.

Между средой CI/CD и решением должна быть обеспечена безопасность передачи данных от прослушивания и перехвата сетевого трафика.

Чтобы выполнять проверку образов или репозиториев (для сканирования конфигурационных файлов), используемых в процессе CI/CD, вам нужно добавить в пайплайн CI/CD отдельный этап, на котором запускается сканер Kaspersky Security для контейнеров.

Для проведения сканирования образов из CI/CD в конфигурационном файле интеграции с репозиторием сканеру требуется указать переменные окружения API_BASE_URL (веб-адрес хост-сервера API Kaspersky Security для контейнеров) и API_TOKEN (токен для доступа к API Kaspersky Security для контейнеров). Также необходимо указать API_CA_CERT (сертификат для проверки хост-сервера API решения) или SKIP_API_SERVER_VALIDATION=true для пропуска такой проверки.

Результаты сканирования передаются на сервер и отображаются в консоли управления в разделе РесурсыCI/CD. В представленной таблице перечислены образы, для которых проводилась проверка, указываются результаты оценки риска и выявленные уязвимости.

По ссылке в названии образа вы можете открыть страницу, содержащую подробную информацию о результатах сканирования образа. Страница аналогична странице с результатами сканирования образов из реестров.

Kaspersky Security для контейнеров также отображает тип артефакта для каждого объекта. Используются два основных артефакта:

  • Файловая система – это репозиторий с содержащимися в нем конфигурационными файлами.
  • Образ контейнера – это шаблон, на основе которого реализуется контейнер в среде выполнения.

Для каждого объекта проверки можно указывать номер сборки (BUILD_NUMBER) и

сборки (BUILD_PIPELINE). С помощью этих параметров можно определить, на каком этапе в объекте произошел сбой.

Для образов из CI/CD недоступно повторное сканирование.

В Kaspersky Security для контейнеров осуществляются следующие виды сканирования в CI/CD:

  • Сканирование образов из реестра образов. Решение осуществляет проверку после успешной сборки и сохранения образа в реестр образов.
  • Сканирование образов, помещенных в архивы в формате 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-----.

Примеры сканирования образов в GitLab CI/CD и Jenkins CI/CD.

Чтобы провести сканирование образа из TAR-архива:

  1. Соберите образ и сохраните его в виде TAR-архива с помощью любого приложения для создания контейнеризированных образов.
  2. Выполните команду запуска сканирования в следующем формате:

    /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-репозитория:

  1. В конфигурационном файле Git-репозитория в переменных окружения укажите токен для доступа к репозиторию (GITHUB_TOKEN или GITLAB_TOKEN).
  2. Выполните команду запуска сканирования в следующем формате:

    /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

Для сканирования файловой системы

требуется использовать образ сканера с базой данных vX.X.X-with-db. Для проверки файлов IaC сканеру необходимо предоставить доступ к этим файлам внутри контейнера (например, с помощью монтирования тома с файлами или копирования файлов в файловую систему контейнера).

Чтобы провести сканирование файловой системы,

выполните команду запуска сканирования в следующем формате:

/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

Результаты сканирования можно посмотреть в разделе РесурсыCI/CD, а также получить в форматах .SPDX, .JSON и .HTML.

В начало
[Topic 296997]