RBAC LLM — Contrôle d'accès aux modèles IA par rôle¶
AKKO associe les rôles de la plateforme (akko-admin, akko-engineer,
akko-analyst, akko-user, akko-viewer) aux access_groups LiteLLM et à
des quotas, centralisant la matrice d'accès IA et l'exposant via le cockpit
React sous Rôles LLM (route /x/llm-roles, fonctionnalité llm-governance).
Matrice par défaut¶
| Rôle | Chat (qwen2.5:3b) | Embed (nomic) | Code (qwen-coder) | GPU (vLLM) | Quota/jour | Rate limit |
|---|---|---|---|---|---|---|
akko-admin |
✅ | ✅ | ✅ | ✅ | illimité | illimité |
akko-engineer |
✅ | ✅ | ✅ | ❌ | 50 k tokens | 120 req/min |
akko-analyst |
✅ | ✅ | ❌ | ❌ | 20 k tokens | 60 req/min |
akko-user |
✅ | ❌ | ❌ | ❌ | 5 k tokens | 30 req/min |
akko-viewer |
❌ | ❌ | ❌ | ❌ | aucun | — |
Source de vérité : global.llmRbac dans helm/akko/values.yaml (paliers +
modèles), rendu dans le ConfigMap akko-llm-rbac du namespace akko et monté
par le backend du cockpit.
Architecture¶
Cockpit React (page Rôles LLM /x/llm-roles)
│ fetch, credentials: include
▼
Backend cockpit (routes_llm_governance.py)
GET /api/governance/llm-access/models → modèles + backend + drapeau served
GET /api/governance/llm-access/policies → matrice groupes × modèles
POST /api/governance/llm-access/policies → créer une politique de groupe
PUT /api/governance/llm-access/policies/{group} → mettre à jour
DELETE /api/governance/llm-access/policies/{group} → supprimer
POST /api/governance/llm-access/mint-key → clé virtuelle scopée
│
▼
Passerelle LiteLLM : applique les access_groups par modèle à l'appel
Le backend lit la matrice de base depuis le ConfigMap monté akko-llm-rbac
(rendu depuis global.llmRbac). Chaque lecture/écriture est gardée par le
ForwardAuth SSO de la plateforme et auditée.
Fichiers¶
| Fichier | Rôle |
|---|---|
helm/akko/values.yaml (global.llmRbac) |
Source de vérité (paliers + modèles) |
helm/akko/charts/akko-cockpit-backend/templates/deployment.yaml |
Monte le ConfigMap akko-llm-rbac sur /etc/akko/llm-rbac/rbac.json |
branding/cockpit-react/src/features/llm-governance/ |
UI matrice (page + i18n + gateway) |
branding/cockpit-react/src/features/llm-governance/data/httpGateway.ts |
Appelle /api/governance/llm-access/* |
Utilisation depuis du code¶
Depuis un notebook (jupyter-alice)¶
import os
import requests
resp = requests.post(
f"http://akko-akko-litellm:4000/chat/completions",
headers={"Authorization": f"Bearer {os.environ['LITELLM_USER_KEY']}"},
json={"model": "akko-chat", "messages": [{"role": "user", "content": "hi"}]}
)
Si le rôle user ne matche pas les access_groups du modèle, LiteLLM renvoie
403 Forbidden.
Depuis Trino (via fonctions ai_*())¶
-- Le middleware ai_service passe le rôle Keycloak du user Trino à LiteLLM
SELECT akko_ai_sentiment(comment) FROM reviews LIMIT 10;
Depuis Claude Desktop (via MCP)¶
Le serveur MCP Trino propage le rôle user via header HTTP. LiteLLM l'applique de la même manière.
Modifier la matrice¶
Via le cockpit (admin)¶
- Se connecter en tant qu'
alice_admin(akko-admin) - Ouvrir Rôles LLM (route
/x/llm-roles) - La matrice complète s'affiche : modèles × groupes, avec quotas et rate limits
- Créer, mettre à jour ou supprimer une politique de groupe en ligne ; les
changements sont écrits par le backend
(
POST/PUT/DELETE /api/governance/llm-access/policies) et appliqués à la passerelle LiteLLM
Via GitOps (valeurs de base)¶
Éditer global.llmRbac dans helm/akko/values.yaml (ou un overlay) : commit,
push, déploiement. Cela fixe la matrice de base livrée avec la plateforme ; les
éditions par groupe faites dans le cockpit se superposent et sont auditées.
Ajouter un nouveau modèle¶
- Éditer la liste de modèles LiteLLM (
akko-litellm.config.model_listdans votre overlay de values) - Ajouter le modèle à la section
modelsdeglobal.llmRbacavec sesaccess_groupspar défaut - Commit + push : déploiement
- LiteLLM récupère le nouveau modèle automatiquement ; la matrice affiche la nouvelle colonne
Auditer l'usage LLM¶
Chaque appel LLM est loggé dans logs layer par le middleware AI Service :
{service="ai-service"} |= "llm_call" | json | line_format
"{{.user}} {{.model}} {{.status}} tokens={{.tokens}}"
Dashboard Dashboards LLM Usage by Role (Sprint 15.7) affichera : - Tokens/heure par rôle - Top 10 users par volume - Taux d'erreur par modèle - Estimation coût (quand modèles commerciaux ajoutés)
Verrouillage d'urgence¶
Pour bloquer immédiatement tout accès LLM à un groupe, ouvrir Rôles LLM
(/x/llm-roles) et vider la politique de modèles de ce groupe, ou faire un
DELETE de sa politique via le backend. Le changement atteint la passerelle
LiteLLM sans toucher Keycloak ni redéployer. Persistez-le ensuite dans
global.llmRbac pour qu'il survive à un redéploiement.
Voir aussi¶
- Roadmap Cockpit v2 : repo privé
akko-technical-map/roadmap/master-roadmap-2026-04-14.md(section Sprint 16) - Modèle RBAC (5 rôles)
- Config LiteLLM