À propos du projet

# Nirmata Runtime pour Kyverno Nirmata Runtime est un outil de sécurité d'exécution natif Kubernetes qui utilise eBPF pour surveiller et appliquer le comportement des charges de travail au niveau du noyau. Il fonctionne comme un DaemonSet par nœud, attachant des programmes eBPF aux pods sélectionnés par une ressource personnalisée `RuntimePolicy` à portée de cluster. ## Capacités principales La `RuntimePolicy` régit cinq types de comportement de charge de travail : 1. **Ouvertures de fichiers** – quels fichiers un processus ouvre 2. **Exécution de binaires** – quels binaires il exécute 3. **Destinations réseau** – où il envoie du trafic 4. **Protocoles applicatifs** – quels protocoles il utilise 5. **Résolutions DNS** – quels noms de domaine il résout Les décisions sont prises dans le noyau, donc les opérations refusées ne se terminent jamais. Cela complète les contrôleurs d'admission comme Kyverno, qui valident les spécifications de pods avant le démarrage, en appliquant le comportement d'exécution réel. ## Fonctionnalités clés - **Modes d'application ou de surveillance** : Les politiques peuvent bloquer les opérations (`mode: enforce`) ou simplement signaler les constatations (`mode: monitor`), avec configuration par politique. - **Règles basées sur CEL** : Utilise le langage d'expressions communes (CEL) avec les bibliothèques de Kyverno, prenant en charge les valeurs littérales, les expressions et les variables réutilisables. - **Refus par défaut avec listes d'autorisation** : Définissez `deny.values: ["*"]` pour inverser un comportement en refus-tout-sauf-autorisé. - **Sortie native Kubernetes** : Les constatations sont écrites comme objets `Report` OpenReports dans le namespace du pod, avec des conditions de statut par nœud et des compteurs Prometheus. - **Portée par sélecteur** : Les politiques peuvent cibler les pods et les namespaces via des sélecteurs d'étiquettes, à l'échelle du cluster. - **Réévaluation périodique** : `evaluationInterval` réexécute les expressions de politique pour maintenir à jour les listes de refus externes. ## Démarrage rapide Installez via Helm : ```bash helm install kyverno-runtime oci://ghcr.io/nirmata/charts/kyverno-runtime --namespace kyverno-runtime --create-namespace ``` Exemple : Bloquer une adresse IP spécifique pour un 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 (pré-1.0) - Le trafic sortant est IPv4 uniquement ; les littéraux IPv6 ne sont pas pris en charge. - L'application des ouvertures de fichiers et des exécutions nécessite BPF-LSM actif dans le noyau (paramètre de démarrage `lsm=`). - Les observations réseau, protocole, ouverture et exécution sont interrogées à partir des compteurs eBPF, donc les constatations peuvent être retardées et porter des compteurs plutôt qu'un ordre. Les requêtes DNS sont diffusées en temps réel. - Les exceptions ne sont pas encore prises en charge. ## Documentation Comprend un guide de démarrage rapide, des concepts, l'installation, le support de plateformes (EKS, GKE, AKS, Bottlerocket), des exemples, la détection d'IA fantôme, le dépannage et des documents de référence pour la CRD RuntimePolicy, les expressions CEL et les métriques. ## Licence Licence Apache 2.0