Стадия жизненного цикла модуля: Общедоступная версия
У модуля есть требования для установки
Модуль operator-trivy Deckhouse Platform (DP) хранит результаты и настройки сканирования в кастомных ресурсах двух групп API:
trivy.deckhouse.io/v1alpha1— отчёты о сканировании. Их структура повторяет отчёты проекта Trivy Operator от Aqua Security. По умолчанию эти ресурсы не являются CRD: модуль обслуживает их через агрегированный API на базе компонентаsecurity-storage. Если параметрsecurityStorageForReportsравенfalse, отчёты хранятся вetcdкак кастомные ресурсы группыaquasecurity.github.ioс той же структурой.deckhouse.io/v1alpha1— RegistryScanTarget, RegistryImageVulnerabilityReport, SecurityScore и ClusterSecurityScore. Эти ресурсы описаны в CRD, которые устанавливает модуль.
Получение отчётов
При запросе отчётов группы trivy.deckhouse.io учитывайте следующее:
- Всегда указывайте ресурс вместе с группой, например
vulnerabilityreports.trivy.deckhouse.io. CRD группыaquasecurity.github.ioустанавливаются в обоих режимах хранения и могут содержать устаревшие объекты тех же видов. - Запрос списка возвращает объекты, в которых заполнены только
metadataиreport.summary. Находки, напримерreport.vulnerabilitiesиreport.checks, пусты. Чтобы получить объекты полностью, добавьте в запрос селектор меток!metadata-only.deckhouse.io. Объекты ClusterComplianceReport всегда возвращаются полностью. - Запрос одного объекта по имени возвращает объект полностью.
Чтобы получить отчёты только с metadata и report.summary, выполните:
d8 k get vulnerabilityreports.trivy.deckhouse.io -n <NAMESPACE> -o yamlЧтобы получить полные отчёты со всеми уязвимостями, выполните:
d8 k get vulnerabilityreports.trivy.deckhouse.io -n <NAMESPACE> -l '!metadata-only.deckhouse.io' -o yamlЧтобы получить один полный отчёт, выполните:
d8 k get vulnerabilityreports.trivy.deckhouse.io -n <NAMESPACE> <REPORT_NAME> -o yamlБезопасность на уровне объектов
VulnerabilityReport
VulnerabilityReport — объект, содержащий отчёт об уязвимостях, обнаруженных в образе контейнера, используемом в рабочей нагрузке Kubernetes.
Отчёт включает список известных уязвимостей в пакетах операционной системы и приложениях, а в report.summary — количество уязвимостей каждого уровня серьёзности (CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN).
Для каждого контейнера в многоконтейнерной нагрузке operator-trivy создаёт отдельный объект VulnerabilityReport в неймспейсе соответствующей нагрузки.
Связь с объектом Kubernetes устанавливается через поле ownerReferences.
Поле report.dbMetadata фиксирует базу данных уязвимостей Trivy, которая использовалась при записи отчёта: её версию version и время updatedAt, downloadedAt и nextUpdate.
Поля с префиксом javaDb содержат те же данные для базы данных уязвимостей Java.
После записи отчёта поле не меняется.
Поле отсутствует, если на момент записи у оператора не было сведений о базе данных.
Чтобы найти отчёты, созданные по устаревшей базе данных, сравните report.dbMetadata.updatedAt со значением trivy-db.updatedAt в ConfigMap trivy-db-info, описанном в разделе «Управление базами данных».
Имена объектов формируются по шаблону <тип рабочей нагрузки>-<имя рабочей нагрузки>-<имя контейнера>.
Пример VulnerabilityReport для контейнера nginx объекта ReplicaSet:
apiVersion: trivy.deckhouse.io/v1alpha1
kind: VulnerabilityReport
metadata:
name: replicaset-nginx-6d4cf56db6-nginx
namespace: default
labels:
trivy-operator.container.name: nginx
trivy-operator.resource.kind: ReplicaSet
trivy-operator.resource.name: nginx-6d4cf56db6
trivy-operator.resource.namespace: default
resource-spec-hash: 7cb64cb677
ownerReferences:
- apiVersion: apps/v1
kind: ReplicaSet
name: nginx-6d4cf56db6
uid: aa345200-cf24-443a-8f11-ddb438ff8659
controller: true
blockOwnerDeletion: false
report:
artifact:
repository: library/nginx
tag: '1.16'
os:
family: debian
name: '10.3'
registry:
server: index.docker.io
scanner:
name: Deckhouse Container Security
vendor: Deckhouse
version: v0.6.8
summary:
criticalCount: 2
highCount: 0
mediumCount: 0
lowCount: 0
unknownCount: 0
dbMetadata:
version: "2"
updatedAt: "2026-06-10T06:12:44Z"
downloadedAt: "2026-06-10T07:00:12Z"
nextUpdate: "2026-06-11T06:12:44Z"
vulnerabilities:
- vulnerabilityID: CVE-2019-20367
resource: libbsd0
installedVersion: 0.9.1-2
fixedVersion: 0.9.1-2+deb10u1
severity: CRITICAL
score: 9.1
target: library/nginx:1.16
primaryLink: https://avd.aquasec.com/nvd/cve-2019-20367
- vulnerabilityID: CVE-2018-25009
resource: libwebp6
installedVersion: 0.6.1-2
fixedVersion: ''
severity: CRITICAL
score: 9.1
target: library/nginx:1.16
title: 'libwebp: out-of-bounds read in WebPMuxCreateInternal'
primaryLink: https://avd.aquasec.com/nvd/cve-2018-25009ConfigAuditReport
ConfigAuditReport — объект, содержащий результаты проверки конфигурации Kubernetes-объекта с помощью инструментов аудита, таких как Trivy.
У каждой проверки в отчёте есть категория (например, Kubernetes Security Check) и уровень серьёзности (CRITICAL, HIGH, MEDIUM, LOW).
report.summary содержит количество по каждому уровню серьёзности.
Примеры проверок:
- запуск контейнера от имени пользователя без прав root;
- наличие у контейнера лимитов ресурсов;
- конфигурация сетевого доступа (
hostNetwork,hostPIDи др.); - наличие флагов безопасности, запрещающих эскалацию привилегий.
ConfigAuditReport создаётся для любого объекта в неймспейсе, включая:
- рабочие нагрузки (Pod, Deployment, StatefulSet и др.);
- вспомогательные объекты (Service, ConfigMap, Role, RoleBinding и др.).
Каждый отчёт связан с проверяемым объектом через поле ownerReferences и сохраняется в том же неймспейсе.
Имена объектов формируются по шаблону <тип рабочей нагрузки>-<имя рабочей нагрузки>.
Пример ConfigAuditReport для ReplicaSet, принадлежащего Deployment nginx:
apiVersion: trivy.deckhouse.io/v1alpha1
kind: ConfigAuditReport
metadata:
name: replicaset-nginx-6d4cf56db6
namespace: default
labels:
trivy-operator.resource.kind: ReplicaSet
trivy-operator.resource.name: nginx-6d4cf56db6
trivy-operator.resource.namespace: default
ownerReferences:
- apiVersion: apps/v1
kind: ReplicaSet
name: nginx-6d4cf56db6
report:
scanner:
name: Deckhouse Container Security
vendor: Deckhouse
version: v0.6.8
summary:
criticalCount: 2
highCount: 0
mediumCount: 0
lowCount: 9
checks:
- checkID: hostPIDSet
severity: CRITICAL
messages: ["Host PID is not configured"]
success: true
- checkID: notReadOnlyRootFilesystem
severity: LOW
messages: ["Filesystem should be read only"]
success: false
scope:
type: Container
value: nginxRbacAssessmentReport
RbacAssessmentReport — это отчёт, созданный на основе анализа настроек RBAC (Role-Based Access Control) объекта Role.
Он содержит результаты проверок, выполненных средствами аудита конфигурации, такими как Trivy. Примеры проверок включают в себя выявление ролей, которые:
- предоставляют чрезмерные привилегии (например, полный доступ к секретам всех групп API);
- нарушают принципы минимально необходимого доступа.
Каждый отчёт относится к одному объекту Role и размещается в неймспейсе этого объекта. Объекты ClusterRole проверяются в отчётах ClusterRbacAssessmentReport.
Имена объектов формируются по шаблону role-<имя роли>.
Если имя роли нельзя использовать в имени объекта, вместо него подставляется хеш имени, как в примере ниже.
Пример RbacAssessmentReport для объекта Role в неймспейсе kube-system:
apiVersion: trivy.deckhouse.io/v1alpha1
kind: RbacAssessmentReport
metadata:
name: role-868458b9d6
namespace: kube-system
report:
checks:
- category: Kubernetes Security Check
checkID: KSV051
description: Check whether role permits creating role bindings and associating
to privileged role/clusterrole
messages:
- ""
severity: HIGH
success: true
title: Do not allow role binding creation and association with privileged role/clusterrole
- category: Kubernetes Security Check
checkID: KSV056
description: The ability to control which pods get service traffic directed to
them allows for interception attacks. Controlling network policy allows for
bypassing lateral movement restrictions.
messages:
- ""
severity: HIGH
success: true
title: Do not allow management of networking resources
- category: Kubernetes Security Check
checkID: KSV041
description: Check whether role permits managing secrets
messages:
- Role permits management of secret(s)
severity: CRITICAL
success: false
title: Do not allow management of secrets
- category: Kubernetes Security Check
checkID: KSV047
description: Check whether role permits privilege escalation from node proxy
messages:
- ""
severity: HIGH
success: true
title: Do not allow privilege escalation from node proxy
- category: Kubernetes Security Check
checkID: KSV045
description: Check whether role permits wildcard verb on specific resources
messages:
- ""
severity: CRITICAL
success: true
title: No wildcard verb roles
- category: Kubernetes Security Check
checkID: KSV054
description: Check whether role permits attaching to shell on pods
messages:
- ""
severity: HIGH
success: true
title: Do not allow attaching to shell on pods
- category: Kubernetes Security Check
checkID: KSV044
description: Check whether role permits wildcard verb on wildcard resource
messages:
- ""
severity: CRITICAL
success: true
title: No wildcard verb and resource roles
- category: Kubernetes Security Check
checkID: KSV050
description: An effective level of access equivalent to cluster-admin should not
be provided.
messages:
- ""
severity: CRITICAL
success: true
title: Do not allow management of RBAC resources
- category: Kubernetes Security Check
checkID: KSV046
description: Check whether role permits specific verb on wildcard resources
messages:
- ""
severity: CRITICAL
success: true
title: No wildcard resource roles
- category: Kubernetes Security Check
checkID: KSV055
description: Check whether role permits allowing users in a rolebinding to add
other users to their rolebindings
messages:
- ""
severity: LOW
success: true
title: Do not allow users in a rolebinding to add other users to their rolebindings
- category: Kubernetes Security Check
checkID: KSV052
description: Check whether role permits creating role ClusterRoleBindings and
association with privileged cluster role
messages:
- ""
severity: HIGH
success: true
title: Do not allow role to create ClusterRoleBindings and association with privileged
role
- category: Kubernetes Security Check
checkID: KSV053
description: Check whether role permits getting shell on pods
messages:
- ""
severity: HIGH
success: true
title: Do not allow getting shell on pods
- category: Kubernetes Security Check
checkID: KSV042
description: Used to cover attacker’s tracks, but most clusters ship logs quickly
off-cluster.
messages:
- ""
severity: MEDIUM
success: true
title: Do not allow deletion of pod logs
- category: Kubernetes Security Check
checkID: KSV049
description: Some workloads leverage configmaps to store sensitive data or configuration
parameters that affect runtime behavior that can be modified by an attacker
or combined with another issue to potentially lead to compromise.
messages:
- ""
severity: MEDIUM
success: true
title: Do not allow management of configmaps
- category: Kubernetes Security Check
checkID: KSV043
description: Check whether role permits impersonating privileged groups
messages:
- ""
severity: CRITICAL
success: true
title: Do not allow impersonation of privileged groups
- category: Kubernetes Security Check
checkID: KSV048
description: Check whether role permits update/create of a malicious pod
messages:
- ""
severity: HIGH
success: true
title: Do not allow update/create of a malicious pod
scanner:
name: Deckhouse Container Security
vendor: Deckhouse
version: v0.6.8
summary:
criticalCount: 1
highCount: 0
lowCount: 0
mediumCount: 0
updateTimestamp: nullInfraAssessmentReport
InfraAssessmentReport содержит результаты проверок инфраструктуры для компонентов control plane Kubernetes, которые работают как поды в неймспейсе kube-system.
Эти отчёты используются проверками раздела 1.x CIS Kubernetes Benchmark.
Отчёт содержит report.scanner, report.summary и report.checks, как RbacAssessmentReport.
Он размещается в неймспейсе проверяемого объекта.
Параметр complianceReports.skipSystemResources не влияет на InfraAssessmentReport.
ExposedSecretReport
ExposedSecretReport — отчёт о потенциальных секретах, обнаруженных в образе контейнера, используемом в рабочей нагрузке Kubernetes.
В отчёте перечислены строки, содержащие чувствительные данные (например, токены, ключи, пароли), найденные в файлах внутри образа. Каждая находка сопровождается категорией, правилом, уровнем серьёзности и указанием пути к файлу.
Для каждого контейнера в многоконтейнерной рабочей нагрузке operator-trivy создаёт отдельный ExposedSecretReport в неймспейсе рабочей нагрузки.
Связь с объектом Kubernetes осуществляется через поле ownerReferences.
Имена объектов формируются по шаблону <тип рабочей нагрузки>-<имя рабочей нагрузки>-<имя контейнера>.
Пример ExposedSecretReport с двумя токенами Stripe, найденными в образе контейнера app:
apiVersion: trivy.deckhouse.io/v1alpha1
kind: ExposedSecretReport
metadata:
name: replicaset-app-67b77f5965-app
namespace: default
labels:
trivy-operator.container.name: app
trivy-operator.resource.kind: ReplicaSet
trivy-operator.resource.name: app-67b77f5965
trivy-operator.resource.namespace: default
ownerReferences:
- apiVersion: apps/v1
kind: ReplicaSet
name: app-67b77f5965
report:
artifact:
repository: myimagewithsecret
tag: v0.30.1
registry:
server: index.docker.io
scanner:
name: Deckhouse Container Security
vendor: Deckhouse
version: v0.6.8
secrets:
- category: Stripe
ruleID: stripe-access-token
severity: HIGH
target: "/app/config/secret.yaml"
match: "publishable_key: *****"
title: Stripe
- category: Stripe
ruleID: stripe-access-token
severity: HIGH
target: "/app/config/secret.yaml"
match: "secret_key: *****"
title: Stripe
summary:
criticalCount: 0
highCount: 2
mediumCount: 0
lowCount: 0
updateTimestamp: "2022-06-29T14:29:37Z"SbomReport
SbomReport — это отчёт, содержащий SBOM (Software Bill of Materials) для образа контейнера, используемого в рабочей нагрузке Kubernetes.
Он представляет собой перечень всех компонентов программного обеспечения, включая системные пакеты и зависимости приложений, найденные в образе. Такая информация полезна для анализа состава образа, аудита безопасности и соответствия требованиям поставщиков.
Для многоконтейнерной рабочей нагрузки operator-trivy создаёт отдельный объект SbomReport для каждого контейнера.
Отчёт создаётся в том же неймспейсе, где размещена рабочая нагрузка, и связан с ней через поле ownerReferences.
Имена объектов формируются по шаблону <тип рабочей нагрузки>-<имя рабочей нагрузки>-<имя контейнера>.
Пример SbomReport для контейнера kube-apiserver пода control plane:
apiVersion: trivy.deckhouse.io/v1alpha1
kind: SbomReport
metadata:
creationTimestamp: "2023-07-10T09:37:21Z"
generation: 1
labels:
resource-spec-hash: 796669cd5d
trivy-operator.container.name: kube-apiserver
trivy-operator.resource.kind: Pod
trivy-operator.resource.name: kube-apiserver-kind-control-plane
trivy-operator.resource.namespace: kube-system
name: pod-kube-apiserver-kind-control-plane-kube-apiserver
namespace: kube-system
ownerReferences:
- apiVersion: v1
blockOwnerDeletion: false
controller: true
kind: Pod
name: kube-apiserver-kind-control-plane
uid: 732b4aa7-91f8-40a3-8b21-9627a98a910b
resourceVersion: "6148"
uid: 2a5000fe-b97e-46d0-9de7-62fb5fbc6555
report:
artifact:
repository: kube-apiserver
tag: v1.21.1
components:
bomFormat: CycloneDX
components:
- bom-ref: 9464f5f9-750d-4ea0-8705-c8d067b25b29
name: debian
properties:
- name: aquasecurity:trivy:Class
value: os-pkgs
- name: aquasecurity:trivy:Type
value: debian
supplier: {}
type: operating-system
version: "10.9"
- bom-ref: pkg:deb/debian/base-files@10.3+deb10u9?arch=amd64&distro=debian-10.9
licenses:
- expression: GPL-3.0
license: {}
name: base-files
properties:
- name: aquasecurity:trivy:LayerDiffID
value: sha256:417cb9b79adeec55f58b890dc9831e252e3523d8de5fd28b4ee2abb151b7dc8b
- name: aquasecurity:trivy:LayerDigest
value: sha256:5dea5ec2316d4a067b946b15c3c4f140b4f2ad607e73e9bc41b673ee5ebb99a3
- name: aquasecurity:trivy:PkgID
value: base-files@10.3+deb10u9
- name: aquasecurity:trivy:PkgType
value: debian
- name: aquasecurity:trivy:SrcName
value: base-files
- name: aquasecurity:trivy:SrcVersion
value: 10.3+deb10u9
purl: pkg:deb/debian/base-files@10.3+deb10u9?arch=amd64&distro=debian-10.9
supplier:
name: Santiago Vila <sanvila@debian.org>
type: library
version: 10.3+deb10u9
- bom-ref: pkg:deb/debian/netbase@5.6?arch=all&distro=debian-10.9
licenses:
- expression: GPL-2.0
license: {}
name: netbase
properties:
- name: aquasecurity:trivy:LayerDiffID
value: sha256:417cb9b79adeec55f58b890dc9831e252e3523d8de5fd28b4ee2abb151b7dc8b
- name: aquasecurity:trivy:LayerDigest
value: sha256:5dea5ec2316d4a067b946b15c3c4f140b4f2ad607e73e9bc41b673ee5ebb99a3
- name: aquasecurity:trivy:PkgID
value: netbase@5.6
- name: aquasecurity:trivy:PkgType
value: debian
- name: aquasecurity:trivy:SrcName
value: netbase
- name: aquasecurity:trivy:SrcVersion
value: "5.6"
purl: pkg:deb/debian/netbase@5.6?arch=all&distro=debian-10.9
supplier:
name: Marco d'Itri <md@linux.it>
type: library
version: "5.6"
- bom-ref: pkg:deb/debian/tzdata@2021a-0+deb10u1?arch=all&distro=debian-10.9
name: tzdata
properties:
- name: aquasecurity:trivy:LayerDiffID
value: sha256:417cb9b79adeec55f58b890dc9831e252e3523d8de5fd28b4ee2abb151b7dc8b
- name: aquasecurity:trivy:LayerDigest
value: sha256:5dea5ec2316d4a067b946b15c3c4f140b4f2ad607e73e9bc41b673ee5ebb99a3
- name: aquasecurity:trivy:PkgID
value: tzdata@2021a-0+deb10u1
- name: aquasecurity:trivy:PkgType
value: debian
- name: aquasecurity:trivy:SrcName
value: tzdata
- name: aquasecurity:trivy:SrcRelease
value: 0+deb10u1
- name: aquasecurity:trivy:SrcVersion
value: 2021a
purl: pkg:deb/debian/tzdata@2021a-0+deb10u1?arch=all&distro=debian-10.9
supplier:
name: GNU Libc Maintainers <debian-glibc@lists.debian.org>
type: library
version: 2021a-0+deb10u1
dependencies:
- dependsOn:
- pkg:deb/debian/base-files@10.3+deb10u9?arch=amd64&distro=debian-10.9
- pkg:deb/debian/netbase@5.6?arch=all&distro=debian-10.9
- pkg:deb/debian/tzdata@2021a-0+deb10u1?arch=all&distro=debian-10.9
ref: 9464f5f9-750d-4ea0-8705-c8d067b25b29
- dependsOn: []
ref: pkg:deb/debian/base-files@10.3+deb10u9?arch=amd64&distro=debian-10.9
- dependsOn: []
ref: pkg:deb/debian/netbase@5.6?arch=all&distro=debian-10.9
- dependsOn: []
ref: pkg:deb/debian/tzdata@2021a-0+deb10u1?arch=all&distro=debian-10.9
- dependsOn:
- 9464f5f9-750d-4ea0-8705-c8d067b25b29
ref: pkg:oci/kube-apiserver@sha256:53a13cd1588391888c5a8ac4cef13d3ee6d229cd904038936731af7131d193a9?repository_url=k8s.gcr.io%2Fkube-apiserver&arch=amd64
metadata:
component:
bom-ref: pkg:oci/kube-apiserver@sha256:53a13cd1588391888c5a8ac4cef13d3ee6d229cd904038936731af7131d193a9?repository_url=k8s.gcr.io%2Fkube-apiserver&arch=amd64
name: k8s.gcr.io/kube-apiserver:v1.21.1
properties:
- name: aquasecurity:trivy:DiffID
value: sha256:417cb9b79adeec55f58b890dc9831e252e3523d8de5fd28b4ee2abb151b7dc8b,sha256:b50131762317bbe47def2d426d5c78a353a08b966d36bed4a04aee99dde4e12b,sha256:1e6ed7621dee7e03dd779486ed469a65af6fb13071d13bd3a89c079683e3b1f0
- name: aquasecurity:trivy:ImageID
value: sha256:771ffcf9ca634e37cbd3202fd86bd7e2df48ecba4067d1992541bfa00e88a9bb
- name: aquasecurity:trivy:RepoDigest
value: k8s.gcr.io/kube-apiserver@sha256:53a13cd1588391888c5a8ac4cef13d3ee6d229cd904038936731af7131d193a9
- name: aquasecurity:trivy:RepoTag
value: k8s.gcr.io/kube-apiserver:v1.21.1
- name: aquasecurity:trivy:SchemaVersion
value: "2"
purl: pkg:oci/kube-apiserver@sha256:53a13cd1588391888c5a8ac4cef13d3ee6d229cd904038936731af7131d193a9?repository_url=k8s.gcr.io%2Fkube-apiserver&arch=amd64
supplier: {}
type: container
timestamp: "2023-07-10T09:37:21+00:00"
tools:
- name: trivy
vendor: aquasecurity
serialNumber: urn:uuid:50dbce86-28c5-4caf-9d08-a4aadf23233e
specVersion: 1.4
version: 1
registry:
server: k8s.gcr.io
scanner:
name: Deckhouse Container Security
vendor: Deckhouse
version: v0.6.8
summary:
componentsCount: 5
dependenciesCount: 5
updateTimestamp: "2023-07-10T09:37:21Z"NodeVulnerabilityReport
Этот ресурс предоставляется только модулем operator-trivy и не имеет полного аналога в проекте Aqua Security.
NodeVulnerabilityReport — кластерный ресурс, содержащий результаты сканирования уязвимостей в корневой файловой системе (rootfs) узла Kubernetes.
В отличие от VulnerabilityReport, содержащего результаты сканирования образов контейнеров, NodeVulnerabilityReport содержит результаты сканирования пакетов и операционной системы, установленных непосредственно на узле. Это помогает выявить уязвимости в базовой инфраструктуре, которые могут затронуть все рабочие нагрузки, работающие на данном узле.
Сканирование выполняется сканером rootfs по файловой системе узла, смонтированной в сканирующий Pod.
Как и VulnerabilityReport, отчёт содержит поле report.dbMetadata.
Имена объектов формируются по шаблону node-<имя узла>.
Пример NodeVulnerabilityReport для узла worker-1:
apiVersion: trivy.deckhouse.io/v1alpha1
kind: NodeVulnerabilityReport
metadata:
name: node-worker-1
labels:
trivy-operator.resource.kind: Node
trivy-operator.resource.name: worker-1
node-rootfs.scanner: Trivy
resource-spec-hash: 5d4c3b2a1f
app.kubernetes.io/managed-by: trivy-operator
annotations:
trivy-operator.aquasecurity.github.io/report-ttl: 24h0m0s
ownerReferences:
- apiVersion: v1
kind: Node
name: worker-1
uid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
controller: true
blockOwnerDeletion: false
report:
artifact:
nodeName: worker-1
kind: node-rootfs
rootPath: /hostfs
os:
family: debian
name: Debian GNU/Linux 12 (bookworm)
scanner:
name: Deckhouse Container Security
vendor: Deckhouse
version: v0.6.8
summary:
criticalCount: 0
highCount: 167
mediumCount: 0
lowCount: 0
unknownCount: 0
updateTimestamp: "2026-02-09T09:30:00Z"
vulnerabilities:
- vulnerabilityID: CVE-2024-1234
resource: openssl
installedVersion: "1.1.1"
fixedVersion: "1.1.2"
severity: HIGH
score: 7.5
title: "OpenSSL Buffer Overflow"
primaryLink: https://nvd.nist.gov/vuln/detail/CVE-2024-1234
- vulnerabilityID: CVE-2024-5678
resource: curl
installedVersion: "7.88.0"
fixedVersion: "7.88.1"
severity: HIGH
score: 7.5
title: "Curl HTTP/2 vulnerability"
primaryLink: https://nvd.nist.gov/vuln/detail/CVE-2024-5678Ключевые отличия от VulnerabilityReport:
- Кластерный ресурс: не привязан к неймспейсу
- OwnerReference на Node: отчёт автоматически удаляется при удалении узла (garbage collection)
- Тип артефакта: содержит
nodeName,kindиrootPathвместо информации о реестре образов - Фильтрация по критичности: по умолчанию отображаются только уязвимости уровня
CRITICALиHIGH, другие уровни критичности можно включить параметромnodeScanning.severities
RegistryScanTarget
Этот ресурс предоставляется только модулем operator-trivy и не имеет полного аналога в проекте Aqua Security.
RegistryScanTarget — кластерный ресурс, описывающий реестр контейнеров и набор репозиториев в нём, которые необходимо периодически сканировать на CVE. Сканер реестров обнаруживает теги образов в каждом репозитории, сканирует их и сохраняет результаты в объектах RegistryImageVulnerabilityReport.
Имена объектов выбираются пользователем произвольно.
Пример — сканирование всех тегов, соответствующих semver-паттерну, в двух репозиториях с периодичностью раз в сутки:
apiVersion: deckhouse.io/v1alpha1
kind: RegistryScanTarget
metadata:
name: production-registry
spec:
registry: registry.example.com
repositories:
- myapp/backend
- myapp/frontend
tagFilter: '^v\d+\.\d+\.\d+$'
rescanPeriod: 1d
registrySecretRef:
name: registry-credentials
namespace: my-appПосле первого цикла сканирования статус отражает прогресс и, при заданном tagFilter, список совпавших тегов по каждому репозиторию.
Время последнего цикла сканирования записывается в аннотацию registry-scanner.deckhouse.io/last-scan-time объекта.
Пример статуса после успешного цикла сканирования:
status:
targets:
- repo: myapp/backend
tags: ["v1.2.3", "v1.3.0", "v2.0.0"]
- repo: myapp/frontend
tags: ["v1.2.3", "v2.0.0"]
conditions:
- type: Ready
status: "True"
reason: ScanCompleted
message: "Scan cycle completed."
lastTransitionTime: "2026-06-08T10:05:42Z"Ключевые поля:
spec.repositories— список путей репозиториев, например["myapp/backend", "myapp/frontend"]. Пустой или отсутствующий список выбирает все репозитории, которые реестр отдаёт через API каталога (catalog API); если реестр каталог не отдаёт или отдаёт пустым, цель переходит в состояниеReady=False.spec.tagFilter— необязательное регулярное выражение (Go). Сканируются только совпадающие теги. При его наличииstatus.targetsсодержит список совпавших тегов не более чем по 50 репозиториям.spec.maxTags— лимит тегов на репозиторий после фильтрации (по умолчанию:100). При превышении сканируются только первыеmaxTagsтегов в лексикографическом порядке, а в сообщении условияReadyотображается предупреждение об усечении. Чтобы нужные теги попали в лимит, используйтеtagFilter.spec.maxRepositories— лимит репозиториев, получаемых из каталога (по умолчанию:100). Применяется, только если параметрspec.repositoriesпуст. Каталог сортируется по имени, сканируются первыеmaxRepositoriesрепозиториев, в сообщении условияReadyотображается предупреждение об усечении, а отчёты по остальным репозиториям сохраняются.spec.rescanPeriod— одно из значений:12h,1d,2d,7d(по умолчанию:1d).spec.registrySecretRef— ссылка на Secret типаkubernetes.io/dockerconfigjsonдля аутентификации в реестре.spec.insecure— еслиtrue, сканер подключается к реестру по HTTP или без проверки TLS-сертификата. По умолчанию:false.- Пользовательский CA — если в модуле задан параметр
additionalRegistryCAили присутствует CA реестра DP, он автоматически используется для проверки TLS. Настройка на уровне отдельных RegistryScanTarget не требуется.
RegistryImageVulnerabilityReport
Этот ресурс предоставляется только модулем operator-trivy и не имеет полного аналога в проекте Aqua Security.
RegistryImageVulnerabilityReport — кластерный ресурс, содержащий результаты CVE-сканирования одного тега образа, обнаруженного через RegistryScanTarget.
Структура поля report повторяет VulnerabilityReport с добавлением полей registry, repository, tag и digest в разделе артефакта. Поля report.dbMetadata в отчёте нет.
Имена объектов формируются по шаблону <имя цели>--<репозиторий>--<тег>-<хеш>:
- в
<имя цели>,<репозиторий>и<тег>заглавные буквы заменяются строчными, а каждый символ, кромеa-z,0-9и-, заменяется на-; <хеш>— первые 6 шестнадцатеричных символов хеша SHA-256 от исходных имени цели, репозитория и тега;- если имя до
-<хеш>длиннее 246 символов, оно обрезается.
Каждый отчёт содержит ownerReference на свой RegistryScanTarget.
При удалении цели все её отчёты удаляются автоматически.
Отчёты тегов, исчезнувших из реестра, также удаляются в следующем цикле сканирования.
Пример отчёта для тега v2.0.0 репозитория myapp/backend:
apiVersion: deckhouse.io/v1alpha1
kind: RegistryImageVulnerabilityReport
metadata:
name: production-registry--myapp-backend--v2-0-0-94c793
ownerReferences:
- apiVersion: deckhouse.io/v1alpha1
kind: RegistryScanTarget
name: production-registry
controller: true
blockOwnerDeletion: true
report:
artifact:
registry: registry.example.com
repository: myapp/backend
tag: v2.0.0
digest: sha256:a1b2c3d4e5f6...
os:
family: debian
name: "Debian GNU/Linux 12 (bookworm)"
eosl: false
scanner:
name: operator-trivy
vendor: Deckhouse
version: 0.69.3
summary:
criticalCount: 1
highCount: 4
mediumCount: 12
lowCount: 31
unknownCount: 0
updateTimestamp: "2026-06-08T10:05:42Z"
vulnerabilities:
- vulnerabilityID: CVE-2024-1234
resource: openssl
installedVersion: "3.0.11"
fixedVersion: "3.0.12"
severity: CRITICAL
score: 9.8
title: "OpenSSL: buffer overflow in X.509 certificate verification"
description: "A buffer overflow in OpenSSL allows remote attackers to..."
publishedDate: "2024-01-15T00:00:00Z"
lastModifiedDate: "2024-02-01T00:00:00Z"
primaryLink: https://nvd.nist.gov/vuln/detail/CVE-2024-1234
links:
- https://openssl.org/news/secadv/20240115.txt
class: os-pkgs
packageType: debian
cvss:
nvd:
V3Vector: "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
V3Score: 9.8
redhat:
V3Vector: "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
V3Score: 9.8
cvsssource: nvdКлючевые поля отчёта:
report.artifact— идентифицирует отсканированный образ:registry,repository,tag,digest.report.os— информация об ОС:family,name, а такжеeosl(true, если версия ОС достигла конца срока поддержки).report.vulnerabilities— список найденных уязвимостей. Каждая запись включает:vulnerabilityID,resource,installedVersion,fixedVersion,severity,scoretitle,description,publishedDate,lastModifiedDateprimaryLink,links— ссылки на запись CVEclass,packageType,packagePath,packagePURL— классификация пакетаcvss— оценки CVSS по источникам (например,nvd,redhat), каждая с векторами и баллами V2/V3/V4cvsssource— источник, использованный для основного поляscore
SecurityScore
Ресурс предоставляется только модулем operator-trivy и не имеет аналога в проекте Aqua Security.
SecurityScore содержит оценку безопасности своего неймспейса и сигналы, по которым она рассчитана.
Модуль поддерживает один объект с именем security-score в каждом пользовательском неймспейсе и обновляет его только при изменении оценки.
SecurityScore — namespaced-ресурс: доступ на чтение к нему выдаётся вместе с доступом к неймспейсу ролью d8:use:capability:module:operator-trivy:view.
Оценка всего кластера хранится в отдельном ресурсе, ClusterSecurityScore.
Сокращённое имя: secscore.
Пример — оценка неймспейса, в котором сканирование включено и находки известны:
apiVersion: deckhouse.io/v1alpha1
kind: SecurityScore
metadata:
name: security-score
namespace: my-app
annotations:
security.deckhouse.io/score-updated-at: "2026-09-10T09:20:11Z"
score:
value: 82
formulaVersion: 3
scanned: true
podPolicy: Baseline
networkPolicies: 1
cve:
critical: 0
high: 3
medium: 11
low: 24
unknown: 0
misconfig:
critical: 0
high: 1
medium: 4
low: 9
unknown: 0
exposedSecrets:
critical: 0
high: 0
medium: 0
low: 0
unknown: 0
components:
coverage:
value: 1
cve:
value: 0.6
misconfig:
value: 0.75
network:
value: 1
psa:
value: 0.6
raw: 0.6
secrets:
value: 1Основные поля:
score.value— оценка неймспейса от 0 до 100.score.formulaVersion— версия формулы, по которой рассчитана оценка. Оценки, посчитанные по разным версиям, сравнивать между собой нельзя.score.components— значение каждой составляющей от 0 до 1. У составляющей, за которой нет отчётов, заданоnotMeasured: true, она исключена из расчёта, а еёvalueравно0.score.scanned,score.podPolicy,score.networkPolicies— сигналы, по которым рассчитана оценка.metadata.annotations— вsecurity.deckhouse.io/score-updated-atзаписано время последнего изменения оценки.
Безопасность на уровне кластера
ClusterVulnerabilityReport
ClusterVulnerabilityReport — кластерный ресурс с уязвимостями, найденными в компонентах кластера Kubernetes.
Оператор создаёт его, сканируя SBOM из ClusterSbomReport сканирования k8s-cluster.
Владелец отчёта — этот ClusterSbomReport, и отчёт удаляется вместе с ним.
Структура поля report такая же, как в VulnerabilityReport.
ClusterConfigAuditReport
ClusterConfigAuditReport — кластерный ресурс с результатами проверки конфигурации кластерного объекта, например ClusterRoleBinding или CustomResourceDefinition.
Структура поля report такая же, как в ConfigAuditReport.
ClusterRbacAssessmentReport
ClusterRbacAssessmentReport — кластерный ресурс с результатами анализа RBAC объекта ClusterRole. Он содержит те же проверки и поля, что и RbacAssessmentReport.
Имена объектов формируются по шаблону clusterrole-<имя ClusterRole>.
Если имя ClusterRole нельзя использовать в имени объекта, вместо него подставляется хеш имени.
ClusterInfraAssessmentReport
ClusterInfraAssessmentReport — кластерный ресурс с результатами проверок инфраструктуры узла кластера.
Конфигурацию узла для проверок собирает задание node-collector.
Структура поля report такая же, как в InfraAssessmentReport.
ClusterSbomReport
ClusterSbomReport — кластерный ресурс с SBOM компонентов кластера Kubernetes, полученным при сканировании k8s-cluster.
Поле report.artifact.tag содержит версию Kubernetes кластера.
Оператор удаляет ClusterSbomReport, у которого report.artifact.tag отличается от текущей версии Kubernetes кластера, вместе с его ClusterVulnerabilityReport.
Структура поля report такая же, как в SbomReport.
ClusterComplianceReport
ClusterComplianceReport — это кластерный ресурс, содержащий сводный отчёт о соответствии кластера требованиям информационной безопасности.
Список поддерживаемых фреймворков соответствия приведён в разделе «Отчёты соответствия».
Структура отчёта:
spec.compliance.controls— описание проверяемых критериев;status— результаты выполнения проверок, соответствующих описанию вspec. Результаты формируются на основе отчётов, собранных от различных сканеров безопасности.
Ознакомиться с результатами отчёта можно в объекте ClusterComplianceReport и в Deckhouse Console (примеры — в разделе «Проверки CIS»).
Пример ClusterComplianceReport cis с двумя проверяемыми критериями и сводкой по проверкам:
apiVersion: trivy.deckhouse.io/v1alpha1
kind: ClusterComplianceReport
metadata:
name: cis
spec:
compliance:
controls:
- checks:
- id: AVD-KCV-0048
commands:
- id: CMD-0001
description: Ensure that the API server pod specification file has permissions
of 600 or more restrictive
id: 1.1.1
name: Ensure that the API server pod specification file permissions are set
to 600 or more restrictive
severity: HIGH
- checks:
- id: AVD-KCV-0049
commands:
- id: CMD-0002
description: Ensure that the API server pod specification file ownership is
set to root:root
id: 1.1.2
name: Ensure that the API server pod specification file ownership is set to
root:root
severity: HIGH
# Остальные проверяемые критерии опущены.
status:
summary:
failCount: 9
passCount: 107
updateTimestamp: "2025-07-29T06:00:00Z"ClusterSecurityScore
Ресурс предоставляется только модулем operator-trivy и не имеет аналога в проекте Aqua Security.
ClusterSecurityScore содержит оценку безопасности кластера и сигналы, по которым она рассчитана.
Модуль поддерживает один объект с именем cluster.
Доступ на чтение выдаётся ролью d8:manage:permission:module:operator-trivy:view.
Доступ к неймспейсу не даёт доступа на чтение ClusterSecurityScore.
Оценки отдельных неймспейсов публикуются в объектах SecurityScore.
Сокращённое имя: clustersecscore.
Пример — кластер, в котором ещё ничего не сканируется, поэтому составляющие по отчётам не измерены:
apiVersion: deckhouse.io/v1alpha1
kind: ClusterSecurityScore
metadata:
name: cluster
annotations:
security.deckhouse.io/score-updated-at: "2026-09-10T09:20:11Z"
score:
value: 27
formulaVersion: 3
namespaces:
total: 8
scanned: 0
namespaceScores:
total: 8
average: 22
components:
coverage:
value: 0
cve:
notMeasured: true
value: 0
misconfig:
value: 0.26
network:
value: 0.13
psa:
value: 0.53
raw: 0.53
secrets:
notMeasured: true
value: 0
compliance:
value: 1
compliance:
cis:
failCount: 0
passCount: 116
nsa:
failCount: 0
passCount: 25
topNamespaces:
cve: []
misconfig:
- namespace: my-app
critical: 0
high: 16
modules:
operatorTrivy:
enabled: true
denyVulnerableImages: false
complianceReportsEnabled: ["cis", "nsa"]
admissionPolicyEngine:
enabled: true
defaultPolicy: Baseline
enforcementAction: Deny
enforcementMultiplier: 1
runtimeAuditEngine:
enabled: falseОсновные поля:
score.value— оценка кластера от 0 до 100.score.namespaceScores— количество оценённых неймспейсов и средняя оценка по ним. Среднее несопоставимо с оценкой кластера: у кластера есть составляющаяcompliance, которой у неймспейса нет.score.topNamespaces— неймспейсы, требующие внимания в первую очередь. Поле доступно пользователям, которым не разрешено читать объекты SecurityScore по всему кластеру.score.modules.admissionPolicyEngine— единственное поле объекта, в котором публикуются режим применения стандартов безопасности подов и его коэффициент.score.compliance— количество пройденных и проваленных проверок по каждому развёрнутому отчёту соответствия, по имени отчёта.
Полный список составляющих, их веса и формула описаны в разделе «Оценка безопасности».
Deckhouse Platform устанавливает CRD, но не удаляет их при отключении модуля. Если вам больше не нужны созданные CRD, удалите их.