Integrations catalog
The single place to navigate every controller, scanner, and surveyor Draugr ships or plans (new to these terms? see concepts). Each component has a markdown doc kept next to its implementation. What it is, which control it relates to, links, and license/terms.
Every row below links to its doc, which covers what the component does, the control it serves, the tool behind it, and that tool's license and terms of use.
See also: control taxonomy ยท glossary.
Who publishes what. draugr controls ends with a roster grouping every scanner by the project
that publishes its tool, aquasecurity for the Trivy family and kube-bench, projectdiscovery for
Nuclei, and draugr for the ones whose detection logic is our own and which need no external tool
at all. Reading the control table those look alike, and one of them is somebody else's binary
executing on your machine, which is a question worth being able to answer without reading source.
Controllers
| Control | Industry term | Scope | Status | Scanner(s) | Doc |
|---|---|---|---|---|---|
images | Container image scanning | component | โ | trivy (default), grype (opt-in) | doc |
sca | Software Composition Analysis | component | โ | trivy-fs (default), grype-fs (opt-in), retirejs (opt-in), mend-sca (opt-in), govulncheck (opt-in) | doc |
sast | Static Application Security Testing | component | โ | semgrep (default), gosec (opt-in) | doc |
secrets | Secret detection | component | โ | gitleaks | doc |
iac | IaC / misconfiguration | component | โ | trivy-config | doc |
headers | HTTP security headers | component | โ | draugr-headers (native) | doc |
dast | Dynamic Application Security Testing | component | โ | nuclei | doc |
kubernetes | CIS Kubernetes Benchmark / cluster posture | component | โ | draugr-k8s-policies (default), kube-bench and kube-bench-job (opt-in) | doc |
cloud | CIS cloud foundations benchmarks / cloud posture | component | โ | prowler | doc |
tls | TLS/certificate assessment | component | โ | draugr-tls (native) | doc |
licenses | Dependency license compliance, in repositories and images | component | โ | trivy-license (default), mend-licenses (opt-in) | doc |
threats | Threat intelligence | component | โ | urlhaus (default), virustotal (opt-in) | doc |
provenance | Artifact provenance / image signature verification | component | โ | cosign (default), notation (default) | doc |
provenance runs one of its two scanners per image, chosen by the trust model the signer it
matched belongs to: cosign for a Sigstore keyless signature, notation for a Notary Project one.
Both are defaults because either may be needed in a project, and a descriptor can still switch one
off. An image no signer covers goes to cosign, which is the only one that can read back a signer
nobody named.
licenses is a control rather than part of sca because license risk isn't a vulnerability. The
exposure is legal, the policy is owned by different people, and
config.gate can then hold it to its own threshold.
SBOM generation is not in this table on purpose. Every control above checks something and
returns a verdict that feeds the gate. An SBOM is an inventory. It finds nothing, so it has no
verdict to give, and a row here would always read "pass" without ever having looked. It is
configured separately as config.sbom and travels as evidence. See the Saga
reference.
Scanners
| Scanner | Control | Tool | License | Status | Doc |
|---|---|---|---|---|---|
trivy | images | Aqua Trivy | Apache-2.0 | โ | doc |
trivy-fs | sca | Aqua Trivy (fs) | Apache-2.0 | โ | doc |
grype | images | Anchore Grype | Apache-2.0 | โ | doc |
grype-fs | sca | Anchore Grype (dir) | Apache-2.0 | โ | doc |
retirejs | sca | retire.js (binary: retire, from npm) | Apache-2.0 | โ | doc |
govulncheck | sca | Go team govulncheck (reachability for Go) | BSD-3-Clause (data CC-BY-4.0) | โ | doc |
gitleaks | secrets | Gitleaks | MIT | โ | doc |
semgrep | sast | Semgrep | LGPL-2.1 | โ | doc |
gosec | sast | gosec (Go) | Apache-2.0 | โ | doc |
mend-sca | sca | Mend CLI (Unified Agent) | proprietary | โ | doc |
mend-licenses | licenses | Mend CLI (Unified Agent) | proprietary | โ | doc |
trivy-config | iac | Aqua Trivy (config) | Apache-2.0 | โ | doc |
trivy-license | licenses | Aqua Trivy (license) | Apache-2.0 | โ | doc |
kube-bench | kubernetes | Aqua kube-bench | Apache-2.0 | โ | doc |
kube-bench-job | kubernetes | Aqua kube-bench (in-cluster Job) | Apache-2.0 | โ | doc |
draugr-k8s-policies | kubernetes | native (no tool) | Apache-2.0 | โ | doc |
sarif-import | named in components[].imports | native (reads a SARIF file another tool wrote) | Apache-2.0 | โ | doc |
prowler | cloud | Prowler | Apache-2.0 | โ | doc |
draugr-headers | headers | native (no tool) | Apache-2.0 | โ | doc |
nuclei | dast | ProjectDiscovery Nuclei | MIT | โ | doc |
draugr-tls | tls | native (no tool) | Apache-2.0 | โ | doc |
urlhaus | threats | abuse.ch URLhaus (hosted API, free key) | data: abuse.ch terms | โ | doc |
virustotal | threats | VirusTotal (hosted API, free key) | data: VirusTotal/Google terms | โ | doc |
cosign | provenance | Sigstore cosign | Apache-2.0 | โ | doc |
notation | provenance | Notary Project notation | Apache-2.0 | โ | doc |
Surveyors
| Surveyor | Discovers | Auth | Status | Doc |
|---|---|---|---|---|
k8s-images | container images (with running digests) in a k8s cluster | kubeconfig | โ | doc |
k8s-cluster | the cluster itself, as a component's kubernetes: entry | kubeconfig | โ | doc |
github-org-repos | repositories in a GitHub org | GITHUB_TOKEN | โ | doc |
gitlab-group-projects | projects in a GitLab group, subgroups included | GITLAB_TOKEN | โ | doc |
azure-devops-repos | Git repositories in an Azure DevOps organization or project | AZURE_DEVOPS_EXT_PAT | โ | doc |
provenance-signers | who signs the images the descriptor already declares | none | โ | doc |
Reporters
Scan results render in any of these formats, selected with draugr scan --format:
| Format | Purpose |
|---|---|
console | The terminal report, for a run somebody is watching. |
evidence | The console report plus what makes it defensible: tools, revisions, and what each control measured against. |
markdown | The report as prose and tables, for a merge request comment or a wiki. |
html | A self-contained page, for attaching to a ticket or an audit. |
junit | One failed test per finding, and one test in error per control with a scan error, for a CI test panel. |
json | The whole run as one document, for a platform or a script. |
sarif | SARIF 2.1.0, which code scanning and editors read. |
vex | An OpenVEX document saying which vulnerabilities apply to this product. |
gitlab-sast | GitLab's own security schema, for its Vulnerability Report. A build artifact rather than an upload. |
gitlab-dependency-scanning | The same, for vulnerable dependencies. |
gitlab-secret-detection | The same, for leaked credentials. |
gitlab-container-scanning | The same, for vulnerable packages in a container image. |
gitlab-codequality | GitLab Code Quality: every finding, in the merge request, on any tier. |
gitlab-cyclonedx | The SBOM as GitLab reads it, filling the Dependency List and License Compliance. |
template | Your own layout, from --template or --template-file. |
-o/--output <dir> also writes report.json + results.sarif.
Publishers
A Publisher delivers rendered reports to a destination, the "where" of reporting, separate from
the Reporter (the "what"). Configure them in the Saga's config.publishers; every
rendered report is delivered to every publisher.
| Kind | Delivers to | Config |
|---|---|---|
file | a local directory (one file per report format) | dir |
github | GitHub code scanning (uploads the sarif report; dismisses the alerts of accepted findings) | repo, commit, ref (default from the GitHub Actions env); token from $GITHUB_TOKEN (or tokenEnv) |
github-pr-comment | a sticky pull-request comment (posts the markdown report) | repo, pr (default from the env); token from $GITHUB_TOKEN (or tokenEnv) |
azure-pr-comment | a sticky Azure DevOps pull-request comment (posts the markdown report) | org, project, repo, pr (default from the Azure Pipelines env); token from $SYSTEM_ACCESSTOKEN (or tokenEnv) |
gitlab-mr-comment | a sticky GitLab merge-request comment (posts the markdown report) | repo, pr (default from the GitLab CI env); token from $GITLAB_TOKEN (or tokenEnv) |
github-issue | a GitHub issue that is open while the gate fails, closed when it passes | repo (default from the env), select, split, minPriority, label, labelBy, branches, item; token from $GITHUB_TOKEN (or tokenEnv) |
gitlab-issue | a GitLab issue that is open while the gate fails, closed when it passes | repo (default from the GitLab CI env), select, split, minPriority, label, labelBy, branches, item; token from $GITLAB_TOKEN (or tokenEnv) |
azure-work-item | an Azure Boards work item that is open while the gate fails, closed when it passes | org, project (default from the Azure Pipelines env), select, split, minPriority, label, labelBy, branches, item; token from $SYSTEM_ACCESSTOKEN (or tokenEnv) |
draugr-api | any server implementing Draugr's run-ingest API (posts the json report, uploads the sarif one) | $DRAUGR_API_URL, or a url on its origin; token from $DRAUGR_API_TOKEN (or tokenEnv) |
No publisher stores a secret in the Saga. Every token comes from an environment variable, and each
no-ops outside its own context (not in CI, or no PR) so the same Saga still runs locally. Every
comment publisher upserts one sticky comment (updated in place on each push rather than posting
a new one) and pairs with draugr diff --publish for a PR
security delta. Code scanning is free for public repos; private repos need GitHub Advanced Security.
See examples/scanner-options.saga.yaml for every
option each scanner above takes,
examples/publishing.saga.yaml for a multi-format,
multi-publisher Saga, examples/github-actions-code-scanning.yml
and examples/gitlab-ci.yml
for the matching workflow. Draugr dogfoods this itself in
.draugr/self.saga.yaml + the self-scan workflow.
Publishers that need managed credentials or an authenticated integration (ServiceNow, Jira, Splunk, signed webhooks) are out of scope here: each needs secret handling and a service to hold it, which is not what a CLI that runs in your pipeline should be doing.
Utilities
Not scanners, but tools Draugr provisions/uses:
| Tool | Purpose | Install |
|---|---|---|
cosign | verify release/tool signatures (Sigstore) | draugr tools install cosign |
git | check out repositories for repo-scanning controls | system |
kubectl | required by the kube-bench scanner, whose policies checks shell out to it | system |
syft | generate SBOMs when a Saga sets config.sbom | draugr tools install syft |
New to a category? Learn explains what each control is for and when it matters, independent of Draugr's implementation of it.