-
Notifications
You must be signed in to change notification settings - Fork 1
Add portfolio management docs #66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -82,6 +82,7 @@ VEX | |
| Vanlightly's? | ||
| VulnDB | ||
| Webex | ||
| [Aa]ggregate | ||
| [Aa]llowlists? | ||
| [Aa]utodetect | ||
| [Bb]ackoff | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+16.4 KB
...uides/administration/configuring-project-retention/destructive-confirmation.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+42.9 KB
.../images/guides/administration/configuring-project-retention/maintenance-age.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+43.8 KB
...es/guides/administration/configuring-project-retention/maintenance-versions.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+77.7 KB
docs/assets/images/guides/user/managing-project-versions/active-toggle.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+24 KB
docs/assets/images/guides/user/managing-project-versions/add-version-modal.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+68.7 KB
...ssets/images/guides/user/managing-project-versions/inactive-projects-listed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+22.9 KB
docs/assets/images/guides/user/managing-project-versions/version-dropdown.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+42.8 KB
docs/assets/images/guides/user/organizing-projects/collection-with-tag.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+35.1 KB
docs/assets/images/guides/user/organizing-projects/create-collection-project.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,170 @@ | ||
| # About projects | ||
|
|
||
| A **project** is the unit of tracking in Dependency-Track. Everything else, from components | ||
| to findings to policy violations to metrics, hangs off projects. The **portfolio** is the | ||
| set of all projects in an instance, and how you model it shapes what reports, alerts, and | ||
| aggregations are useful later. | ||
|
|
||
| This page explains what a project is, how projects relate to each other, and the deliberate | ||
| limits of the model. | ||
|
|
||
| ## What a project is | ||
|
|
||
| Each project has: | ||
|
|
||
| - A name and an optional version that together identify it. | ||
| - A classifier naming the kind of thing the project represents (an app, a library, a | ||
| container image, a firmware image, and so on, matching CycloneDX). See the | ||
| [classifier list](../reference/projects.md#classifiers). | ||
| - Optional ecosystem identifiers: a Package URL, a CPE, or a SWID tag. | ||
| - Descriptive metadata such as a group, a description, authors, a supplier, a manufacturer, | ||
| and external references. | ||
| - Tags (categorical labels) and project properties (typed key-value metadata). | ||
| - An optional parent, forming a hierarchy. | ||
| - An access list controlling which teams can see it. | ||
| - Lifecycle state: an active flag, the timestamp of the last BOM import, the timestamp of | ||
| the last vulnerability analysis, and the current risk score. | ||
|
|
||
|  | ||
|
|
||
| ## What Dependency-Track does *not* assume | ||
|
|
||
| A few modeling decisions are deliberately left to you. Knowing them up front avoids | ||
| arguments later: | ||
|
|
||
| - **Dependency-Track does not prescribe what a project is.** A project can map to a single | ||
| library, a deployable service, an environment of a service, or an entire product line. | ||
| Pick the granularity that matches how you triage and report. | ||
| - **Versions are opaque strings.** Dependency-Track does not parse, compare, or sort them. | ||
| Semver-like ordering is not assumed. The "latest version" pointer is a manually maintained | ||
| flag (see [Versions](#versions)), not a computed one. | ||
| - **Projects cannot depend on projects.** Component-level dependencies live inside a BOM. The | ||
| only relationship Dependency-Track tracks between projects is the parent-child hierarchy | ||
| below, and that hierarchy is organizational, not a dependency graph. If service A consumes | ||
| service B, that fact is not expressible as a project relation. | ||
| - **A name and version together identify a project globally.** That pair is unique across | ||
| the entire instance, independent of where the project sits in the hierarchy. The same | ||
| name and version cannot exist under two different parents. | ||
|
|
||
| ## Active and inactive projects | ||
|
|
||
| A project is **active** by default. Marking it inactive records the time and changes its | ||
| behavior: | ||
|
|
||
| - It disappears from active portfolio views unless the viewer opts in to show inactive | ||
| projects. | ||
| - It cannot serve as a parent. | ||
| - It becomes eligible for retention-driven deletion (see [Retention](#retention)). Active | ||
| projects never are. | ||
|
|
||
| A project with active children cannot become inactive. Mark the children first, or accept | ||
| that the parent stays around for as long as something underneath stays live. | ||
|
|
||
| ## Hierarchies | ||
|
|
||
| A project can have one parent and any number of children. Hierarchies are organizational: | ||
| they let you group by product, environment, team, or any other axis that fits how you work. | ||
|
|
||
| Two things flow through the hierarchy: | ||
|
|
||
| - **Access control.** A team that can see a parent can also see the parent's descendants. | ||
| See [Access control](#access-control). | ||
| - **Aggregated metrics on collection projects.** A [collection project](#collection-projects) reads | ||
| metrics from its children to produce its own. Regular parents do not. The risk score on a | ||
| regular parent reflects only that parent's own components, not its children. | ||
|
|
||
| Constraints worth remembering: | ||
|
|
||
| - A project cannot be its own ancestor. Dependency-Track rejects cycles. | ||
| - The hierarchy does not affect identity. A name and version pair remains globally unique, | ||
| so the same combination cannot appear under two different parents. | ||
|
|
||
| (Inactive projects cannot serve as a parent either. See [Active and inactive projects](#active-and-inactive-projects).) | ||
|
|
||
|  | ||
|
|
||
| ## Collection projects | ||
|
|
||
| A **collection project** is a parent whose only role is to combine metrics from its | ||
| children. It holds no components or services of its own. Instead, it surfaces the metrics | ||
| of its children using one of three modes: | ||
|
|
||
| | Mode | Behavior | | ||
| |:---------------------------|:--------------------------------------------------------------------| | ||
| | Roll up every direct child | Combines metrics from every direct child. | | ||
| | Roll up by tag | Combines metrics from direct children carrying a chosen tag. | | ||
| | Roll up the latest version | Combines metrics from direct children marked as the latest version. | | ||
|
|
||
| Collection projects are useful for product or portfolio aggregations that span versions, | ||
| services, or environments without forcing every child to share a tag scheme. They differ | ||
| from regular parents in three important ways: | ||
|
|
||
| - They have no classifier. The classifier field disappears once a project becomes a | ||
| collection project. | ||
| - They cannot have components, services, or a dependency graph. The detail page hides those | ||
| tabs and shows a *Collection Projects* tab listing children instead. | ||
| - They do not accept BOM uploads. | ||
|
|
||
| For when to reach for which mode and how to set them up, see | ||
| [Organizing projects into hierarchies](../guides/user/organizing-projects.md). | ||
|
|
||
|  | ||
|
|
||
| ## Versions | ||
|
|
||
| Two or more projects can share a name. Together they represent the version history of one | ||
| logical thing. A *latest version* flag marks one of them as current. At most one version | ||
| per name carries the flag. | ||
|
|
||
| The latest-version flag drives: | ||
|
|
||
| - The latest-version collection mode. | ||
| - The badge URLs that resolve a project by name without specifying a version. | ||
| - The *LATEST VERSION* badge in the project header. | ||
|
|
||
| Because Dependency-Track does not parse version strings, nothing here is automatic. You | ||
| set the flag manually when promoting a release. Cloning a project produces a new sibling | ||
| with chosen inclusions (components, services, tags, properties, audit history, access list, | ||
| policy violations) and is the typical path for starting a new version. See | ||
| [Managing project versions](../guides/user/managing-project-versions.md). | ||
|
|
||
| ## Tags and properties | ||
|
|
||
| A project carries two kinds of metadata. A **tag** is a categorical label that many | ||
| projects can share. Policies, alerts, the tag-filtered collection mode, and the project | ||
| list filter all read tags. For the wider model see [About tags](tags.md). A **project | ||
| property** is a typed key-value pair (group, name, value, type, optional description) | ||
| scoped to one project. The policy engine, alerting, and collection logic do not consult | ||
| properties. Use a tag for a label that may apply to many projects, and a property for | ||
| per-project structured data you want to read back later. | ||
|
|
||
| ## Retention | ||
|
|
||
| By default, inactive projects stick around indefinitely. When the operator turns on | ||
| retention, a scheduled maintenance task deletes inactive projects according to one of two | ||
| policies: | ||
|
|
||
| - **By age**: delete inactive projects older than a configured cutoff. | ||
| - **By version count**: keep the most recent N inactive versions per name, and delete the | ||
| rest. | ||
|
|
||
| Active projects are never touched. See | ||
| [Configuring project retention](../guides/administration/configuring-project-retention.md). | ||
|
|
||
| ## Access control | ||
|
|
||
| Each project has an access list. A team can see a project when: | ||
|
|
||
| - The team appears on that project's access list, **or** on the access list of the | ||
| project's ancestors. Granting a team access to a parent also grants access to every | ||
| descendant. | ||
| - The team holds the `PORTFOLIO_ACCESS_CONTROL_BYPASS` permission, which overrides the | ||
| access list entirely. | ||
|
|
||
| Use this when designing a hierarchy: shared access concerns sit at parents, and the | ||
| children inherit them automatically. To revoke inherited access, remove the team from | ||
| the ancestor that granted it. A descendant cannot opt out on its own. | ||
|
|
||
| For the wider model (users, teams, and which permissions gate which actions), see | ||
| [About access control](access-control.md) and the | ||
| [Permissions reference](../reference/permissions.md). | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| # About tags | ||
|
|
||
| A **tag** is a short, shared label. You can attach the same tag to | ||
| [projects](projects.md), [component](component-policies.md) and | ||
| [vulnerability](vulnerability-policies.md) policies, vulnerabilities, and | ||
| [alerts](notifications.md), and the rest of the system reads tags to scope behavior. | ||
| Tags are deliberately lightweight: a name and nothing else. | ||
|
nscuro marked this conversation as resolved.
|
||
|
|
||
| ## What a tag is | ||
|
|
||
| A tag is a name. Names are unique across the instance, so two attachments of the | ||
| same name refer to the same tag. A tag has no value, no type, no namespace, no | ||
| description. If you need richer metadata bound to a project, use | ||
| [project properties](projects.md#tags-and-properties) instead. | ||
|
|
||
| Tags are many-to-many with the things they label. A project can carry many tags, and a | ||
| tag can label many projects. Removing a tag from one project does not affect any other. | ||
|
|
||
| ## What tags do | ||
|
|
||
| Tags are a scoping primitive. Different parts of the system look at the same tag set: | ||
|
|
||
| - **Project filtering.** The project list can filter by tag. | ||
| - **Policy assignment.** A component or vulnerability policy can target only projects | ||
| carrying specific tags. See [About component policies](component-policies.md) and | ||
| [About vulnerability policies](vulnerability-policies.md). | ||
| - **Collection projects.** The tag-based collection mode aggregates only the children | ||
| carrying the configured tag. See | ||
| [About projects › Collection projects](projects.md#collection-projects). | ||
| - **Alerts.** An [alert](notifications.md) can fire only for projects carrying specific tags. | ||
| - **Vulnerability tagging.** You can attach tags to vulnerabilities for triage and | ||
| reporting. | ||
|
|
||
| ## Tags versus project properties | ||
|
|
||
| Both attach metadata to a project, but they answer different questions: | ||
|
|
||
| - Reach for a **tag** when the value is a label that may apply to many projects, and you | ||
| expect the policy engine, alerting, or the tag-filtered collection mode to read it. | ||
| - Reach for a **project property** when the value is per-project structured data (a | ||
| typed key with a value) that you want to read back later, but no built-in feature | ||
| consumes it. | ||
|
|
||
| Properties carry types and group names, while tags do not. If you find yourself encoding two | ||
| pieces of information into one tag (`team:platform`, `env=prod`), that is a signal to | ||
| reach for a property, or for two separate tags, instead. | ||
|
|
||
| ## Lifecycle | ||
|
|
||
| Tags come into being implicitly on first use. Attaching a name that does not exist | ||
| creates the tag. Detaching the last attachment leaves an orphan tag, which the | ||
| maintenance task cleans up on its next run. Tags carry no per-tag access control. Any | ||
| user who can edit a project can also tag it. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.