Aller au contenu principal

Permissions IA (Scopes)

Modèle de scopes

ScopeOpérations autoriséesExemples
readGET — lecture seuleStatut VMs, lots élevage, relevés eau
writePOST — création de donnéesCréer une actualité, envoyer une alerte
actionPOST — déclencher des processusSync Proxmox, démarrer une VM
destructivePOST — irréversibleArrêter/supprimer une VM
bridge.readLecture outils externesChercher dans BookStack, lire GitLab
bridge.writeÉcriture outils externesCréer issue GitLab, poster page BookStack
adminToutes opérationsRéservé aux intégrations de confiance

Configuration par défaut

ToolScopeAutoriséApprobation requise
infrastructure.*readNon
infrastructure.syncactionNon
infrastructure.vms.startactionNon
infrastructure.vms.stopdestructiveOui
infrastructure.vms.shutdowndestructiveOui
elevage.*readNon
analyses.*readNon
alerts.storewriteOui
actualites.storewriteNon
bridge.bookstack.*bridge.readNon
bridge.gitlab.issues.createbridge.writeNon
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édiate
  • forbidden — refusé, message d'erreur
  • requires_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éScopesUsageRotation
API_KEY_READread, bridge.readOpenWebUI lectureMensuelle
API_KEY_WRITEread, write, actionOpenWebUI standardMensuelle
API_KEY_ADMINTous scopesIntégrations de confianceTrimestrielle

Protections anti-abus

RisqueProtection
Boucle infinie d'appelsthrottle:30,1 sur POST, throttle:120,1 sur GET
Injection de prompt dans paramsValidation stricte des paramètres (Form Requests)
Exfiltration de donnéesRéponses plafonnées (limit max par endpoint)
Actions en chaîne non superviséesrequires_approval sur les actions destructives
Réutilisation de token approbationToken à usage unique, invalidé après exécution