====== Dependency-track ======
Dependency-Track - это интеллектуальная платформа для [[https://owasp.org/www-community/Component_Analysis|анализа компонентов]], которая позволяет организациям выявлять и снижать риски в цепочке поставок программного обеспечения. Dependency-Track использует уникальный и очень выгодный подход, используя возможности [[https://owasp.org/www-community/Component_Analysis#software-bill-of-materials-sbom|спецификации программного обеспечения]] (SBOM). Этот подход предоставляет возможности, недоступные традиционным решениям для анализа состава программного обеспечения (SCA).
Dependency-Track отслеживает использование компонентов во всех версиях каждого приложения в ит-портфолио, чтобы упреждающее выявлять риски при использовании данного приложения. Платформа разработана на основе API и идеально подходит для использования в средах CI/CD.
С подробной документацией о данном продукте можно ознакомиться на ресурсах: [[https://github.com/DependencyTrack/dependency-track|официальный github разработчика]], а также [[https://dependencytrack.org/|сайт разработчика]].
===== Установка =====
Dependency-track можно установить разными путями, каждый путь подразумевает под собой отдельный тип инфраструктуры. Так как в нашем проекте используется в качестве инфраструктуры для развертывания "Dependency-track" [[https://kubernetes.io/|Kubernetes]], то для быстрой установки этого приложения мы будем использовать [[https://helm.sh/|helm chart]]. Если Вы хотите установить Dependency-track под свой тип инфраструктуры, то подробную документацию можно найти на [[https://github.com/DependencyTrack/dependency-track|официальном github разработчика]].
Для установки Dependency-track с помощью [[https://helm.sh/|Helm3]] в Kubernetes вам нужно:
* Установить Helm
* Скачать helm chart dependency-track на сервер, где есть Helm (он лежит в [[https://git.miem.hse.ru/1105/dependency-track/-/tree/master/dependency-track|главной директории проекта]])
* Перейти в директорию, где лежит чарт и выполнить следующую команду:
helm install dependency-track dependency-track --namespace dependency-track --create-namespace
helm install pgo postgres-operator --namespace pgo --create-namespace
kubectl apply -f deptrack-db.yaml
===== Основы использования Dependency-Track =====
На первой картинке можно увидеть общий интерфейс dependency-track.
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/devops/overall_image.png?nolink&}}
* Первая секция отвечает за все проекты. В этой секции можно посмотреть каждый проект: компоненты и уязвимости этого проекта.
* Вторая секции отвечает за просмотр всех компонентов.
* Третья секция отвечает за просмотр всех уязвимостей
* Четвертая секция отвечает за административные настройки: создание пользователей, создание api ключей, интеграция с другими сервисами.
===== Использование =====
==== Встраивание в CI/CD ====
Для того чтобы использовать этот инструмент в CI/CD, нужно указать переменные ci/cd:
* REPO_URL <-- переменная для сканирования, удаленных репозиториев. Она нужна если вы хотите просканировать проект, который находится в удаленном репозитории
* PROJECT_PATH <-- указывает директорию, где будет находится проект в вашем репозитории. Например если ваш код не лежит в главной директории репозитория, то нужно явным образом указать путь к этой директории.
* DP_API_URL <--- указывает на url api сервера dependency-track. Чтобы получить api key воспользуйтесь инструкцией приведенной ниже:
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/devops/config_api_key.png?nolink&}}
* DP_API_KEY <--- указывает на api key сервера, он нужен для автоматизации сканирования и выгрузки SBOM файла в dependency-track. !!! ЭТУ ПЕРЕМЕННУЮ ЛУЧШЕ СДЕЛАТЬ ЗАМАСКИРОВАННОЙ !!!
Также есть опциональные переменные:
* productName <-- имя проекта в dependency-track, по дефолту название соответствует имени репозитория
* DpVersion <-- версия проекта в dependency-track, по дефолту равняется 1
* bomFormat <-- формат bom файла, по дефолту равняется xml
Пример встраивания dependency-track в ваш CI/CD:
DEPTRACK:
stage: deptrack
variables:
PROJECT_PATH: "."
REPO_URL: ""
DP_API_URL: http://188.120.244.199:8888
productName: "$CI_PROJECT_NAME"
trigger:
include:
- project: '1105/sast/dependency-track'
ref: 'master'
file: '.gitlab-ci.yml'''
==== Рекомендации по архитектуре проекта для корректного сканирования ====
Чтобы Ваш проект корректно просканировался, нужно чтобы в вашем проекте были requirements файлы. Примеры таких файлов приведены ниже:
=== Supported languages and package format ===
^Language/Platform^Package format^Transitive dependencies|
|node.js|npm-shrinkwrap.json, package-lock.json, pnpm-lock.yaml, yarn.lock, rush.js, bower.json, .min.js|Yes except .min.js|
|java|maven (pom.xml [1]), gradle (build.gradle, .kts), scala (sbt), bazel|Yes unless pom.xml is manually parsed due to unavailability of maven or errors|
|php|composer.lock|Yes|
|python|setup.py, requirements.txt [2], Pipfile.lock, poetry.lock, bdist_wheel, .whl, .egg-info|Only with Pipfile.lock and poetry.lock|
|go|binary, go.mod, go.sum, Gopkg.lock|Yes except binary|
|ruby|Gemfile.lock, gemspec|Only for Gemfile.lock|
|rust|binary, Cargo.toml, Cargo.lock|Only for Cargo.lock|
|.Net|.csproj, packages.config, project.assets.json [3], packages.lock.json, .nupkg|Only for project.assets.json, packages.lock.json|
|dart|pubspec.lock, pubspec.yaml|Only for pubspec.lock|
|haskell|cabal.project.freeze|Yes|
|elixir|mix.lock|Yes|
|c/c++|conan.lock, conanfile.txt|Yes only for conan.lock|
|clojure|Clojure CLI (deps.edn), Leiningen (project.clj)|Yes unless the files are parsed manually due to lack of clojure cli or leiningen command|
|swift|Package.resolved, Package.swift (swiftpm)|Yes|
|docker / oci image|All supported languages. Linux OS packages with plugins [4]|Best effort based on lock files|
|GitHub Actions|.github/workflows/*.yml|N/A|
|Linux|All supported languages. Linux OS packages with plugins [5]|Best effort based on lock files|
|Windows|All supported languages. OS packages with best effort [5]|Best effort based on lock files|
|Jenkins Plugins|.hpi files| |
|Helm Charts|.yaml|N/A|
|Skaffold|.yaml|N/A|
|kustomization|.yaml|N/A|
|Tekton tasks|.yaml|N/A|
|Kubernetes|.yaml|N/A|
|Maven Cache|$HOME/.m2/repository/**/*.jar|N/A|
|SBT Cache|$HOME/.ivy2/cache/**/*.jar|N/A|
|Gradle Cache|$HOME/caches/modules-2/files-2.1/**/*.jar|N/A|
|Helm Index|$HOME/.cache/helm/repository/**/*.yaml|N/A|
|Docker compose|docker-compose*.yml. Images would also be scanned.|N/A|
|Google CloudBuild configuration|cloudbuild.yaml|N/A|
|OpenAPI|openapi*.json, openapi*.yaml|N/A|
|[[https://www.privado.ai?utm_source=cyclonedx|Privado]]|privado.json|Data and service information will be included. Use with universal mode.|
Утилита с которая сканирует проекты называется [[https://github.com/CycloneDX/cdxgen|cdxgen]]
===== Создание пользователей и приватность проектов =====
==== Создание пользователей ====
Для создания пользователей нужно войти в аккаунт юзера с правами системного администратора. Создание пользователей и выдача прав показана на рисунках ниже:
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/devops/create_user1.png?nolink&}}
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/devops/create_user2.png?nolink&}}
Данный список прав необходим и достаточен, чтобы автоматически создавать проекты пользователю
==== Приватность проекта ====
Чтобы включить приватность проекта воспользуйтесь инструкцией ниже:
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/devops/portfolio1.png?nolink&}}
Если Вы хотите добавить уже существующему пользователю проекты других пользователей, воспользуйтесь инструкцией ниже:
{{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/devops/portfolio2.png?nolink&}}
==== Потребление ресурсов ====
resources:
frontend:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 1
memory: 512Mi
backend:
requests:
cpu: 2
memory: 4608Mi
limits:
cpu: 4
memory: 8Gi
database: 10 Gi