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.

  • Первая секция отвечает за все проекты. В этой секции можно посмотреть каждый проект: компоненты и уязвимости этого проекта.
  • Вторая секции отвечает за просмотр всех компонентов.
  • Третья секция отвечает за просмотр всех уязвимостей
  • Четвертая секция отвечает за административные настройки: создание пользователей, создание api ключей, интеграция с другими сервисами.

Для того чтобы использовать этот инструмент в 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/PlatformPackage formatTransitive dependencies
node.jsnpm-shrinkwrap.json, package-lock.json, pnpm-lock.yaml, yarn.lock, rush.js, bower.json, .min.jsYes except .min.js
javamaven (pom.xml [1]), gradle (build.gradle, .kts), scala (sbt), bazelYes unless pom.xml is manually parsed due to unavailability of maven or errors
phpcomposer.lockYes
pythonsetup.py, requirements.txt [2], Pipfile.lock, poetry.lock, bdist_wheel, .whl, .egg-infoOnly with Pipfile.lock and poetry.lock
gobinary, go.mod, go.sum, Gopkg.lockYes except binary
rubyGemfile.lock, gemspecOnly for Gemfile.lock
rustbinary, Cargo.toml, Cargo.lockOnly for Cargo.lock
.Net.csproj, packages.config, project.assets.json [3], packages.lock.json, .nupkgOnly for project.assets.json, packages.lock.json
dartpubspec.lock, pubspec.yamlOnly for pubspec.lock
haskellcabal.project.freezeYes
elixirmix.lockYes
c/c++conan.lock, conanfile.txtYes only for conan.lock
clojureClojure CLI (deps.edn), Leiningen (project.clj)Yes unless the files are parsed manually due to lack of clojure cli or leiningen command
swiftPackage.resolved, Package.swift (swiftpm)Yes
docker / oci imageAll supported languages. Linux OS packages with plugins [4]Best effort based on lock files
GitHub Actions.github/workflows/*.ymlN/A
LinuxAll supported languages. Linux OS packages with plugins [5]Best effort based on lock files
WindowsAll supported languages. OS packages with best effort [5]Best effort based on lock files
Jenkins Plugins.hpi files
Helm Charts.yamlN/A
Skaffold.yamlN/A
kustomization.yamlN/A
Tekton tasks.yamlN/A
Kubernetes.yamlN/A
Maven Cache$HOME/.m2/repository//*.jar|N/A| |SBT Cache|$HOME/.ivy2/cache//*.jarN/A
Gradle Cache$HOME/caches/modules-2/files-2.1//*.jar|N/A| |Helm Index|$HOME/.cache/helm/repository//*.yamlN/A
Docker composedocker-compose*.yml. Images would also be scanned.N/A
Google CloudBuild configurationcloudbuild.yamlN/A
OpenAPIopenapi*.json, openapi*.yamlN/A
Privadoprivado.jsonData 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