Об этом проекте

# Nirmata Runtime для Kyverno Nirmata Runtime — это инструмент безопасности на уровне ядра Kubernetes, который использует eBPF для мониторинга и принудительного применения поведения рабочих нагрузок на уровне ядра. Он работает как DaemonSet на каждом узле, подключая eBPF-программы к подам, выбранным кластерным пользовательским ресурсом `RuntimePolicy`. ## Основные возможности `RuntimePolicy` управляет пятью типами поведения рабочих нагрузок: 1. **Открытие файлов** — какие файлы открывает процесс 2. **Выполнение бинарных файлов** — какие бинарники он выполняет 3. **Сетевые назначения** — куда отправляется трафик 4. **Прикладные протоколы** — какие протоколы используются 5. **DNS-резолвинг** — какие доменные имена разрешаются Решения принимаются в ядре, поэтому запрещенные операции никогда не завершаются. Это дополняет контроллеры допуска, такие как Kyverno, которые проверяют спецификации подов до запуска, обеспечивая фактическое поведение во время выполнения. ## Ключевые особенности - **Режимы принуждения или мониторинга**: Политики могут блокировать операции (`mode: enforce`) или просто сообщать о находках (`mode: monitor`), с настройкой на уровне политики. - **Правила на основе CEL**: Использует Common Expressions Language (CEL) с библиотеками Kyverno, поддерживая литеральные значения, выражения и переиспользуемые переменные. - **Запрет по умолчанию с разрешающими списками**: Установите `deny.values: ["*"]`, чтобы переключить поведение на запрет-все-кроме-разрешенного. - **Нативный вывод в Kubernetes**: Результаты записываются как объекты `Report` OpenReports в пространстве имен пода, с условиями статуса на узле и счетчиками Prometheus. - **Ограничение по селекторам**: Политики могут нацеливаться на поды и пространства имен через селекторы меток, в масштабе кластера. - **Периодическая повторная оценка**: `evaluationInterval` повторно запускает выражения политик, чтобы поддерживать актуальность внешних списков запрещенных. ## Быстрый старт Установка через Helm: ```bash helm install kyverno-runtime oci://ghcr.io/nirmata/charts/kyverno-runtime --namespace kyverno-runtime --create-namespace ``` Пример: блокировка конкретного IP-адреса для пода: ```yaml apiVersion: runtime.nirmata.io/v1alpha1 kind: RuntimePolicy metadata: name: block-address-sample spec: mode: enforce podSelector: matchLabels: app: egress-client behaviors: - network: deny: values: - "8.8.8.8" ``` ## Ограничения (до версии 1.0) - Исходящий трафик поддерживает только IPv4; литералы IPv6 не поддерживаются. - Принудительное применение открытия файлов и выполнения требует активного BPF-LSM в ядре (параметр загрузки `lsm=`). - Наблюдения за сетью, протоколами, открытием и выполнением опрашиваются из счетчиков eBPF, поэтому результаты могут задерживаться и содержать счетчики, а не порядок. DNS-запросы передаются в реальном времени. - Исключения пока не поддерживаются. ## Документация Включает краткое руководство, концепции, установку, поддержку платформ (EKS, GKE, AKS, Bottlerocket), примеры, обнаружение скрытого ИИ, устранение неполадок и справочную документацию для CRD RuntimePolicy, CEL-выражений и метрик. ## Лицензия Apache License 2.0