Практические методы SBOM в CI/CD. Часть 2. Развертывание Dependency-Track
Практические методы SBOM в CI/CD. Часть 2. Развертывание Dependency-Track

В этой статье описывается, как использовать Dependency-Track OWASP для хранения и анализа инвентаризации программного обеспечения.,Для выявления проблем безопасности в компонентах с открытым исходным кодом. В нем показано, как реализовать развертываниеDependency-Track в производственной среде.,и Подвести Итог Достоинства и недостатки этой платформы.

Переведено с A Practical Approach to SBOM in CI/CD Part II — Deploying Dependency-Track

Что такое трек зависимостей?

Dependency-TrackэтоOWASPПоддержка открытого исходного кода продолжаетсяSBOMАналитическая платформа。Его официальное описание следующее:

Dependency-Trackэто интеллекткомпонентный анализплатформа,Позволяет организациям выявлять и снижать риски в цепочке поставок программного обеспечения. Dependency-Track использует уникальный и очень выгодный подход.,То есть использоватьМанифест программного обеспечения (SBOM)функция。Этот подход позволяет проводить традиционный анализ состава программного обеспечения.(SCA)解决方案无法实现функция。

С практической точки зрения Dependency-Track отслеживает проекты и связанные с ними компоненты на основе загруженных SBOM. Платформа состоит из следующих частей:

  • API-сервер
  • Размещение статических файлов пользовательского интерфейса на внешнем сервере

Кроме того, платформа использует базу данных для хранения своих данных. По умолчанию используется встроенная база данных H2, но в производственной среде рекомендуется использовать PostgreSQL или Microsoft SQL Server.

SBOM можно загружать через пользовательский интерфейс веб-приложения или общедоступный API. Что касается API, он может автоматически обновлять проекты и загружать SBOM на этапе CI/CD. Ниже представлен проект выявления уязвимостей на основе предоставленного SBOM:

Представление аудита уязвимостей проекта в пользовательском интерфейсе Dependency-Track

также,Dependency-TrackиспользоватьСистема оценки прогнозирования уязвимостей(EPSS),Используется для оценки возможности (вероятности) того, что программное обеспечение лазейки эксплуатируется. EPSS можно использовать для определения приоритетности корректирующих работ.

Источники уязвимостей, используемые в конфигурации Dependency-Track по умолчанию, включают:

  • нациялазейкибаза данных(National Vulnerability Database),
  • GitHub Advisories,
  • Google OSV Advisories(Beta)

База данных уязвимостей регулярно обновляется, по умолчанию каждые 24 часа.

Кроме того, Dependency-Track поддерживает настройку политик безопасности и уведомление о нарушениях на основе информации об уязвимостях и разрешениях. Например, вы можете создать политику, которая разрешает только определенные лицензии, как в следующем примере:

Наконец, Dependency-Track объединяет множество функций и очень ценен с точки зрения реализации процесса управления уязвимостями.

Интеграция отслеживания зависимостей

Разверните Dependency-Track в среде разработки/локальной среде с помощью Docker Compose.

После понимания основной информации о Dependency-Track рекомендуется протестировать его локально!

на самом деле,Документацию можно предоставитьDocker Composeлегкийразвертывать该платформа。Но учитываяH2Не подходит для производства.,Я настроил композицию,Вместо этого добавьте данные PostgreSQLбазы.,PostgreSQL также рекомендуется для разработки/локальных сред.,Сделайте окружающую среду единообразной.

Я подготовил следующий контент Docker Compose, который можно сохранить в docker-compose.yaml:

Язык кода:javascript
копировать
version: '3.7'

#####################################################
# This Docker Compose file contains three services
#    Dependency-Track API Server 4.8.2
#    Dependency-Track FrontEnd 4.8.1
#    PostgreSQL 16.0
#####################################################

services:
  dtrack-apiserver:
    image: dependencytrack/apiserver:4.8.2
    depends_on:
      - postgres-db
    environment:
      - ALPINE_DATABASE_MODE=external
      - ALPINE_DATABASE_URL=jdbc:postgresql://postgres-db:5432/${POSTGRES_DB}
      - ALPINE_DATABASE_DRIVER=org.postgresql.Driver
      - ALPINE_DATABASE_USERNAME=${POSTGRES_USERNAME}
      - ALPINE_DATABASE_PASSWORD=${POSTGRES_PASSWORD}
      - ALPINE_CORS_ENABLED=true
      - ALPINE_CORS_ALLOW_ORIGIN=${CORS_ALLOW_ORIGIN}
      - ALPINE_CORS_ALLOW_METHODS=GET, POST, PUT, DELETE, OPTIONS
      - ALPINE_CORS_ALLOW_HEADERS=Origin, Content-Type, Authorization, X-Requested-With, Content-Length, Accept, Origin, X-Api-Key, X-Total-Count, *
      - ALPINE_CORS_EXPOSE_HEADERS=Origin, Content-Type, Authorization, X-Requested-With, Content-Length, Accept, Origin, X-Api-Key, X-Total-Count
      - ALPINE_CORS_ALLOW_CREDENTIALS=true
      - ALPINE_CORS_MAX_AGE=3600
    deploy:
      resources:
        limits:
          memory: 12288m
        reservations:
          memory: 8192m
      restart_policy:
        condition: on-failure
    ports:
      - '8081:8080'
    volumes:
      - 'dependency-track:/data'
    restart: unless-stopped

  dtrack-frontend:
    image: dependencytrack/frontend:4.8.1
    depends_on:
      - dtrack-apiserver
    environment:
      - API_BASE_URL=http://localhost:8081
    ports:
      - "8080:8080"
    restart: unless-stopped

  postgres-db:
    image: postgres:16.0
    restart: always
    user: postgres
    environment:
      POSTGRES_USER: ${POSTGRES_USERNAME}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d ${POSTGRES_DB} -U ${POSTGRES_USERNAME}"]
      interval: 1s
      timeout: 5s
      retries: 10
    ports:
      - 5432:5432

volumes:
  pgdata:
    driver: local
  dependency-track:
    driver: local

Кроме того, следующие переменные необходимо сохранить локально в файле .env:

Язык кода:javascript
копировать
POSTGRES_USERNAME=dtrack
POSTGRES_PASSWORD=dtrack
POSTGRES_DB=dtrack
CORS_ALLOW_ORIGIN=*

Следует отметить, что,Как в среде разработки, так и в производственной среде,Все сертификаты должны быть скорректированы и надежно сохранены. также,CORS_ALLOW_ORIGINпеременнаядолжно быть настроено на хостингеDependency-Trackсовпадения доменных имен,Потому что он будет использоваться для HTTP-заголовка «Access-Control-Allow-Origin». в производственной среде,Не рекомендуется использовать подстановочный знак (*) для этого HTTP-заголовка. Дополнительная информация о CORS,Можно обратиться кСтатья PortSwigger

Теперь платформу можно запустить, выполнив следующую команду в том же каталоге:

Язык кода:javascript
копировать
docker compose --env-file .env up

Через несколько минут приложение будет доступно на http://localhost:8080/ Посетил. Имя пользователя и пароль по умолчанию: admin:admin。

Login Panel — Dependency-Track

Развертывание Dependency-Track в Kubernetes

可以использоватьуправление сообществомизHelm Chart развертывает платформу на K8s. На момент написания этой статьи Хелм Chart использует последнюю версию образа контейнера Dependency-Track и PostgreSQL версии 10.10.

В демонстрационных целях я решил развернуть платформу локально на Minikube. Это не рекомендуется для производственных сред, но достаточно, чтобы продемонстрировать, как развернуть Dependency-Track на K8. Поскольку моя частная среда разработки основана на WSL2, я настроил Minikube локально в соответствии со статьей ниже:

Сборка Kubernetes через Minikube на WSL2 [2023]

Выполнив ряд команд, описанных в статье, я успешно развернул Minikube локально. В моем случае мне нужно было настроить 4 процессора с помощью Minikube CLI для создания кластера. Кроме того, мне нужно включить плагин NGINX Ingress. Соответствующие команды следующие:

Язык кода:javascript
копировать
minikube start --cpus=4
minikube addons enable ingress

Запустите Minikube локально

После подготовки среды K8s,Требуется установкаHelm。HelmдаKubernetesиз包管理器。各个系统из安装过程在Официальная документацияописаны в。

Поскольку у нас установлены все необходимые условия, мы можем начать фактическое развертывание Dependency-Track, выполнив следующую команду:

Язык кода:javascript
копировать
# add Helm repository with chart for Dependency-Track
# Helm chart is available at:
# https://github.com/evryfs/helm-charts/tree/master/charts/dependency-track
helm repo add evryfs-oss https://evryfs.github.io/helm-charts/

# deploy Dependency-Track in a namespace named dependency-track
helm install dependency-track evryfs-oss/dependency-track \
--namespace dependency-track \
--create-namespace \
--set ingress.enabled=true \
--set ingress.tls.enabled=true \
--set ingress.host=kubernetes.docker.internal # adjust the host
# I recommend to override below credentials used by PostgreSQL db in prod
# --set postgresql.postgresqlUsername=
# --set postgresql.postgresqlPassword=

Можно заметить, что я прошел Хелм install命令中из--setПараметры, заданные для некоторых графиковпеременная。Этипеременная Можно найти вvalues.yamlнайден в。

После выполнения команды вы должны увидеть вывод, аналогичный следующему:

Язык кода:javascript
копировать
NAME: dependency-track
LAST DEPLOYED: Sat Sep 23 13:54:11 2023
NAMESPACE: dependency-track
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:

Теперь давайте проверим, что ресурс развернут в K8s, выполнив несколько команд:

Язык кода:javascript
копировать
$ kubectl get namespaces
NAME               STATUS   AGE
default            Active   19m
dependency-track   Active   2m42s
kube-node-lease    Active   19m
kube-public        Active   19m
kube-system        Active   19m

kubectl get pods --namespace=dependency-track
NAME                                         READY   STATUS    RESTARTS        AGE
dependency-track-apiserver-6b9c86776-djwx8   1/1     Running   2 (2m20s ago)   2m38s
dependency-track-frontend-55c79cdb4c-69rjl   1/1     Running   0               2m38s
dependency-track-frontend-55c79cdb4c-z4t8n   1/1     Running   0               2m38s
dependency-track-postgresql-0                1/1     Running   0               2m38s

Развертывание может занять несколько минут, поэтому наберитесь терпения. еслисостояниеЛюбые ошибки отображаются в столбце,для отладки,Я рекомендую использовать следующую команду для получения журналов модуля:

Язык кода:javascript
копировать
# get logs for the ${POD_NAME}
kubectl logs ${POD_NAME} --namespace=dependency-track

# get pod details with events shown at the bottom of output
# events section is useful when debugging pod start issues
kubectl describe pod ${POD_NAME} --namespace=dependency-track

Как только все модули будут запущены, вы сможете получить доступ к Dependency-Track через указанный хост и веб-браузер. 在我из情况下,Поскольку я запускаю его на Minikube,Поэтому мне нужно пройтиminikube tunnel命令将流量隧道传输到暴露изIngressконтроллер。完成Эти步骤后,Я открыл веб-приложение в своем браузере,Войдите в систему, используя учетные данные по умолчанию,и увидел следующую панель:

Dashboard — Dependency-Track

Подвести итог

В этом посте я представляю платформу Dependency-Track, уделяя особое внимание обзору ее возможностей и возможному развертыванию с использованием Docker Compose и Helm Chart в среде Kubernetes. При развертывании этих методов в производственной среде необходимо учитывать дополнительные корректировки. Например, вам может потребоваться получить действительный сертификат HTTPS для Kubernetes Ingress или безопасно управлять конфиденциальной информацией через хранилище секретов в файле или CLI. Однако эти настройки очень специфичны и зависят от вашей среды и выбранного вами метода. Моя главная цель — предоставить вам основные концепции выполнения развертывания.

Подведем итоги следующих преимуществ этой платформы:

преимущество:

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

...а такжеОфициальная документацияМногие другие функции также описаны в。

недостаток:

  • Поддерживается только формат CycloneDX SBOM.
  • Требует определенных работ по развертыванию и настройке.
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода