About this project

# Nirmata Runtime For Kyverno Nirmata Runtime is a Kubernetes-native runtime security tool that uses eBPF to monitor and enforce workload behavior at the kernel level. It operates as a per-node DaemonSet, attaching eBPF programs to pods selected by a cluster-scoped `RuntimePolicy` custom resource. ## Core Capabilities The `RuntimePolicy` governs five types of workload behavior: 1. **File opens** – which files a process opens 2. **Binary execution** – which binaries it executes 3. **Network destinations** – where it sends traffic 4. **Application protocols** – what protocols it speaks 5. **DNS resolutions** – which domain names it resolves Decisions are made in the kernel, so denied operations never complete. This complements admission controllers like Kyverno, which validate pod specs before startup, by enforcing actual runtime behavior. ## Key Features - **Enforce or monitor modes**: Policies can block operations (`mode: enforce`) or simply report findings (`mode: monitor`), with per-policy configuration. - **CEL-powered rules**: Uses Common Expressions Language (CEL) with Kyverno's libraries, supporting literal values, expressions, and reusable variables. - **Default deny with allow-lists**: Set `deny.values: ["*"]` to flip a behavior to deny-all-except-allowed. - **Kubernetes-native output**: Findings are written as OpenReports `Report` objects in the pod's namespace, with per-node status conditions and Prometheus counters. - **Selector scoping**: Policies can target pods and namespaces via label selectors, cluster-wide. - **Periodic re-evaluation**: `evaluationInterval` re-runs policy expressions to keep externally sourced deny lists current. ## Quick Start Install via Helm: ```bash helm install kyverno-runtime oci://ghcr.io/nirmata/charts/kyverno-runtime --namespace kyverno-runtime --create-namespace ``` Example: Block a specific IP address for a pod: ```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" ``` ## Limitations (Pre-1.0) - Egress is IPv4-only; IPv6 literals not supported. - File open and exec enforcement require BPF-LSM active in the kernel (`lsm=` boot parameter). - Network, protocol, open, and exec observations are polled from eBPF counters, so findings may lag and carry counts rather than ordering. DNS questions stream in real-time. - Exceptions not yet supported. ## Documentation Includes quickstart, concepts, installation, platform support (EKS, GKE, AKS, Bottlerocket), examples, shadow AI detection, troubleshooting, and reference docs for the RuntimePolicy CRD, CEL expressions, and metrics. ## License Apache License 2.0