Стадия жизненного цикла модуля: General Availability
У модуля есть требования для установки
В кластере DKP сканирование на уязвимости выполняется с помощью оператора Trivy Operator. Он автоматически генерирует Software Bill Of Materials (SBOM) для всех рабочих нагрузок и запускает сканирование для заданных объектов без ручного вмешательства.
Поддерживаемые типы объектов для сканирования
Сканирование поддерживается для следующих типов объектов:
- образы контейнеров, размещённые в хранилище (registry);
- файловые системы узлов кластера.
Архитектура анализа
Независимо от типа объекта сканирование выполняется в три этапа:
| Этап | Описание |
|---|---|
| 1. Сканирование | Сканер обходит целевой объект и применяет анализаторы для извлечения использованных пакетов, манифестов зависимостей и конфигурационных файлов, формируя SBOM. |
| 2. Фильтрация | Собранные данные сопоставляются с базами данных уязвимостей и политиками. Применяются фильтры по серьёзности, статусу исправления и типу пакетных зависимостей. |
| 3. Отчёт | Результаты сохраняются в виде кастомного ресурса VulnerabilityReport и публикуются в кластере в неймспейсе целевого объекта. |
Механизм сканирования уязвимостей
Сканер уязвимостей является центральным компонентом Trivy: он выявляет известные уязвимости на основе специализированных баз данных. Модуль operator-trivy сканирует пакеты и компоненты операционной системы (исполняемые файлы, библиотеки) и зависимости приложений (библиотеки, модули и прочие зависимости).
Оператор автоматически запускает сканирование при обнаружении новых или изменённых рабочих нагрузок в неймспейсах, для которых включено сканирование.
Пакеты операционной системы
Сканер автоматически определяет дистрибутив ОС и применяет соответствующие данные из баз уязвимостей, предоставляемых DKP.
Используются следующие источники данных:
- Банк данных угроз безопасности информации ФСТЭК России (БДУ ФСТЭК);
- AlmaLinux Errata;
- Alpine SecDB;
- ALTRepo Errata OVAL;
- Amazon Linux Security Advisories;
- Arch Linux Security Tracker;
- Debian Security Tracker;
- GitHub Security Advisory Database;
- National Vulnerability Database (NVD);
- Oracle OVAL;
- Photon Security Advisory;
- Red Hat OVAL;
- RED SOFT OVAL;
- Rocky Linux UpdateInfo;
- SUSE Security CVRF;
- Ubuntu CVE Tracker;
- Wolfi SecDB.
Зависимости приложений
Сканер обнаруживает и анализирует файлы манифестов пакетных менеджеров и lock-файлы более чем двадцати экосистем. Для каждого языка используются специализированные базы уязвимостей, преимущественно основанные на GitLab Advisory Database и GitHub Advisory Database.
| Язык / экосистема | Анализируемые файлы |
|---|---|
| Node.js (npm, Yarn) | package.json, package-lock.json, yarn.lock |
| Python (pip, Poetry, Pipenv) | requirements.txt, Pipfile.lock, poetry.lock |
| Java (Maven, Gradle) | pom.xml, build.gradle, *.jar, *.war |
| Go | go.mod, go.sum, бинарные файлы Go |
| .NET (NuGet) | *.csproj, packages.lock.json |
| Ruby (Bundler) | Gemfile.lock |
| PHP (Composer) | composer.lock |
| Rust (Cargo) | Cargo.lock |
| Swift (SwiftPM) | Package.resolved |
| Dart (pub) | pubspec.lock |
Результаты сканирования и ресурс VulnerabilityReport
Результаты сканирования уязвимостей сохраняются в кластере в виде кастомного ресурса VulnerabilityReport группы aquasecurity.github.io. Каждый отчёт создаётся в неймспейсе рабочей нагрузки, именуется по схеме <kind>-<workload-name>-<container-name> и содержит перечень обнаруженных уязвимостей с указанием серьёзности, статуса исправления, затронутого пакета и ссылок на источники.
Отчёт привязывается к родительскому ресурсу через поле ownerReferences. При обновлении образа или удалении рабочей нагрузки устаревший VulnerabilityReport удаляется механизмом сборки мусора Kubernetes и при необходимости пересоздаётся.
Генерация и обработка SBOM
Сгенерированный SBOM сохраняется в кластере в виде CRD SbomReport группы aquasecurity.github.io. Каждый отчёт создаётся в неймспейсе рабочей нагрузки и содержит:
- метаданные контейнерного образа (репозиторий, тег, дайджест);
- компонентный состав в формате CycloneDX (пакеты ОС и зависимости приложений с идентификаторами PURL, лицензиями и информацией о поставщике);
- граф зависимостей между компонентами;
- сводку по количеству компонентов и зависимостей.
Оператор отслеживает изменения ресурсов кластера. При создании или изменении рабочей нагрузки автоматически запускается задание сканирования, по результатам которого одновременно формируются SbomReport и VulnerabilityReport. Оба отчёта именуются по схеме <kind>-<workload-name>-<container-name> и привязываются к родительскому ресурсу через поле ownerReferences. При удалении рабочей нагрузки отчёты удаляются автоматически через механизм сборки мусора Kubernetes.
SbomReport и VulnerabilityReport дополняют друг друга: VulnerabilityReport содержит выявленные уязвимости, а SbomReport фиксирует полный состав компонентов образа.
Запрет запуска уязвимых контейнеров
Для работы механизма должен быть включён модуль admission-policy-engine (включён по умолчанию в наборах модулей Default и Managed).
Модуль реализует принудительный контроль над запуском контейнеров с уязвимыми образами на уровне admission-контроля Kubernetes. Механизм основан на связке OPA Gatekeeper (модуль admission-policy-engine) и Trivy: Trivy предоставляет результаты сканирования, а Gatekeeper принимает решение о допуске ресурса.
Ограничение применяется к ресурсам Pod, Deployment, StatefulSet и DaemonSet в неймспейсах с лейблом security.deckhouse.io/trivy-provider: "".
Политика применяется только в момент admission при создании или обновлении ресурса. Режим аудита Gatekeeper данное ограничение не оценивает.
Конфигурация
Управление блокировкой осуществляется через параметр denyVulnerableImages в настройках модуля:
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
enabled |
false |
Включить запрет на использование уязвимых образов в помеченных неймспейсах. |
allowedSeverityLevels |
— | Образы, содержащие уязвимости только указанных уровней серьёзности, не блокируются. Допустимые значения: UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL. |
Пример конфигурации
denyVulnerableImages:
enabled: true
allowedSeverityLevels:
- UNKNOWN
- LOW
- MEDIUMВ приведённом примере блокируются образы, содержащие уязвимости уровня HIGH или CRITICAL. Образы с уязвимостями уровней UNKNOWN, LOW, MEDIUM допускаются к запуску.
Отчёты соответствия (compliance)
Модуль создаёт ресурсы ClusterComplianceReport для выбранных фреймворков соответствия. Каждый отчёт обновляется каждые 6 часов и сопоставляет контролы фреймворка с проверками конфигурации и нагрузок, выполняемыми Trivy.
Набор развёртываемых отчётов задаётся параметром complianceReports.enabled.
| Фреймворк | По умолчанию | Описание |
|---|---|---|
CIS |
включён | CIS Kubernetes Benchmark v1.12. |
PCI-DSS |
включён | PCI DSS v4.0 — ключевые контролы для защиты данных платёжных карт. |
NSA |
включён | NSA-CISA Kubernetes Hardening Guidance v1.0. |
GDPR |
отключён | Общий регламент по защите данных — ключевые статьи (ст. 5, 25, 32). |
HIPAA |
отключён | HIPAA Security Rule — ключевые технические меры защиты (§164.308 и §164.312). |
FSTEC-21 |
включён | Приказ ФСТЭК России № 21 — защита персональных данных в ИСПДн. |
FZ-187 |
включён | Приказ ФСТЭК России № 239 — значимые объекты КИИ (187-ФЗ). |
Пример конфигурации
complianceReports:
enabled:
- CIS
- NSA
- FSTEC-21
- FZ-187В приведённом примере развёртываются только четыре отчёта. Для просмотра отчёта используйте:
d8 k get clustercompliancereports
d8 k describe clustercompliancereport fstec-21Что попадает в отчёты соответствия
По умолчанию отчёты соответствия сфокусированы на ваших нагрузках — на том, что владелец кластера может реально исправить. Модуль автоматически исключает из compliance:
- ресурсы, управляемые Deckhouse и его модулями;
- системные компоненты Kubernetes (встроенные RBAC, дефолтные cluster-scoped объекты и т. п.).
Сам control plane при этом продолжает проверяться по соответствующим инфраструктурным контролам (например, раздел 1.x CIS Kubernetes Benchmark для параметров kube-apiserver, etcd, kube-scheduler) — отсекаются только общие workload-проверки для платформенных подов.
Сканирование уязвимостей работает независимо от этих фильтров и продолжает сообщать о CVE и секретах для всех сканируемых образов, включая платформенные.
Чтобы исключить отдельный неймспейс из compliance — например, экспериментальный или временный — повесьте на него метку:
d8 k label namespace my-namespace security.deckhouse.io/skip-compliance=trueУправление базами данных
Модуль автоматически загружает, поддерживает и кеширует необходимые базы данных при выполнении сканирования. Актуальность данных обеспечивается регулярными автообновлениями.
| Образ контейнера базы данных | Назначение |
|---|---|
<deckhouse-repo>/security/trivy-db:2 |
Основная база данных уязвимостей — агрегирует данные из NVD, Red Hat, Alpine, Ubuntu, Debian, GitLab Advisory DB, GitHub Advisory DB и других источников. |
<deckhouse-repo>/security/trivy-java-db:1 |
Специализированная база для Java-артефактов (JAR, WAR, EAR) с привязкой к хешам файлов. |
<deckhouse-repo>/security/trivy-checks:0 |
Набор политик (Rego) для проверки ошибок конфигурации в IaC. |
<deckhouse-repo>/security/trivy-bdu:1 |
Связка идентификаторов уязвимостей сторонних провайдеров баз уязвимостей с идентификаторами БДУ ФСТЭК. |
В изолированных окружениях поддерживается загрузка баз данных и их локальное использование без доступа к интернету с помощью CLI-утилиты d8 (через команду d8 mirror).