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

Запуск сканера в режиме lite SBOM

Kaspersky Security для контейнеров предоставляет возможность запуска сканера для проверки образов на наличие уязвимостей в режиме lite SBOM. В данном случае решение осуществляет сканирование специально созданного SBOM-файла, а результаты этого сканирования становятся доступны на этапе CI/CD.

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

Для получения результатов вы можете сформировать артефакт для скачивания в формате .SPDX, .HTML, .JSON или .CDX.

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

В этом разделе

Запуск сканера в GitLab

Запуск вне процесса CI/CD

В начало
[Topic 297412]

Запуск сканера в GitLab

Чтобы запустить сканер в режиме lite SBOM в GitLab, при настройке сканирования образов в процессе CI/CD измените конфигурационный файл .gitlab-ci.yml следующим образом:

  1. Добавьте информацию по образу сканера, запускаемого на этапе сканирования образов в процессе CI/CD в следующем виде:

    scan_image:

    stage: scanner

    image:

    name:repo.cloud.example.com/repository/company/scanner:v.2.0.0-lite

    entrypoint: [""]

    pull_policy: always

  2. Укажите тег платформы оркестрации в следующем виде:

    k8s

    В приведенном примере указан тег k8s для обозначения Kubernetes, вы можете указать тег для другой поддерживаемой платформы оркестрации.

  3. Укажите такие переменные как идентификатор сборки, данные реестра сканируемого образа и сертификата для безопасного подключения к этому реестру, идентификатор пайплайна и токен API для авторизации запросов от CI/CD сканера в Kaspersky Security для контейнеров в следующем виде:

    SCAN_TARGET: ${CI_REGISTRY_IMAGE}:master

    COMPANY_EXT_REGISTRY_USERNAME: ${COMPANY_EXT_REGISTRY_USERNAME}

    COMPANY_EXT_REGISTRY_PASSWORD: ${COMPANY_EXT_REGISTRY_PASSWORD}

    COMPANY_EXT_REGISTRY_TLS_CERT: ${COMPANY_EXT_REGISTRY_TLS_CERT}

    BUILD_NUMBER: ${CI_JOB_ID}

    BUILD_PIPELINE: ${CI_PIPELINE_ID}

    API_TOKEN: <значение токена API>

    HTTP_PROXY: <прокси-сервер для запросов по протоколу HTTP>

    HTTPS_PROXY: <прокси-сервер для запросов по протоколу HTTPS>

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

    Данные сертификата для безопасного подключения к реестру сканируемого образа в переменной COMPANY_EXT_REGISTRY_TLS_CERT указываются в виде строки в формате .PEM:
    -----BEGIN CERTIFICATE-----\n... <данные сертификата> ...\n-----END CERTIFICATE-----.

  4. При необходимости укажите переменную для проверки сертификата API-интерфейса решения:

    API_CA_CERT: ${KCS_CA_CERT}

    Если переменная API_CA_CERT не задана, проверка будет запускаться, но не будет пройдена.

  5. Укажите веб-адрес хост-сервера API Kaspersky Security для контейнеров:

    API_BASE_URL: <веб-адрес>

  6. Укажите команду для создания файла артефакта при запуске сканера в одном из следующих поддерживаемых форматов:
    • Для создания артефакта в формате .JSON:

      script:

      - /bin/sh /entrypoint.sh $SCAN_TARGET --stdout > artifact-result.json

      artifacts:

      paths:

      - artifact-result.json

    • Для создания артефакта в формате .HTML:

      script:

      - /bin/sh /entrypoint.sh $SCAN_TARGET --html --stdout > artifact-result.html

      artifacts:

      paths:

      - artifact-result.html

    • Для создания артефакта SBOM в формате .SPDX:

      script:

      - /bin/sh /entrypoint.sh $SCAN_TARGET --spdx --stdout > artifact-result.spdx

      artifacts:

      paths:

      - artifact-result.spdx

    • Для создания артефакта SBOM в формате .CDX:

      script:

      - /bin/sh /entrypoint.sh $SCAN_TARGET --cdx --stdout > artifact-result.cdx.json

      artifacts:

      paths:

      - artifact-result.cdx.json

Пример настройки запуска сканера в режиме lite SBOM и создания артефакта в формате .HTML в GitLab

scan_image:

stage: scanner

image:

name: repo.cloud.example.com/repository/company/scanner:v.2.0.0-lite

entrypoint: [""]

pull_policy: always

tags:

- k8s

variables:

SCAN_TARGET: ${CI_REGISTRY_IMAGE}:master

COMPANY_EXT_REGISTRY_USERNAME: ${COMPANY_EXT_REGISTRY_USERNAME}

COMPANY_EXT_REGISTRY_PASSWORD: ${COMPANY_EXT_REGISTRY_PASSWORD}

BUILD_NUMBER: ${CI_JOB_ID}

BUILD_PIPELINE: ${CI_PIPELINE_ID}

API_CA_CERT: ${KCS_CA_CERT}

API_TOKEN: <значение токена API>

# Demostand KCS.int API:

API_BASE_URL: <веб-адрес>

script:

- /bin/sh /entrypoint.sh $SCAN_TARGET --html --stdout > artifact-result.html

artifacts:

paths:

- artifact-result.html

В начало
[Topic 301503]

Запуск вне процесса CI/CD

В случае ограниченных ресурсов, вы можете запускать сканер Kaspersky Security для контейнеров отдельно от вычислительных узлов процесса CI/CD. Например, на Docker-узле с помощью команды docker run или в виде объекта Job в кластере Kubernetes.

Для максимальной экономии ресурсов мы рекомендуем использовать образ scanner:2.0.0-lite, так как он не содержит баз уязвимостей и отправляет сформированный по результатам проверки целевого образа SBOM-файл на анализ в решение с помощью API.

Для запуска сканера Kaspersky Security для контейнеров вне процесса CI/CD необходимо указать следующие обязательные параметры:

  • API_TOKEN: <значение токена API> – токен пользователя Kaspersky Security для контейнеров для аутентификации в API-интерфейсе решения.
  • API_BASE_URL: <веб-адрес> – ссылка для доступа к API-интерфейсу Kaspersky Security для контейнеров. Доступ может осуществляться по протоколам HTTP и HTTPS, в зависимости от настроек окружения развернутого решения.
  • API_CA_CERT: <сертификат в формате PEM> – переменная для проверки сертификата API-интерфейса решения.
  • SKIP_API_SERVER_VALIDATION=true – переменная, которую при необходимости можно указать для пропуска проверки сертификата API-интерфейса Kaspersky Security для контейнеров.

Вы также можете указать дополнительные параметры для работы сканера:

  • COMPANY_EXT_REGISTRY_USERNAME: <имя пользователя реестра> – имя пользователя реестра, где хранится образ для проверки сканером.
  • COMPANY_EXT_REGISTRY_PASSWORD: <пароль пользователя реестра> – пароль пользователя реестра, где хранится образ для проверки сканером.
  • BUILD_NUMBER: <идентификатор номера сборки> – идентификатор, который используется для отслеживания номера сборки в интерфейсе решения. Kaspersky Security для контейнеров отображает номер в результатах проверки в процессе CI\CD.
  • BUILD_PIPELINE: <идентификатор номера пайплайна> – идентификатор, который используется для отслеживания номера пайплайна в интерфейсе решения. Kaspersky Security для контейнеров отображает номер в результатах проверки в процессе CI\CD.
  • HTTP_PROXY: <прокси-сервер для запросов по протоколу HTTP> – переменная, которая указывает на использование HTTP-прокси сервера, когда вам требуется доступ к внешним ресурсам.
  • HTTPS_PROXY: <прокси-сервер для запросов по протоколу HTTPS> – переменная, которая указывает на использование HTTPS- прокси когда вам требуется доступ к внешним ресурсам.
  • NO_PROXY: <домены или соответствующие им маски для исключения из проксирования> – переменная, которая указывает на доступные локально ресурсы, если используется прокси-сервер.

Запуск сканера в Docker

Чтобы запустить сканер в режиме lite SBOM в Docker:

  1. Укажите обязательные параметры Kaspersky Security для контейнеров:

    -e API_TOKEN=<значение токена API>

    -e API_BASE_URL=https://company.com

    -e API_CA_CERT: <сертификат в формате PEM> или -e SKIP_API_SERVER_VALIDATION=true

  2. При необходимости укажите дополнительные параметры Kaspersky Security для контейнеров.
  3. Укажите образ сканера для запуска:

    repo.kcs.company.com/images/scanner:v2.0.0-lite

  4. Если необходимо сформировать артефакт для скачивания, укажите следующее:

    --<формат артефакта> --stdout > result.<формат файла>

    Например,

    --html --stdout > result.html

  5. Убедитесь, что конфигурационный файл .docker/config.json содержит данные для подключения к реестру с образом сканера. При необходимости выполните команду docker login repo.company.com или docker login repo.kcs.kaspersky.com.
  6. Запустите задачу сканирования.

    Если при вызове сканера появляется ошибка преобразования имени домена Name does not resolve, до переменной API_BASE_URL нужно указать адрес до внутреннего DNS сервера вашей организации. Например,

    --dns 10.0.xx.x

Если образ сканера и образ для проверки хранятся в вашем реестре и вам требуется сформировать артефакт с результатом работы сканера в формате .JSON, данные для запуска сканера заданы следующим образом:

docker run --dns 10.0.10.10 \

-e "API_BASE_URL=https://kcs.company.com" \

-e "SKIP_API_SERVER_VALIDATION=true" \

-e "API_TOKEN=${api_token}" \

-e "COMPANY_EXT_REGISTRY_USERNAME=${user}" \

-e "COMPANY_EXT_REGISTRY_PASSWORD=${password}"

repo.company.com/images/scanner:v2.0.0-lite \

repo.company.com/images/alpine:latest --stdout > result.json

Если образ сканера хранится в публично доступном реестре "Лаборатории Касперского" (узел скачивает этот образ с помощью вашего прокси сервера), образ для проверки хранится локально на узле в виде архива, и вам требуется сформировать артефакт с результатом работы сканера в формате .SPDX, данные для запуска сканера заданы следующим образом:

docker run --dns 10.0.10.10 \

-e "API_BASE_URL=https://kcs.company.com" \

-e "SKIP_API_SERVER_VALIDATION=true" \

-e "API_TOKEN=${api_token}" \

-e "HTTPS_PROXY=http://user:password@client.proxy.com:8080" \

-v ./image_to_scan.tar:/image.tar \

repo.kcs.kaspersky.com/images/scanner:v2.0.0-lite \

image.tar --file --spdx --stdout > result.spdx

Запуск сканера как объекта Job в кластере Kubernetes

Чтобы запустить сканер в режиме lite SBOM как объект Job в кластере Kubernetes:

  1. Убедитесь, что выполняющий команды узел содержит kubectl и конфигурационный файл kubeconfig для соответствующего кластера Kubernetes и они доступы в пользователю, запускающему команды.
  2. Убедитесь, что в соответствующем пространстве имен существует секрет для аутентификации и загрузки образа сканера из интересующего вас реестра.

    Вы можете создать такой секрет самостоятельно, например с помощью следующей команды:

    kubectl create secret docker-registry <имя секрета> --docker-server=<FQDN репозитория> --docker-username=username --docker-password=password

  3. Укажите значения обязательных и при необходимости дополнительных параметров для работы сканера в виде задачи в кластере Kubernetes.

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

    apiVersion: batch/v1

    kind: Job

    metadata:

    name: my-lite-job

    spec:

    template:

    spec:

    containers:

    - name: my-lite-container

    image: repo.company.com/images/scanner:v2.0.0-lite

    command: ["/bin/sh"]

    args: ["entrypoint.sh", "alpine:latest"]

    env:

    - name: COMPANY_EXT_REGISTRY_USERNAME

    value: <пользователь для аутентификации в реестре с образом для проверки>

    - name: COMPANY_EXT_REGISTRY_PASSWORD

    value: <пароль для аутентификации в реестре с образом для проверки>

    - name: API_BASE_URL

    value: https://kcs.company.local

    - name: API_TOKEN

    value: <токен для аутентификации в API решения>

    - name: SKIP_API_SERVER_VALIDATION

    value: 'true'

    imagePullPolicy: Always

    restartPolicy: Never

    imagePullSecrets:

    - name: <имя секрета для аутентификации и загрузки образа сканера>

    backoffLimit: 0

  4. Запустите задачу сканирования в кластере Kubernetes:

    kubectl apply -f my-lite-job.yaml

В начало
[Topic 301504]