Dependency-track
Dependency-Track - это интеллектуальная платформа для анализа компонентов, которая позволяет организациям выявлять и снижать риски в цепочке поставок программного обеспечения. Dependency-Track использует уникальный и очень выгодный подход, используя возможности спецификации программного обеспечения (SBOM). Этот подход предоставляет возможности, недоступные традиционным решениям для анализа состава программного обеспечения (SCA).
Dependency-Track отслеживает использование компонентов во всех версиях каждого приложения в ит-портфолио, чтобы упреждающее выявлять риски при использовании данного приложения. Платформа разработана на основе API и идеально подходит для использования в средах CI/CD.
С подробной документацией о данном продукте можно ознакомиться на ресурсах: официальный github разработчика, а также сайт разработчика.
Установка
Dependency-track можно установить разными путями, каждый путь подразумевает под собой отдельный тип инфраструктуры. Так как в нашем проекте используется в качестве инфраструктуры для развертывания «Dependency-track» Kubernetes, то для быстрой установки этого приложения мы будем использовать helm chart. Если Вы хотите установить Dependency-track под свой тип инфраструктуры, то подробную документацию можно найти на официальном github разработчика.
Для установки Dependency-track с помощью Helm3 в Kubernetes вам нужно:
- Установить Helm
- Скачать helm chart dependency-track на сервер, где есть Helm (он лежит в главной директории проекта)
- Перейти в директорию, где лежит чарт и выполнить следующую команду:
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.
- Первая секция отвечает за все проекты. В этой секции можно посмотреть каждый проект: компоненты и уязвимости этого проекта.
- Вторая секции отвечает за просмотр всех компонентов.
- Третья секция отвечает за просмотр всех уязвимостей
- Четвертая секция отвечает за административные настройки: создание пользователей, создание api ключей, интеграция с другими сервисами.
Использование
Встраивание в CI/CD
Для того чтобы использовать этот инструмент в CI/CD, нужно указать переменные ci/cd:
- REPO_URL ←- переменная для сканирования, удаленных репозиториев. Она нужна если вы хотите просканировать проект, который находится в удаленном репозитории
- PROJECT_PATH ←- указывает директорию, где будет находится проект в вашем репозитории. Например если ваш код не лежит в главной директории репозитория, то нужно явным образом указать путь к этой директории.
- DP_API_URL ←– указывает на url api сервера dependency-track. Чтобы получить api key воспользуйтесь инструкцией приведенной ниже:
- 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 |
Privado | privado.json | Data and service information will be included. Use with universal mode. |
Утилита с которая сканирует проекты называется cdxgen
Создание пользователей и приватность проектов
Создание пользователей
Для создания пользователей нужно войти в аккаунт юзера с правами системного администратора. Создание пользователей и выдача прав показана на рисунках ниже:
Данный список прав необходим и достаточен, чтобы автоматически создавать проекты пользователю
Приватность проекта
Чтобы включить приватность проекта воспользуйтесь инструкцией ниже:
Если Вы хотите добавить уже существующему пользователю проекты других пользователей, воспользуйтесь инструкцией ниже:
Потребление ресурсов
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