В этой статье описывается, как использовать 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. Платформа состоит из следующих частей:
Кроме того, платформа использует базу данных для хранения своих данных. По умолчанию используется встроенная база данных H2, но в производственной среде рекомендуется использовать PostgreSQL или Microsoft SQL Server.
SBOM можно загружать через пользовательский интерфейс веб-приложения или общедоступный API. Что касается API, он может автоматически обновлять проекты и загружать SBOM на этапе CI/CD. Ниже представлен проект выявления уязвимостей на основе предоставленного SBOM:
Представление аудита уязвимостей проекта в пользовательском интерфейсе Dependency-Track
также,Dependency-TrackиспользоватьСистема оценки прогнозирования уязвимостей(EPSS),Используется для оценки возможности (вероятности) того, что программное обеспечение лазейки эксплуатируется. EPSS можно использовать для определения приоритетности корректирующих работ.
Источники уязвимостей, используемые в конфигурации Dependency-Track по умолчанию, включают:
База данных уязвимостей регулярно обновляется, по умолчанию каждые 24 часа.
Кроме того, Dependency-Track поддерживает настройку политик безопасности и уведомление о нарушениях на основе информации об уязвимостях и разрешениях. Например, вы можете создать политику, которая разрешает только определенные лицензии, как в следующем примере:
Наконец, Dependency-Track объединяет множество функций и очень ценен с точки зрения реализации процесса управления уязвимостями.
Интеграция отслеживания зависимостей
После понимания основной информации о Dependency-Track рекомендуется протестировать его локально!
на самом деле,Документацию можно предоставитьDocker Composeлегкийразвертывать该платформа。Но учитываяH2Не подходит для производства.,Я настроил композицию,Вместо этого добавьте данные PostgreSQLбазы.,PostgreSQL также рекомендуется для разработки/локальных сред.,Сделайте окружающую среду единообразной.
Я подготовил следующий контент Docker Compose, который можно сохранить в docker-compose.yaml:
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:
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。
Теперь платформу можно запустить, выполнив следующую команду в том же каталоге:
docker compose --env-file .env up
Через несколько минут приложение будет доступно на http://localhost:8080/ Посетил. Имя пользователя и пароль по умолчанию: admin:admin。
Login Panel — Dependency-Track
可以использоватьуправление сообществомиз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. Соответствующие команды следующие:
minikube start --cpus=4
minikube addons enable ingress
Запустите Minikube локально
После подготовки среды K8s,Требуется установкаHelm。HelmдаKubernetesиз包管理器。各个系统из安装过程在Официальная документацияописаны в。
Поскольку у нас установлены все необходимые условия, мы можем начать фактическое развертывание Dependency-Track, выполнив следующую команду:
# 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найден в。
После выполнения команды вы должны увидеть вывод, аналогичный следующему:
NAME: dependency-track
LAST DEPLOYED: Sat Sep 23 13:54:11 2023
NAMESPACE: dependency-track
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Теперь давайте проверим, что ресурс развернут в K8s, выполнив несколько команд:
$ 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
Развертывание может занять несколько минут, поэтому наберитесь терпения. еслисостояниеЛюбые ошибки отображаются в столбце,для отладки,Я рекомендую использовать следующую команду для получения журналов модуля:
# 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. Однако эти настройки очень специфичны и зависят от вашей среды и выбранного вами метода. Моя главная цель — предоставить вам основные концепции выполнения развертывания.
Подведем итоги следующих преимуществ этой платформы:
преимущество:
...а такжеОфициальная документацияМногие другие функции также описаны в。
недостаток: