====== 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