AI-Agent-Berechtigungsmodell: Benutzeridentität, Tool-Rechte, Audit-Logs und Secret-Isolation

"MCP Security Best Practices beschreibt token passthrough als Anti-Pattern und empfiehlt least-privilege scopes, server-side authorization und auditierbare elevation flows."
Ein Team gibt demselben Agenten denselben Admin-Token, weil „es ja nur ein internes System ist“. Dann stellt Benutzer A eine Abfrage, und der Agent liest mit Admin-Identität den CRM-Datensatz von Benutzer B. Ein Agent mit kaputten Berechtigungen ist gefährlicher als gar kein Agent.
Das ist kein hypothetischer Sonderfall. MCP Security Best Practices markiert token passthrough ausdrücklich als Anti-Pattern: Es umgeht Sicherheitskontrollen, zerstört die audit trail und verletzt trust boundaries. Das OWASP AI Agent Security Cheat Sheet zählt „tool abuse and privilege escalation“ ebenfalls zu den Kernrisiken.
Die Frage lässt sich auf drei Punkte reduzieren: Wen repräsentiert der Agent, wodurch darf er aufrufen, und worauf darf er zugreifen? Im Folgenden steht das vollständige Engineering-Modell: Identity-Mapping-Tabelle, Tool-Berechtigungsfelder, Kernschritte für den Secret Vault, Audit-Log-Schema mit Maskierungsregeln, Entscheidungstabelle, Troubleshooting-Checkliste und Implementierungsschritte.
Identity Mapping: Wen repräsentiert der Agent?
Wenn ein Agent ein Tool aufruft, müssen Logs und Berechtigungssystem zuerst eine Frage beantworten: Wer hat den Aufruf gestartet, und in wessen Namen wird gehandelt? Diese beiden Entitäten können identisch sein, müssen es aber nicht. Wenn Sie sie vermischen, entstehen Berechtigungsfehler und unbrauchbare Audit-Spuren.
Referenztabelle für Identitätstypen
| Typ | actor | subject | Einsatzszenario | Berechtigungsgrenze |
|---|---|---|---|---|
| user identity | Benutzer A | Benutzer A | Direkte Benutzerinteraktion | Erbt die Benutzerberechtigungen |
| service account | system_bot | null | Hintergrundjobs, geplante Tasks | Systemberechtigung, unabhängig vom Benutzer |
| delegated token | workflow_123 | Benutzer A | Vom Benutzer autorisierter Automatisierungsworkflow | Workflow-Scope, begrenzt durch die Benutzerfreigabe |
| tenant context | agent_456 | tenant_B | Multi-Tenant-Systeme | Tenant-Isolation, kein Zugriff über Tenant-Grenzen hinweg |
Felddefinitionen: actor ist die Entität, die den Aufruf startet, etwa Benutzer, Agent, Workflow oder System. Das Log speichert die actor ID. subject ist die Entität, die vertreten wird, also ein Benutzer oder null. Bei direkter Benutzerinteraktion gilt actor=subject. Wenn ein Systemaccount einen Hintergrundjob ausführt, gilt subject=null. delegatedBy markiert die Quelle der Delegation und zeigt, welcher Benutzer diesen Workflow autorisiert hat. tenantId identifiziert den Tenant und dient der Datenisolation in Multi-Tenant-Systemen.
Nach der MCP Authorization Specification müssen MCP servers prüfen, ob ein access token für sie als intended audience ausgestellt wurde. Das audience-Feld des Tokens muss auf die Ressourcenkennung des MCP servers zeigen. Tokens sollten nicht im URI query string stehen, weil URIs in Logs, Browser-Verlauf und Proxy-Caches auftauchen können.
Das OWASP Access Control Cheat Sheet betont deny by default, least privilege und Berechtigungsprüfungen bei jeder Anfrage. Identity Mapping ist der erste Schritt dieser Prüfung: actor, subject und tenantId bestimmen die anschließende Autorisierungsentscheidung.
Tool-Berechtigungen: Was darf der Agent aufrufen?
Tool-Registrierung besteht nicht nur aus name, description und input_schema. Die Tool-Referenz des OpenAI Agents SDK enthält Felder für Berechtigungen und Ausführungskontrolle.
Entscheidungstabelle für Tool-Berechtigungen
| Berechtigungskontrolle | Einsatzszenario | Umsetzung | Risiko |
|---|---|---|---|
| per-tool permission | Jedes Tool wird separat autorisiert | Beim Registrieren des Tools permission_level setzen, etwa read/write/admin | Die Konfiguration wird komplexer; eine Berechtigungsmatrix muss gepflegt werden |
| scope minimization | Schrittweise Minimalberechtigung | Anfangs nur risikoarme Scopes, höhere Rechte über scope challenge erweitern | Scope-Verwaltung kostet Aufwand und muss dynamisch angepasst werden |
| whitelist | Tool-Allowlist | Nur bestimmte Tool-Kombinationen erlauben, etwa read_customer + summarize | Allowlist-Pflege kostet Zeit und kann Flexibilität einschränken |
| approval | Menschliche Freigabe | Tools mit needs_approval=true pausieren vor der Ausführung und warten auf Freigabe | Freigaben verzögern Abläufe und wirken sich auf die Nutzererfahrung aus |
Zu den OpenAI Agents SDK Tool-Feldern gehört is_enabled für die Laufzeitsteuerung. Damit lässt sich ein Tool anhand von Benutzerrolle, tenant oder workflow context dynamisch deaktivieren. needs_approval markiert Tools, die eine menschliche Freigabe benötigen. Nach der Freigabe laufen weiterhin tool_input_guardrails. tool_input_guardrails prüfen Eingaben, etwa PII-Erkennung oder Parametergrenzen. tool_output_guardrails prüfen Ausgaben, etwa über Content-Filter.
MCP Security Best Practices empfiehlt bei scope minimization schrittweise Minimalberechtigung: Der initiale Scope sollte nur risikoarme Discovery- oder Leseoperationen enthalten, etwa read:metadata und list:resources. Höhere Rechte werden über präzise scope challenges ergänzt. Wildcard- und full-access scopes sollten vermieden werden.
Das OWASP AI Agent Security Cheat Sheet empfiehlt per-tool permission scoping: unterschiedliche tool sets für unterschiedliche trust levels, explizite Autorisierung für sensible Aktionen und fail closed, wenn eine Berechtigungsprüfung fehlschlägt.
Secret-Isolation: Wie greift der Agent auf Zugangsdaten zu?
Ein Agent sollte keine langfristigen Klartext-API-Keys direkt halten. Das OWASP Secrets Management Cheat Sheet empfiehlt zentrales und standardisiertes Secret Management. Auch das Secret-Management-System selbst sollte Authentication, Authorization, Accounting und Lifecycle unterstützen.
Tabelle für Secret-Zugriffsmuster
| Muster | Risiko | Einsatzszenario | Beispiel |
|---|---|---|---|
| Direkter Besitz, etwa Klartext .env | Hohes Leckrisiko, keine Nachverfolgung, kein Widerruf | Nicht empfohlen | Hartcodierter API key |
| Umgebungsvariablen | Risiko von Log-Lecks, weiterhin schwach bei Nachverfolgung und Widerruf | Einzelserver-Deployment | process.env.API_KEY |
| secret vault | Zentrale Verwaltung, verschlüsselte Speicherung, Audit Trail, Widerruf | Produktionsumgebung | AWS Secrets Manager, HashiCorp Vault |
| secret reference | Der Agent hält nur eine Referenz und holt zur Ausführungszeit einen kurzlebigen Token | Multi-Tenant- und Hochsicherheitsumgebungen | vault.get(secretRef) |
Der Secret-Lifecycle besteht aus vier Phasen: creation erzeugt kurzlebige Token statt langfristiger Keys; rotation wechselt Secrets regelmäßig, etwa alle 30 Tage, und ein automatisierter Prozess aktualisiert das Secret und informiert abhängige Systeme; revocation bietet einen Notfall-Widerruf, damit ein geleaktes Secret sofort deaktiviert werden kann; expiration setzt ein Ablaufdatum, nach dem das Secret automatisch ungültig wird.
MCP Security Best Practices bezeichnet token passthrough ausdrücklich als Anti-Pattern: Wenn der OAuth token eines Benutzers direkt an den Agenten weitergereicht wird, werden Sicherheitskontrollen umgangen, die audit trail gebrochen und trust boundaries verletzt. Korrekt ist ein delegated token, wenn der Benutzer den Agenten autorisiert: kurzlebig, im Scope begrenzt und mit klarer Audience.
Die Kernprinzipien von OWASP Secrets Management sind centralize, least privilege, automate und auditing. Secret-Zugriff folgt dem Minimalprinzip. Manuelle Pflege erhöht Leck- und Fehlerrisiko; rotation, revocation und expiration gehören zum Lifecycle.
Audit Logs: Wer hat wann was aufgerufen?
Audit Logs müssen rekonstruieren können, „wer in wessen Namen welches Tool aufgerufen, welches Objekt berührt und welches Ergebnis erhalten hat“. Gleichzeitig müssen Parameter und Secrets maskiert werden.
Audit Log Schema
| Feld | Beschreibung | Maskierungsregel |
|---|---|---|
| traceId | Aufrufketten-ID, wiederverwendet das trace/runId-Konzept aus N156 | Nicht maskieren |
| timestamp | Aufrufzeit nach ISO 8601 | Nicht maskieren |
| actor | Entität, die den Aufruf gestartet hat | Nicht maskieren |
| subject | Entität, die vertreten wird | Nicht maskieren |
| tool | Tool-Name | Nicht maskieren |
| action | Operationstyp, etwa read/write/delete | Nicht maskieren |
| resource | Zielobjekt der Operation | Maskieren: customer_id → cust_*** |
| outcome | Ergebnis, etwa success/failure/denied | Nicht maskieren |
Maskierungsregeln: token, secret, password, email, phone und PII werden nicht protokolliert. Protokolliert werden who/what/when/where/outcome. Beispiele: customer_id=12345 wird zu cust_, email=user@example.com zu e@***.com, token=Bearer xxx zu Bearer ***, password=secret123 wird gar nicht gespeichert.
Laut OWASP Logging Cheat Sheet sollen Sicherheitslogs Untersuchung, Audit und Monitoring unterstützen, aber keine Passwörter, session IDs, access tokens oder sensiblen personenbezogenen Daten speichern. Sie sollen nachvollziehbare Informationen wie who/what/when/where/outcome enthalten.
Die Audit-and-Accountability-Kontrollfamilie in NIST SP 800-53 unterstreicht: Audit Logs sind die letzte Verteidigungslinie eines Berechtigungssystems. Wenn eine Berechtigungsprüfung fehlschlägt, muss der Grund im Log stehen: actor hat keine Berechtigung, subject hat keine target-Berechtigung oder scope reicht nicht aus.
Entscheidungstabelle für Berechtigungsmodelle: Welche Kontrollen gehören zusammen?
Identity Mapping, Tool-Berechtigungen, Secret-Isolation und Audit Logs sind keine unabhängigen Kontrollkästchen. Sie bilden zusammenhängende Einschränkungen. Die folgende Tabelle zeigt Kontrollkombinationen für typische Szenarien.
| Szenario | identity type | tool permission | secret access | audit log | Typische Anwendung |
|---|---|---|---|---|---|
| Risikoarmes internes Tool | service account | whitelist, nur read-Tools | Umgebungsvariablen | actor/tool/outcome | Interne Berichtserstellung, geplanter Sync |
| Multi-Tenant-SaaS | delegated token + tenantId | per-tool permission mit Tenant-Filterung | secret vault mit Tenant-Isolation | full schema mit tenantId | CRM-Agent, E-Mail-Assistent |
| Finanztransaktion | user identity + approval | scope minimization + approval | secret reference mit kurzlebigem Token | full schema + approvalId | Handelsfreigabe, Geldbewegung |
| Sensible Datenoperation | delegated token + approval | whitelist + approval + guardrails | secret vault mit Notfallwiderruf | full schema + Maskierung | Datenexport, Kundenabfrage |
Das OWASP AI Agent Security Cheat Sheet empfiehlt separate tool sets für unterschiedliche trust levels und explicit authorization für sensible Operationen. Der Kern der Entscheidungstabelle ist die Kombination: Hochrisiko-Szenarien brauchen mehrere Kontrollschichten, nicht eine einzelne Kontrolle, die alles abdecken soll.
Troubleshooting-Checkliste: typische Symptome von Berechtigungsproblemen
Die folgenden Symptome, Ursachen, Prüfungen und Lösungen tauchen bei Agent-Berechtigungen häufig auf.
| Symptom | Mögliche Ursache | Prüfschritt | Lösung |
|---|---|---|---|
| Der Agent erhält beim Tool-Aufruf 403 Forbidden | actor hat keine tool permission oder subject hat keine target permission | permission_level des actor und resource-Berechtigung des subject prüfen | Identity Mapping bestätigen und Berechtigungsmatrix anpassen |
| Im Log ist actor leer oder subject durcheinander | Identity-Mapping-Felder werden nicht korrekt weitergegeben | Prüfen, ob der agent context actor/subject/tenantId enthält | Identitätsfelder durch die gesamte Aufrufkette weiterreichen |
| Tool-Aufruf gelingt, aber das Audit Log enthält nicht alle Pflichtfelder | Audit Log Schema ist unvollständig | Prüfen, ob die Log-Schreiblogik alle Felder enthält | Schema ergänzen, traceId/approvalId hinzufügen |
| Die Anfrage von Benutzer A kann Daten von Benutzer B lesen | tenantId oder subject sind nicht isoliert, oder ein Admin-Token wird geteilt | Prüfen, ob delegated tokens genutzt werden und tenantId korrekt ist | delegated token nutzen und tenantId-Validierung erzwingen |
| Nach Secret rotation nutzt der Agent weiter den alten key | Secret reference wurde nicht aktualisiert oder rotation greift nicht | Prüfen, ob der Vault das neue Secret liefert und ob der Agent neu abruft | rotation muss die reference automatisch aktualisieren |
| Nach Freigabe schlägt der Tool-Aufruf trotzdem fehl | Guardrails schlagen fehl, etwa wegen Parametergrenzen oder PII-Erkennung | tool_input_guardrails-Logs prüfen | Parameter oder Guardrail-Regeln anpassen |
Implementierungscheckliste: ein Agent-Berechtigungsmodell von 0 aufbauen
Das sind die fünf Kernschritte, um ein Berechtigungsmodell umzusetzen.
Schritt 1: Identity-Mapping-Regeln definieren
Entscheidungspunkte: Brauchen Sie Multi-Tenant-Isolation, also ein tenantId-Feld? Gibt es Hintergrundjobs, also einen service account? Gibt es Automatisierungsworkflows, also delegated tokens?
Pseudocode:
interface IdentityContext {
actor: string; // Entität, die den Aufruf startet
subject: string | null; // Entität, die vertreten wird
delegatedBy?: string; // Delegationsquelle
tenantId?: string; // Tenant-Kennung
}
Schritt 2: Tool Permission Matrix entwerfen
Entscheidungspunkte: Brauchen Sie Freigaben, also needs_approval=true? Brauchen Sie dynamische Filterung, also runtime checks über is_enabled? Brauchen Sie Parameterprüfung, also tool_input_guardrails?
Codebeispiel:
interface ToolPermission {
name: string;
permission_level: 'read' | 'write' | 'admin';
required_scope: string[];
needs_approval: boolean;
is_enabled: (context: IdentityContext) => boolean;
}
Schritt 3: Secret Vault anbinden
Entscheidungspunkte: Brauchen Sie kurzlebige Credentials, also eine secret reference? Brauchen Sie Notfallwiderruf, also einen Vault, der sofort deaktivieren kann?
Codebeispiel:
async function getSecret(secretRef: string, context: IdentityContext): Promise<string> {
// Identität prüfen
await vault.authenticate(context.actor);
// Berechtigung prüfen
await vault.authorize(context.actor, secretRef);
// Kurzlebigen Token abrufen
const token = await vault.getToken(secretRef, expiresIn: '15m');
// Audit erfassen
await auditLog.record({
actor: context.actor,
action: 'get_secret',
resource: secretRef,
outcome: 'success'
});
return token;
}
Schritt 4: Audit Logs implementieren
Entscheidungspunkte: Brauchen Sie Maskierung, also redaction-Regeln? Brauchen Sie traceId, also Wiederverwendung von trace/runId aus N156?
Codebeispiel:
interface AuditLogEntry {
traceId: string;
timestamp: Date;
actor: string;
subject: string | null;
tool: string;
action: 'read' | 'write' | 'delete';
resource: string; // Maskiert
outcome: 'success' | 'failure' | 'denied';
}
Schritt 5: Berechtigungsgrenzen testen
Entscheidungspunkte: Testen Sie unbefugten Zugriff, etwa Benutzer A greift auf Daten von Benutzer B zu? Testen Sie Token-Lecks, indem Sie nach einem simulierten Secret-Leck den Widerruf auslösen? Testen Sie Audit-Nachvollziehbarkeit, indem Sie die vollständige Aufrufkette über traceId zurückverfolgen?
Testcheckliste: Unbefugter Zugriff (actor=user_A, resource=tenant_B → sollte 403 liefern); Token-Leck-Test (vault.revoke(secretRef) → der Agent sollte keinen neuen Token mehr erhalten); Audit-Trace-Test (vollständige Aufrufkette über traceId abfragen → sollte actor/subject/tool/outcome enthalten).
Nächste Schritte: weiterführende Lektüre
Ein Agent-Berechtigungsmodell berührt Identität, Tools, Secrets und Audit auf mehreren Ebenen. Die folgenden Beiträge passen als nächste Lektüre.
Veröffentlichte Artikel:
- Agent Sandbox Guide: Die Sandbox löst Laufzeitisolation mit Containern und Docker. Dieser Artikel behandelt Berechtigungs- und Secret-Grenzen; beides ergänzt sich.
- Tool Calling in der Praxis: Grundlagen des Tool Calling. Dieser Artikel erweitert sie um Tool-Allowlists, per-tool Permissions und Eingabeprüfung.
- AI Agent Monitoring und Recovery: Grundlagen für Monitoring und Alerts. Dieser Artikel ergänzt Audit-Felder und traceId.
Ein AI-Agent-Berechtigungsmodell entwerfen
Benutzeridentität, Tool-Berechtigungen, Secret Access und Audit Logging für ein produktives Agent-System entwerfen.
- 1
Step 1: Tools und Ressourcen auflisten
Listen Sie alle Tools, Ressourcen, Aktionen und externen Systeme auf, die der Agent berühren kann. Trennen Sie reine Leseoperationen von Schreiben, Senden, Löschen und Finanzaktionen. - 2
Step 2: Identity Context festlegen
Definieren Sie für jeden Run actor, subject, tenant, workflow und traceId, damit Benutzeridentität, Service Account und Automatisierungsworkflow nicht in einer Admin-Identität verschwimmen. - 3
Step 3: Identitätstypen trennen
Trennen Sie delegated user identity, service account und system maintenance job. Legen Sie für jeden Typ Ressourcen-Grenzen und Audit-Felder fest. - 4
Step 4: Tool Permission Matrix bauen
Definieren Sie für jedes Tool action, resource, scope, approval, secret und audit metadata. Führen Sie vor jeder Ausführung server-side authorization aus. - 5
Step 5: Secret Vault anbinden
Speichern Sie Secrets in einem Vault oder Credential Service. Tauschen Sie sie erst in der Ausführungsschicht gegen kurzlebige Credentials und unterstützen Sie rotation, revocation und expiration. - 6
Step 6: Fail closed umsetzen
Prüfen Sie vor der Ausführung im Tool Gateway actor, subject, resource, action, scope und approval. Jeder fehlgeschlagene Check führt zu einer expliziten Ablehnung. - 7
Step 7: Maskierte Audit Logs schreiben
Erfassen Sie who, what, when, where, outcome, traceId, approvalId und eine maskierte resource summary. Setzen Sie Alerts für Berechtigungsänderungen, scope elevation und secret access.
FAQ
Wenn ein Agent ein Tool aufruft, repräsentiert er dann den Benutzer, einen Systemaccount oder den Workflow selbst?
Warum brauche ich per-tool Permissions, wenn OAuth bereits autorisiert wurde?
Kann ein einziger Admin-Token den Agenten Daten für alle Benutzer abfragen lassen?
Darf ein Agent .env-Dateien oder Benutzer-API-Keys direkt lesen?
Darf ich nach einer Freigabe denselben hochprivilegierten Token langfristig wiederverwenden?
Sollte ein Audit Log Parameter speichern, und wie verhindere ich, dass Token, E-Mail-Adressen oder Kundendaten im Log landen?
10 Min. Lesezeit · Veröffentlicht am: 17. Sept. 2026
AI Agent Engineering Guide
Wenn du über die Suche hier gelandet bist, kommst du am schnellsten weiter, indem du zum vorherigen oder nächsten Beitrag dieser Serie springst.
Vorheriger
AI-Agent-Kosten kontrollieren: Modell-Routing, Tool-Budgets, Caching und Retry-Limits
Ein Praxisleitfaden für AI-Agent-Kostenkontrolle mit Budget-Objekten, Modell-Routing, Tool-Limits, Prompt Caching, Batch/Flex, Retry-Circuit-Breakern, Kostenlogs und Alert-Feldern.
Teil 20 von 22
Nächster
AI-Agent-State-Machine-Design: Warum komplexe Workflows nicht nur auf Prompts setzen können
Ein Praxisleitfaden für wiederherstellbare AI-Agent-Workflows mit State, Events, Guards, Actions, Checkpoints, Retries, Compensation, Approval Pauses und Terminal States statt Prompt-only-Fortschritt.
Teil 22 von 22



Kommentare
Melde dich mit GitHub an, um einen Kommentar zu hinterlassen