Доступно с ограничениями в редакциях 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 claim groups.
  • Через 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. В разделе «Система» → «Управление системой» → «Deckhouse» → «Модули», откройте модуль neuvector, включите (или выключите) переключатель «Модуль включен». Сохраните изменения.

    Пример:

    Интерфейс включения и выключения модуля
  • С помощью Deckhouse CLI (d8).

    Используйте команду d8 system module enable для включения модуля, или d8 system module disable для выключения модуля (требуется Deckhouse CLI (d8), настроенный на работу с кластером).

    Пример включения модуля neuvector:

    d8 system module enable neuvector
  • С помощью ModuleConfig neuvector.

    Установите spec.enabled в true или false в ModuleConfig neuvector (создайте его, при необходимости).

    Пример манифеста для включения модуля neuvector:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: neuvector
    spec:
      enabled: true

Как настроить модуль…

Настроить модуль можно одним из следующих способов:

  • С помощью веб-интерфейса Deckhouse.

    В разделе «Система» → «Управление системой» → «Deckhouse» → «Модули», откройте модуль neuvector, включите переключатель «Дополнительные настройки». Заполните необходимые поля формы на вкладке «Конфигурация», или укажите настройки модуля в формате YAML на вкладке «YAML», не включая секцию settings. Сохраните изменения.

    Пример:

    Интерфейс настройки модуля

    Вы также можете отредактировать объект ModuleConfig neuvector на вкладке «YAML» в окне настроек модуля («Система» → «Управление системой» → «Deckhouse» → «Модули», откройте модуль neuvector), указав версию схемы в параметре spec.version и необходимые параметры модуля в секции spec.settings.

  • С помощью Deckhouse CLI (d8) (требуется Deckhouse CLI (d8), настроенный на работу с кластером).

    Отредактируйте существующий ModuleConfig neuvector (подробнее о настройке Deckhouse читайте в документации), выполнив следующую команду:

    d8 k edit mc neuvector

    Внесите необходимые изменения в секцию spec.settings. При необходимости укажите версию схемы в параметре spec.version. Сохраните изменения.

    Вы также можете создать файл манифеста ModuleConfig neuvector, используя пример ниже. Заполните секцию spec.settings необходимыми параметрами модуля. При необходимости укажите версию схемы в параметре spec.version.

    Примените манифест с помощью следующей команды (укажите имя файла манифеста):

    d8 k apply -f <FILENAME>

    Пример файла манифеста ModuleConfig neuvector:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: neuvector
    spec:
      version: 1
      enabled: true
      settings: # Параметры модуля из раздела "Параметры" ниже.

Как сменить канал обновлений модуля…

Для смены канала обновлений модуля воспользуйтесь инструкцией.

Требования

К версии Deckhouse: 1.74 и выше.

Параметры

Версия схемы: 1

  • settings
    объект
    • 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: admin
        
        defaultRole: reader
        
        defaultRole: ciops
        
        defaultRole: none
        
        defaultRole: fedAdmin
        
        defaultRole: 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: admin
          
          globalRole: reader
          
          globalRole: ciops
          
          globalRole: none
          
          globalRole: fedAdmin
          
          globalRole: 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: false
        
        storageClass: 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
          строка