Permissions IA (Scopes)
Modèle de scopes
| Scope | Opérations autorisées | Exemples |
|---|---|---|
read | GET — lecture seule | Statut VMs, lots élevage, relevés eau |
write | POST — création de données | Créer une actualité, envoyer une alerte |
action | POST — déclencher des processus | Sync Proxmox, démarrer une VM |
destructive | POST — irréversible | Arrêter/supprimer une VM |
bridge.read | Lecture outils externes | Chercher dans BookStack, lire GitLab |
bridge.write | Écriture outils externes | Créer issue GitLab, poster page BookStack |
admin | Toutes opérations | Réservé aux intégrations de confiance |
Configuration par défaut
| Tool | Scope | Autorisé | Approbation requise |
|---|---|---|---|
infrastructure.* | read | ✅ | Non |
infrastructure.sync | action | ✅ | Non |
infrastructure.vms.start | action | ✅ | Non |
infrastructure.vms.stop | destructive | ✅ | Oui |
infrastructure.vms.shutdown | destructive | ✅ | Oui |
elevage.* | read | ✅ | Non |
analyses.* | read | ✅ | Non |
alerts.store | write | ✅ | Oui |
actualites.store | write | ✅ | Non |
bridge.bookstack.* | bridge.read | ✅ | Non |
bridge.gitlab.issues.create | bridge.write | ✅ | Non |
bridge.passbolt.* | bridge.read | ✅ (noms seulement) | Non |
ThaliaPermissionService
// Vérification basique
$permission->can('write', 'infrastructure.vms.action'); // → bool
// Avec contexte complet
$permission->check(
scope: 'destructive',
tool: 'infrastructure',
action: 'vms.stop',
context: ['vm_id' => 42, 'vm_name' => 'prd-db-01']
); // → PermissionResult (allowed|forbidden|requires_approval)
Résultats possibles :
allowed— exécution immédiateforbidden— refusé, message d'erreurrequires_approval— déclenche le workflow de validation humaine
Clés API par scope (v2)
API_KEY_READ=clé_lecture_seulement
API_KEY_WRITE=clé_lecture_écriture
API_KEY_ADMIN=clé_toutes_opérations
| Clé | Scopes | Usage | Rotation |
|---|---|---|---|
API_KEY_READ | read, bridge.read | OpenWebUI lecture | Mensuelle |
API_KEY_WRITE | read, write, action | OpenWebUI standard | Mensuelle |
API_KEY_ADMIN | Tous scopes | Intégrations de confiance | Trimestrielle |
Protections anti-abus
| Risque | Protection |
|---|---|
| Boucle infinie d'appels | throttle:30,1 sur POST, throttle:120,1 sur GET |
| Injection de prompt dans params | Validation stricte des paramètres (Form Requests) |
| Exfiltration de données | Réponses plafonnées (limit max par endpoint) |
| Actions en chaîne non supervisées | requires_approval sur les actions destructives |
| Réutilisation de token approbation | Token à usage unique, invalidé après exécution |