Zum Inhalt springen

Autorisierung

ToolMesh verwendet OpenFGA für feingranulare Autorisierung. Das Modell folgt einer User → Plan → Tool-Beziehungsstruktur.

ModusKonfigurationVerhalten
bypassOPENFGA_MODE=bypassKeine Autorisierungsprüfungen (Standard)
restrictOPENFGA_MODE=restrictOpenFGA wird bei jedem Tool-Call erzwungen

Starte mit bypass für die Entwicklung, wechsle zu restrict für die Produktion.

User --member_of--> Plan --can_execute--> Tool

Jeder Benutzer (per OAuth-Login oder API-Key) hat einen zugewiesenen Plan. Pläne gewähren Zugriff auf bestimmte Tools. Wenn ein Tool-Call eingeht, prüft ToolMesh:

Check(user, can_execute, tool)

Bei Ablehnung wird die Ausführung sofort mit einem Unauthorized-Fehler gestoppt.

DADL-Tools deklarieren eine access-Klassifizierung:

LevelBedeutung
readNur-Lese-Operationen
writeErstell-/Update-Operationen
adminAdministrative Operationen
dangerousDestruktive oder irreversible Operationen
customMit beliebigen String-Werten erweiterbar

Policy-Dateien bündeln diese Access-Levels in Rollen, und OpenFGA weist Benutzern Rollen zu.

Terminal-Fenster
OPENFGA_API_URL=http://openfga:8080 # OpenFGA-API-Endpunkt (Docker-Service-Name)
OPENFGA_STORE_ID=your-store-id # OpenFGA Store-ID
OPENFGA_MODE=restrict # Erzwingung aktivieren

Das Autorisierungsmodell und die Beziehungs-Tuples werden als editierbare Dateien in config/openfga/ definiert:

DateiZweck
model.fgaAutorisierungsmodell in FGA DSL
tuples.jsonUser/Plan/Tool-Beziehungen
setup.shShell-Script, das die fga-CLI zum Anwenden von Modell und Tuples nutzt

Das setup.sh-Script läuft auf dem Host und verwendet docker run mit dem openfga/cli-Image, um Modell und Tuples anzuwenden (das CLI-Image ist Distroless und hat keine Shell, daher kann es nicht als Docker-Compose-Service laufen):

Terminal-Fenster
# 1. Die OpenFGA-Services in docker-compose.yml auskommentieren (+ mysqldata Volume)
# 2. Alle Services starten
docker compose up -d
# 3. Den OpenFGA-Store bootstrappen
./config/openfga/setup.sh
# 4. Die OPENFGA_STORE_ID aus der Ausgabe in .env eintragen
# 5. OPENFGA_MODE=restrict in .env setzen
# 6. Neustarten
docker compose down && docker compose up -d

Die Standard-tuples.json demonstriert Autorisierung mit einem Deny-Fall:

  • Free Plan (alle Benutzer per Wildcard): kann echo_echo und echo_time ausführen, aber nicht echo_add
  • Pro Plan (company:acme Mitglieder): kann alle Tools ausführen

So lässt sich sofort verifizieren, dass die Autorisierung korrekt funktioniert — Free-Plan-Benutzer bekommen keinen Zugriff auf echo_add.

Autorisierungsentscheidungen können auch die CallerClass (trusted, standard, untrusted) berücksichtigen. Das ermöglicht Policies wie „untrusted Clients können nicht auf Admin-Tools zugreifen”, selbst wenn der Plan des Benutzers es normalerweise erlauben würde.