RAG Local : Interroger ses logs Kubernetes avec l'IA


L’analyse de logs de sécurité dans un cluster Kubernetes est une tâche ardue. Des outils eBPF comme Falco ou Tetragon génèrent d’énormes volumes d’alertes JSON. Historiquement, les ingénieurs SecOps s’appuyaient sur des SIEM (Elastic, Splunk) et des requêtes complexes pour trouver l’aiguille dans la botte de foin.

Aujourd’hui, l’approche la plus efficace consiste à associer vos agents de sécurité (eBPF) avec un RAG (Retrieval-Augmented Generation) local. L’objectif : discuter en langage naturel avec l’historique de vos alertes, sans jamais envoyer de données sensibles vers une API Cloud publique.

L’Architecture de la Solution

L’association d’outils est la clé de cette architecture 100% On-Premise :

  1. Génération des alertes : Tetragon (Cilium) ou Falco capte les anomalies Kernel via eBPF.
  2. Transport et Transformation : Fluent Bit collecte les logs JSON et les pousse vers une base de données vectorielle.
  3. Base Vectorielle (Vector DB) : ChromaDB stocke les alertes après les avoir transformées en “Embeddings” grâce à un modèle local.
  4. Interface et Raisonnement : LibreChat sert d’interface utilisateur, connecté à Ollama (faisant tourner Llama 3).

Le Workflow d’Interrogation

Lorsque vous demandez à votre RAG : “Fais-moi un résumé des accès non autorisés au fichier shadow cette semaine, et identifie les namespaces Kubernetes impactés.”

  1. LibreChat envoie la question à la base vectorielle.
  2. ChromaDB effectue une recherche sémantique de similarité et extrait les 20 logs Falco les plus pertinents.
  3. Ces logs bruts sont injectés dans le “contexte” du prompt envoyé à Llama 3 (via Ollama).
  4. Le modèle IA synthétise l’information et vous répond clairement en citant les noms des pods et les horodatages exacts.

Exemple de configuration (Fluent Bit vers ChromaDB)

Pour éviter de coder l’ingestion à la main, des scripts Python intermédiaires sont souvent utilisés. Voici l’idée d’un pipeline Python d’ingestion (simplifié) pour traiter les logs Falco.

(Le code complet de cet exemple est disponible sur notre dépôt de simulation public)

from langchain_community.vectorstores import Chroma
from langchain_huggingface import HuggingFaceEmbeddings
import json

# Configuration de la base Chroma locale
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
vector_db = Chroma(persist_directory="./falco_db", embedding_function=embeddings)

def ingest_falco_alert(json_log_line):
    log_data = json.loads(json_log_line)
    texte = f"Alerte Falco: {log_data.get('output')} (Règle: {log_data.get('rule')})"
    vector_db.add_texts(texts=[texte])

Conclusion

L’association de Falco/Tetragon (détection de menaces temps réel), de ChromaDB (mémoire sémantique) et de LibreChat/Ollama (raisonnement et interface) constitue une solution technique élégante pour l’analyse de logs. Cette architecture permet aux équipes SecOps d’analyser des incidents complexes en langage naturel tout en respectant une OPSEC stricte et en conservant l’intégralité des données d’infrastructure à domicile.


Sources

  1. ChromaDB (GitHub)
  2. Ollama (GitHub)
  3. LibreChat (GitHub)

Si vous voulez plus d’information sur l’infrastructure vous pouvez voir l’ repo à ce sujet : https://github.com/ravindrajob/InfraAtHome