๐Ÿ“Ž Unreleased docs. This is the next version (from main), features here may change or not be in a release yet.See the latest release โ†’

Reference

Integrations catalog

On this page

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

ControlIndustry termScopeStatusScanner(s)Doc
imagesContainer image scanningcomponentโœ…trivy (default), grype (opt-in)doc
scaSoftware Composition Analysiscomponentโœ…trivy-fs (default), grype-fs (opt-in), retirejs (opt-in), mend-sca (opt-in), govulncheck (opt-in)doc
sastStatic Application Security Testingcomponentโœ…semgrep (default), gosec (opt-in)doc
secretsSecret detectioncomponentโœ…gitleaksdoc
iacIaC / misconfigurationcomponentโœ…trivy-configdoc
headersHTTP security headerscomponentโœ…draugr-headers (native)doc
dastDynamic Application Security Testingcomponentโœ…nucleidoc
kubernetesCIS Kubernetes Benchmark / cluster posturecomponentโœ…draugr-k8s-policies (default), kube-bench and kube-bench-job (opt-in)doc
cloudCIS cloud foundations benchmarks / cloud posturecomponentโœ…prowlerdoc
tlsTLS/certificate assessmentcomponentโœ…draugr-tls (native)doc
licensesDependency license compliance, in repositories and imagescomponentโœ…trivy-license (default), mend-licenses (opt-in)doc
threatsThreat intelligencecomponentโœ…urlhaus (default), virustotal (opt-in)doc
provenanceArtifact provenance / image signature verificationcomponentโœ…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

ScannerControlToolLicenseStatusDoc
trivyimagesAqua TrivyApache-2.0โœ…doc
trivy-fsscaAqua Trivy (fs)Apache-2.0โœ…doc
grypeimagesAnchore GrypeApache-2.0โœ…doc
grype-fsscaAnchore Grype (dir)Apache-2.0โœ…doc
retirejsscaretire.js (binary: retire, from npm)Apache-2.0โœ…doc
govulncheckscaGo team govulncheck (reachability for Go)BSD-3-Clause (data CC-BY-4.0)โœ…doc
gitleakssecretsGitleaksMITโœ…doc
semgrepsastSemgrepLGPL-2.1โœ…doc
gosecsastgosec (Go)Apache-2.0โœ…doc
mend-scascaMend CLI (Unified Agent)proprietaryโœ…doc
mend-licenseslicensesMend CLI (Unified Agent)proprietaryโœ…doc
trivy-configiacAqua Trivy (config)Apache-2.0โœ…doc
trivy-licenselicensesAqua Trivy (license)Apache-2.0โœ…doc
kube-benchkubernetesAqua kube-benchApache-2.0โœ…doc
kube-bench-jobkubernetesAqua kube-bench (in-cluster Job)Apache-2.0โœ…doc
draugr-k8s-policieskubernetesnative (no tool)Apache-2.0โœ…doc
sarif-importnamed in components[].importsnative (reads a SARIF file another tool wrote)Apache-2.0โœ…doc
prowlercloudProwlerApache-2.0โœ…doc
draugr-headersheadersnative (no tool)Apache-2.0โœ…doc
nucleidastProjectDiscovery NucleiMITโœ…doc
draugr-tlstlsnative (no tool)Apache-2.0โœ…doc
urlhausthreatsabuse.ch URLhaus (hosted API, free key)data: abuse.ch termsโœ…doc
virustotalthreatsVirusTotal (hosted API, free key)data: VirusTotal/Google termsโœ…doc
cosignprovenanceSigstore cosignApache-2.0โœ…doc
notationprovenanceNotary Project notationApache-2.0โœ…doc

Surveyors

SurveyorDiscoversAuthStatusDoc
k8s-imagescontainer images (with running digests) in a k8s clusterkubeconfigโœ…doc
k8s-clusterthe cluster itself, as a component's kubernetes: entrykubeconfigโœ…doc
github-org-reposrepositories in a GitHub orgGITHUB_TOKENโœ…doc
gitlab-group-projectsprojects in a GitLab group, subgroups includedGITLAB_TOKENโœ…doc
azure-devops-reposGit repositories in an Azure DevOps organization or projectAZURE_DEVOPS_EXT_PATโœ…doc
provenance-signerswho signs the images the descriptor already declaresnoneโœ…doc

Reporters

Scan results render in any of these formats, selected with draugr scan --format:

FormatPurpose
consoleThe terminal report, for a run somebody is watching.
evidenceThe console report plus what makes it defensible: tools, revisions, and what each control measured against.
markdownThe report as prose and tables, for a merge request comment or a wiki.
htmlA self-contained page, for attaching to a ticket or an audit.
junitOne failed test per finding, and one test in error per control with a scan error, for a CI test panel.
jsonThe whole run as one document, for a platform or a script.
sarifSARIF 2.1.0, which code scanning and editors read.
vexAn OpenVEX document saying which vulnerabilities apply to this product.
gitlab-sastGitLab's own security schema, for its Vulnerability Report. A build artifact rather than an upload.
gitlab-dependency-scanningThe same, for vulnerable dependencies.
gitlab-secret-detectionThe same, for leaked credentials.
gitlab-container-scanningThe same, for vulnerable packages in a container image.
gitlab-codequalityGitLab Code Quality: every finding, in the merge request, on any tier.
gitlab-cyclonedxThe SBOM as GitLab reads it, filling the Dependency List and License Compliance.
templateYour 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.

KindDelivers toConfig
filea local directory (one file per report format)dir
githubGitHub 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-commenta sticky pull-request comment (posts the markdown report)repo, pr (default from the env); token from $GITHUB_TOKEN (or tokenEnv)
azure-pr-commenta 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-commenta sticky GitLab merge-request comment (posts the markdown report)repo, pr (default from the GitLab CI env); token from $GITLAB_TOKEN (or tokenEnv)
github-issuea GitHub issue that is open while the gate fails, closed when it passesrepo (default from the env), select, split, minPriority, label, labelBy, branches, item; token from $GITHUB_TOKEN (or tokenEnv)
gitlab-issuea GitLab issue that is open while the gate fails, closed when it passesrepo (default from the GitLab CI env), select, split, minPriority, label, labelBy, branches, item; token from $GITLAB_TOKEN (or tokenEnv)
azure-work-iteman Azure Boards work item that is open while the gate fails, closed when it passesorg, project (default from the Azure Pipelines env), select, split, minPriority, label, labelBy, branches, item; token from $SYSTEM_ACCESSTOKEN (or tokenEnv)
draugr-apiany 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:

ToolPurposeInstall
cosignverify release/tool signatures (Sigstore)draugr tools install cosign
gitcheck out repositories for repo-scanning controlssystem
kubectlrequired by the kube-bench scanner, whose policies checks shell out to itsystem
syftgenerate SBOMs when a Saga sets config.sbomdraugr 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.