Available in: EE
The module lifecycle stage: General Availability
The module has requirements for installation
Requirements
To the Deckhouse version: 1.75 and above.
Conversions
The module is configured using the ModuleConfig resource, the schema of which contains a version number. When you apply an old version of the ModuleConfig schema in a cluster, automatic transformations are performed. To manually update the ModuleConfig schema version, the following steps must be completed sequentially for each version:
-
Updates from version 1 to 2:
nodeScanning.scannersandnodeScanning.pkgTypesnow use PascalCase values (Vuln/Secret,OS/Library). Existing lowercase values (vuln/secret,os/library) are automatically converted.
Parameters
Schema version: 2
-
-
array of objectssettings.additionalRegistryCA
List of registry CA certificates for connecting to private registries.
If it is necessary to specify a certificate with an intermediate certificate, the chain is specified without additional line breaks.
Example:
additionalRegistryCA: - name: example CA ca: | -----BEGIN CERTIFICATE----- ................. -----END CERTIFICATE----- - name: CA with intermediate CA ca: | -----BEGIN CERTIFICATE----- ................. -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ................. -----END CERTIFICATE------
stringsettings.additionalRegistryCA.ca
-
stringsettings.additionalRegistryCA.name
-
-
array of stringssettings.additionalVulnerabilityReportFieldsA list of additional fields from the vulnerability database to add to the VulnerabilityReport.
Example:
additionalVulnerabilityReportFields: - Class - Target -
objectsettings.complianceReportsConfigures which
ClusterComplianceReportresources are deployed by the module.Default:
{}-
array of stringssettings.complianceReports.enabled
List of compliance frameworks to deploy as
ClusterComplianceReportresources.Available values:
CIS— CIS Kubernetes Benchmark v1.23.PCI-DSS— PCI DSS v4.0 (key controls for protecting cardholder data).NSA— NSA-CISA Kubernetes Hardening Guidance v1.0.GDPR— General Data Protection Regulation (key security-relevant articles).HIPAA— HIPAA Security Rule (key technical safeguards).FSTEC-21— Order of FSTEC of Russia No. 21 (personal data protection in personal data information systems).FZ-187— Order of FSTEC of Russia No. 239 (security requirements for significant CII objects, Federal Law 187-FZ).
By default
GDPRandHIPAAare disabled.Default:
[ "CIS", "PCI-DSS", "NSA", "FSTEC-21", "FZ-187" ]Examples:
enabled: - CIS - NSAenabled: - CIS - PCI-DSS - NSA - GDPR - HIPAA - FSTEC-21 - FZ-187-
stringsettings.complianceReports.enabled.Element of the array
Allowed values:
CIS,PCI-DSS,NSA,GDPR,HIPAA,FSTEC-21,FZ-187
-
booleansettings.complianceReports.skipSystemResources
Skip platform-owned and user-opted-out resources from compliance reports.
When enabled (default), the module applies two complementary filters:
-
No-create filter (namespace-level, at Write time).
ConfigAuditReportandRbacAssessmentReportCRs are not created in namespaces that are either:- matching one of the patterns
d8-*,kube-*,default; - or carrying the
security.deckhouse.io/skip-compliance=truelabel on theNamespaceobject itself.
Together this keeps
kubectl get configauditreports -Aclean of platform noise and gives users a way to opt entire namespaces out of compliance.InfraAssessmentReportis exempt — control plane components inkube-system(kube-apiserver,etcd,kube-scheduler,kube-controller-manager) keep producing infra checks that feed CIS Kubernetes Benchmark section 1.x. - matching one of the patterns
-
Compliance aggregation filter (by owner label). When
ClusterComplianceReportis aggregated, the compliance reconciler skips findings whose owner is a cluster-scoped object carrying one of these label key=value pairs:heritage=deckhouse— Deckhouse-managed resources.kubernetes.io/bootstrapping=rbac-defaults— Kubernetes built-in RBAC defaults (system:*,cluster-admin, etc.).
This catches cluster-scoped resources (such as built-in
ClusterRoles) that the namespace-level filter cannot reach.
Per-resource report CRs that do get created (
VulnerabilityReport,ExposedSecretReport,SbomReport,InfraAssessmentReport) keep being generated for every scanned workload — vulnerability scanning of platform images, exposed-secret scanning, etc. are not affected.Note on scanning scope. The module decouples the heavy image-pull-based vulnerability scanner (which also produces
ExposedSecretReportandSbomReport) from the lightweight configuration scanners (ConfigAudit,RbacAssessment,InfraAssessment). The vulnerability scanner stays opt-in via thesecurity-scanning.deckhouse.io/enabled=""namespace label, while configuration scanners run cluster-wide so compliance reports cover the whole cluster — only thisskipSystemResourcesfilter narrows what they record.Disable this parameter if you explicitly need platform-owned resources to appear in compliance reports.
Default:
trueExamples:
skipSystemResources: trueskipSystemResources: false -
-
-
integersettings.concurrentScanJobsLimitMaximum number of scan jobs that the operator can run concurrently.
Default:
10Allowed values:
1 <= XExamples:
concurrentScanJobsLimit: 3concurrentScanJobsLimit: 5concurrentScanJobsLimit: 10 -
objectsettings.denyVulnerableImages
Settings to prohibit the creation of
Pod/Deployment/StatefulSet/DaemonSetwith vulnerable images in namespaces labeledsecurity.deckhouse.io/trivy-provider: "".Note: This constraint is enforced only during admission (resource creation/update). Gatekeeper audit does not evaluate this constraint.
Default:
{}-
array of stringssettings.denyVulnerableImages.allowedSeverityLevelsImages containing only vulnerabilities of specified severities will not be denied.
-
stringsettings.denyVulnerableImages.allowedSeverityLevels.Element of the array
Allowed values:
UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL
-
-
booleansettings.denyVulnerableImages.enabledDeny use of vulnerable images in cluster namespaces labeled as
security.deckhouse.io/trivy-provider: "".Default:
false -
array of objectssettings.denyVulnerableImages.registrySecrets
List of additional registry secrets to use for downloading images from private registries.
By default, the
deckhouse-registrysecret is used to download images for scanning.Default:
[]-
stringsettings.denyVulnerableImages.registrySecrets.name
-
stringsettings.denyVulnerableImages.registrySecrets.namespace
-
-
-
booleansettings.disableSBOMGeneration
Disables SBOM reports generation.
Warning. When this options is set to true, all current SBOM reports are deleted from the cluster (the cleanup is executed only once).
Default:
falseExamples:
disableSBOMGeneration: truedisableSBOMGeneration: false -
booleansettings.insecureDbRegistryAllows Trivy to download vulnerability databases using insecure HTTPS connections (not passed TLS certificate verification) or HTTP connections.
Default:
falseExamples:
insecureDbRegistry: trueinsecureDbRegistry: false -
array of stringssettings.insecureRegistriesList of container registry addresses to which insecure HTTPS connections (not passed TLS certificate verification) or HTTP connections are allowed.
Example:
insecureRegistries: - my.registry.com - http-only.registry.io -
booleansettings.linkCVEtoBDUConverts CVE database vulnerability records to BDU (FSTEC Russia) database records.
Default:
falseExamples:
linkCVEtoBDU: truelinkCVEtoBDU: false -
objectsettings.nodeAgent
Runtime application and network map (in preview).
When enabled, a privileged eBPF agent runs on every node and observes the runtime behaviour of each workload — the processes it launches, the files it opens, the Linux capabilities and syscalls it uses, and the network connections it makes. The observations are aggregated per workload into an
ApplicationProfileand aNetworkNeighborhood, giving an accurate map of what each application actually does at runtime.Requirements. Node kernels must be Linux 5.4 or newer and expose BTF at
/sys/kernel/btf/vmlinux. The agent runs privileged with host PID access.Default:
{}-
booleansettings.nodeAgent.enabledEnables runtime observation and building of the application/network map.
Default:
falseExamples:
enabled: trueenabled: false -
objectsettings.nodeAgent.generatePolicies
Generate least-privilege policies from the observed map.
The map itself (
ApplicationProfile,NetworkNeighborhood) is always built whennodeAgentis enabled. These toggles additionally expose generated policies derived from it.Default:
{}-
booleansettings.nodeAgent.generatePolicies.networkPolicyExpose
GeneratedNetworkPolicyobjects — KubernetesNetworkPolicydefinitions computed from each workload’s observedNetworkNeighborhood. Review and apply them to enforce least privilege.Default:
falseExamples:
networkPolicy: truenetworkPolicy: false -
booleansettings.nodeAgent.generatePolicies.seccompGenerate and expose
SeccompProfileobjects from each workload’s observed system calls. Attach them to your pods to restrict the allowed syscalls.Default:
falseExamples:
seccomp: trueseccomp: false
-
-
stringsettings.nodeAgent.learningPeriodHow long a workload is observed before its profile is considered complete. During this window the map keeps absorbing newly seen behaviour; afterwards the profile is finalized.
Default:
1hExamples:
learningPeriod: 1hlearningPeriod: 24h -
objectsettings.nodeAgent.nodeSelector
Restrict the eBPF agent to nodes matching these labels.
By default the agent runs on every node. Use this to limit it to a subset, for example nodes whose kernels meet the BTF requirement.
Default:
{}Example:
node-role.kubernetes.io/worker: '' -
array of objectssettings.nodeAgent.tolerations
Optional
tolerationsfor the eBPF agent DaemonSet.The same as
spec.tolerationsfor the Kubernetes pod. If omitted, the agent tolerates all taints so it can run on every node.Example:
tolerations: - operator: Exists-
stringsettings.nodeAgent.tolerations.effect
-
stringsettings.nodeAgent.tolerations.key
-
stringsettings.nodeAgent.tolerations.operator
-
integersettings.nodeAgent.tolerations.tolerationSeconds
-
stringsettings.nodeAgent.tolerations.value
-
-
-
objectsettings.nodeScanningConfiguration for node (host filesystem) vulnerability scanning. This feature scans the host filesystem of each Kubernetes node to detect OS package vulnerabilities.
Default:
{}-
integersettings.nodeScanning.concurrentLimitMaximum number of concurrent node scan jobs.
Default:
1Allowed values:
1 <= XExamples:
concurrentLimit: 1concurrentLimit: 2concurrentLimit: 3 -
booleansettings.nodeScanning.enabled
Enables node vulnerability scanning.
When enabled, the operator will scan the host filesystem of each node for OS package vulnerabilities.
Default:
falseExamples:
enabled: trueenabled: false -
booleansettings.nodeScanning.hideUnfixedCVEs
When true, only report vulnerabilities that have a fix available.
This significantly reduces report size but hides unfixed vulnerabilities.
Default:
falseExamples:
hideUnfixedCVEs: truehideUnfixedCVEs: false -
objectsettings.nodeScanning.nodeSelectorFilter nodes by labels. Only nodes matching all labels will be scanned.
Default:
{}Examples:
node-role.kubernetes.io/worker: ''env: production -
array of stringssettings.nodeScanning.pkgTypes
List of package types to include in node scanning:
OS— operating system packages (rpm, deb, apk, etc.).Library— application-level libraries (jars, npm modules, Python packages, etc.) found on the node filesystem.
Default:
[ "OS" ]Examples:
pkgTypes: - OSpkgTypes: - OS - Library-
stringsettings.nodeScanning.pkgTypes.Element of the array
Allowed values:
OS,Library
-
array of stringssettings.nodeScanning.scanners
List of scanners to enable on each node:
Vuln— vulnerability scanner (matches known CVEs in OS and library packages of the node host filesystem).Secret— secret scanner (detects hardcoded credentials such as AWS keys, GitHub tokens, etc. in files on the node).
Default:
[ "Vuln" ]Examples:
scanners: - Vulnscanners: - Vuln - Secret-
stringsettings.nodeScanning.scanners.Element of the array
Allowed values:
Vuln,Secret
-
array of stringssettings.nodeScanning.severities
Filter vulnerabilities by severity.
Warning. Without filtering, reports can exceed etcd’s 3MB object size limit on nodes with many packages.
Default:
[ "CRITICAL", "HIGH" ]Examples:
severities: - CRITICAL - HIGHseverities: - CRITICAL - HIGH - MEDIUM-
stringsettings.nodeScanning.severities.Element of the array
Allowed values:
UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL
-
-
array of stringssettings.nodeScanning.skipDirs
List of directories to skip during node scanning.
By default, container runtime directories and virtual filesystems are excluded.
Default:
[ "/proc", "/sys", "/dev", "/run", "/var/lib/containerd", "/var/lib/docker", "/var/lib/kubelet/pods" ]Example:
skipDirs: - /proc - /sys - /dev -
stringsettings.nodeScanning.timeout
Timeout for node scan jobs.
If not set, the default scan job timeout is used.
Default:
‘’Examples:
timeout: 10mtimeout: 30m
-
-
objectsettings.nodeSelector
Optional
nodeSelectorforoperator-trivyand scan jobs.The same as
spec.nodeSelectorfor the Kubernetes pod.If the parameter is omitted or
false, it will be determined automatically.Example:
disktype: ssd -
array of stringssettings.reportResourceLabels
A list of additional labels for marking Trivy’s reports (VulnerabilityReport).
The values of these labels will correspond to the values of the scanned resources’ labels.
Examples:
reportResourceLabels: appreportResourceLabels: env -
objectsettings.scanJobResources
Resource
requests/limitsfor scan jobs (ScanJobpods).If the parameter is omitted, the module uses the default values (as it did before this setting existed). If the parameter is specified, you may set only some of the fields (e.g. only memory) — unspecified fields will not be forced by the module.
Default:
{}Example:
limits: cpu: 500m memory: 500M requests: cpu: 100m memory: 100M-
objectsettings.scanJobResources.limits
Default:
{}-
stringsettings.scanJobResources.limits.cpu
Examples:
cpu: 500mcpu: '1' -
stringsettings.scanJobResources.limits.memory
Examples:
memory: 500Mmemory: 1Gi
-
-
objectsettings.scanJobResources.requests
Default:
{}-
stringsettings.scanJobResources.requests.cpu
Examples:
cpu: 100mcpu: 250m -
stringsettings.scanJobResources.requests.memory
Examples:
memory: 100Mmemory: 256Mi
-
-
-
array of stringssettings.severitiesFilter vulnerability reports by their severities.
Examples:
severities: - CRITICAL - HIGH - MEDIUM - LOW - UNKNOWNseverities: - CRITICAL - HIGH-
stringsettings.severities.Element of the array
Allowed values:
UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL
-
-
stringsettings.storageClass
The name of StorageClass that will be used to store the module’s data.
If the value is not specified, the StorageClass will be used according to the global storageClass parameter setting.
The global
storageClassparameter is only considered when the module is enabled. Changing the globalstorageClassparameter while the module is enabled will not trigger disk re-provisioning.Warning. Specifying a value different from the one currently used (in the existing PVC) will result in disk re-provisioning and all data will be deleted.
If
falseis specified,emptyDirwill be forced to be used.Examples:
storageClass: ceph-ssdstorageClass: 'false' -
array of objectssettings.tolerations
Optional
tolerationsforoperator-trivyand scan jobs.The same as
spec.tolerationsfor the Kubernetes pod.If the parameter is omitted or
false, it will be determined automatically.Example:
effect: NoSchedule key: key1 operator: Equal value: value1-
stringsettings.tolerations.effect
-
stringsettings.tolerations.key
-
stringsettings.tolerations.operator
-
integersettings.tolerations.tolerationSeconds
-
stringsettings.tolerations.value
-
-
booleansettings.useVEXFromOCISearch OCI registry for VEX Attestations of scanned images and suppress reporting of vulnerabilities declared in them.
Default:
falseExamples:
useVEXFromOCI: trueuseVEXFromOCI: false
-