Доступно с ограничениями в редакциях: CSE Lite (1.73), CSE Pro (1.73)
Доступно без ограничений в редакциях: EE
Стадия жизненного цикла модуля: Experimental
У модуля есть требования для установки
Включение модуля
Для включения модуля воспользуйтесь веб-интерфейсом или следующей командой:
d8 platform module enable neuvectorАутентификация
Модуль NeuVector интегрирован с модулем user-authn Deckhouse Kubernetes Platform через Dex. Модуль user-authn обязателен — без него контроллер не запустится.
Встроенный по умолчанию пользователь NeuVector admin отключён на уровне контроллера (контроллер стартует с флагом -no_def_admin), поэтому стандартные upstream-учётные данные admin/admin использовать нельзя. Все сценарии входа идут через Dex:
- Группы пользователя из
DexProviderмодуляuser-authnпередаются в NeuVector через OIDC claimgroups. - Через
auth.allowedUserEmails/auth.allowedUserGroupsограничивается, кому разрешён вход через Dex. - Через
auth.defaultRoleиauth.groupRoleMappingназначаются роли NeuVector аутентифицированным пользователям.
Если локальный пользователь NeuVector нужен в качестве запасного входа, создайте его через UI или REST API NeuVector после первого OIDC-входа.
Доступ к REST API контроллера
Чтобы выставить REST API контроллера NeuVector (порт 10443) наружу, включите controller.apiIngress.enable. Ingress публикуется на https://neuvector-api.<publicDomainTemplate>/ и проксирует запросы в контроллер. Аутентификацию выполняет сам NeuVector: получите токен через POST /v1/auth и передавайте его в заголовке X-Auth-Token. При необходимости ограничьте доступ по IP через controller.apiIngress.whitelistSourceRanges.
Проброс событий безопасности из Deckhouse
NeuVector может отображать события безопасности платформы — срабатывания Falco, попытки входа в Dex, аудит KubeVirt и сбои проверки целостности containerd — в собственном UI рядом с событиями от enforcer-ов. События проходят через стандартный pipeline NeuVector (UI, syslog, webhook).
Внутри модуля всегда запускается sidecar se-bridge в каждом поде контроллера — он принимает события от LogShipper и пишет их во внутренний KV-стор NeuVector. Сама пересылка управляется параметром seBridgeEnabled в модуле loki. Пока параметр выключен, sidecar простаивает и ресурсов не потребляет.
Поддерживаемые источники: falco, dex, virtualization-audit, containerd-integrity. Каждый источник отображается в семантически подходящей вкладке NeuVector UI (Events / Security Events / Admission).
Интеграция безопасна для response rules: патч контроллера отключает действие Quarantine для событий с AgentID=se-bridge, поэтому wildcard-правила не сработают на внешние события.
Пересылка в syslog и webhook
События от se-bridge попадают в стандартные цепочки пересылки NeuVector.
- Syslog. В дефолтной конфигурации включены категории
Event,Runtime(сюда входятViolation,Threat,Incident) иAudit, то есть все три используемых канала форвардятся без дополнительных настроек. Если в UI NeuVector категории ограничены вручную, убедитесь что в списке включены те, куда попадают внешние события. - Webhook. Список категорий webhook по умолчанию пуст, поэтому внешние события в webhook не попадут, пока в конфигурации NeuVector явно не будут включены нужные категории (System Configuration → Webhooks). Это стандартное поведение NeuVector, не связанное с bridge.
Надёжность доставки
Доставка событий в NeuVector не даёт формальной гарантии at-least-once. Если контроллер NeuVector или сайдкар se-bridge становятся недоступны, LogShipper удерживает необработанные события в своём disk buffer на нодах. Буфер по умолчанию порядка 256 МБ; при устойчивом потоке в сотни событий в секунду длительный простой контроллера (десятки минут) может привести к тому, что буфер переполнится и часть событий будет потеряна для NeuVector.
События в Loki это не затрагивает — у каждого destination свой независимый буфер.
Чтобы снизить риск потерь, держите метрику vector_buffer_byte_size модуля log-shipper на дашборде и алертьте на устойчивое приближение к лимиту буфера. При необходимости увеличения буфера настройте параметр buffer в соответствующем ClusterLogDestination — см. документацию LogShipper.
Требования
К версии Deckhouse: 1.74 и выше.
Параметры
Версия схемы: 1
-
-
объектsettings.authПараметры, связанные с аутентификацией или авторизацией в приложении.
По умолчанию:
{}-
массив строкsettings.auth.allowedUserEmails
Список email-адресов пользователей, которым разрешена аутентификация через Dex.
Используется только при включённом модуле user-authn. Передаётся в поле
spec.allowedEmailsресурсаDexClient. -
массив строкsettings.auth.allowedUserGroups
Список групп пользователей, которым разрешена аутентификация через Dex.
Используется только при включённом модуле user-authn. Передаётся в поле
spec.allowedGroupsресурсаDexClient.Внимание! Эти же группы нужно добавить в соответствующее поле конфигурации
DexProvider. -
строкаsettings.auth.defaultRole
Роль NeuVector, которая назначается OIDC-пользователям, если ни одна запись
groupRoleMappingне подошла.Встроенные роли:
admin,reader,ciops,none,fedAdmin,fedReader. Также можно указать имя кастомной роли, определённой в NeuVector черезroleinitcfg.yaml.Особенности:
none— роль не выдаётся; неотмаппленный пользователь не сможет войти.fedAdmin/fedReaderимеют смысл только на master-кластере federation.ciopsпредназначена для CI/CD-ботов, которые публикуют результаты сканов; не для людей-администраторов.
По умолчанию:
adminПримеры:
defaultRole: admindefaultRole: readerdefaultRole: ciopsdefaultRole: nonedefaultRole: fedAdmindefaultRole: fedReader -
массив объектовsettings.auth.groupRoleMappingМаппинг групп IdP (из claim
groups) в роли NeuVector. Порядок имеет значение: применяется первое подходящее соответствие. Независим отauth.allowedUserGroups— тот ограничивает вход через Dex, аgroupRoleMappingотвечает за роль внутри NeuVector.По умолчанию:
[]Пример:
groupRoleMapping: - globalRole: admin group: neuvector-admins - globalRole: none group: developers roleDomains: admin: - dev-team-a - dev-team-b reader: - staging-
строкаsettings.auth.groupRoleMapping.globalRole
Глобальная роль NeuVector, назначаемая всем участникам группы
group.Встроенные роли:
admin,reader,ciops,none,fedAdmin,fedReader. Также допускается имя любой кастомной роли, определённой черезroleinitcfg.yaml.Можно оставить пустым (или указать
none), если нужны только namespace-scoped роли черезroleDomains.fedAdmin/fedReaderвалидны только на master-кластере federation.Примеры:
globalRole: adminglobalRole: readerglobalRole: ciopsglobalRole: noneglobalRole: fedAdminglobalRole: fedReader -
строкаsettings.auth.groupRoleMapping.groupИмя группы IdP, с которым сравнивается значение из claim
groups. -
объектsettings.auth.groupRoleMapping.roleDomainsКарта namespace-scoped ролей: имя роли NeuVector → список namespace’ов. Пример:
{admin: [staging], reader: [prod, default]}.
-
-
-
объектsettings.controller
Конфигурация компонента контроллера NeuVector.
Контроллер управляет политиками, организует применение правил и предоставляет REST API.
-
объектsettings.controller.apiIngress
Опциональный Ingress, выставляющий REST API контроллера NeuVector (порт 10443) наружу из кластера.
Ingress создаётся на отдельном hostname
neuvector-api.<publicDomainTemplate>и проксирует запросы в REST API контроллера. Аутентификация обеспечивается самим NeuVector (токен через/v1/auth).По умолчанию:
{}-
булевыйsettings.controller.apiIngress.enableВключить Ingress для REST API контроллера.
По умолчанию:
false -
массив строкsettings.controller.apiIngress.whitelistSourceRangesСписок CIDR, которым разрешён доступ к REST API контроллера.
Пример:
whitelistSourceRanges: - 1.1.1.1/32
-
-
объектsettings.controller.nodeSelector
Структура, аналогичная
spec.nodeSelectorпода Kubernetes.Если параметр не указан, будет определяться автоматически.
Пример:
disktype: ssd -
settings.controller.storageClass
Имя StorageClass, который будет использоваться для хранения данных модуля.
Если значение не указано, будет использоваться StorageClass, определённый в глобальном параметре storageClass.
Глобальный параметр
storageClassучитывается только при включённом модуле. Изменение глобального параметраstorageClassво время работы модуля не приведёт к переподключению дисков.Внимание. Указание значения, отличного от текущего (используемого в существующем PVC), приведёт к переподключению дисков и удалению всех данных.
Если указано
false, будет принудительно использоватьсяemptyDir.Примеры:
storageClass: falsestorageClass: nfs-storage-class -
массив объектовsettings.controller.tolerations
Структура, аналогичная
spec.tolerationsпода контроллера.Если ничего не указано или указано
false, то Deckhouse попытается вычислить значениеtolerationsавтоматически.-
строкаsettings.controller.tolerations.effect
-
строкаsettings.controller.tolerations.key
-
строкаsettings.controller.tolerations.operator
-
целочисленныйsettings.controller.tolerations.tolerationSeconds
-
строкаsettings.controller.tolerations.value
-
-
-