- Authors

- Name
- Phillip Pham
- @ddppham
Keycloak für Service-to-Service-Autorisierung: Autorisierung in die Plattform, nicht in die App
TL;DR
- Viele Unternehmen zentralisieren Identity (Keycloak als IdP), aber lassen Autorisierung zwischen Diensten über Anwendungscode, Gateway-Regeln und Proxy-Konfiguration verstreut. Jede Anwendung implementiert Autorisierung selbst — unkontrollierbar, uneinheitlich, sicherheitskritisch.
- Es geht auch anders: Keycloak als zentrale Autorisierungs-Control-Plane (PDP), die Entscheidungen an der Plattform-Ebene durchsetzt — nicht in jeder Anwendung.
- Mit Istio Ambient + Waypoint-Proxy + WebAssembly-Erweiterung bleiben Kubernetes-Workloads unverändert, während eine Mesh-Ebene jede HTTP-Anfrage prüft.
- Das Muster ist fail-closed: Bei Keycloak-Ausfall wird Zugriff verweigert — sicher, aber Keycloak wird zum Single Point of Failure → HA-Architektur ist Pflicht.
- Keine App-Änderungen, kein OPA nötig, kein neues zu lernendes System.
Das Problem: Identity ja, Autorisierung nein
Keycloak für Nutzer-Authentifizierung und Token-Ausgabe funktioniert in den meisten Organisationen. Aber die Autorisierung zwischen Services bleibt oft verstreut:
- in Anwendungscode (jeder Service entscheidet selbst),
- in Gateway-Regeln,
- in proxy-spezifischer Konfiguration.
Das ist unkontrollierbar, uneinheitlich und ein Sicherheitsrisiko — gerade bei vielen Microservices und Agents.
| Ebene | Typische Autorisierung | Problem |
|---|---|---|
| Anwendungscode | Jeder Service entscheidet selbst | Uneinheitlich, unkontrollierbar |
| Gateway-Regeln | Zentrale Regeln an der Edge | Nur Ingress, nicht Service-to-Service |
| Proxy-Konfiguration | Pro-Proxy-Regeln | Fragmentiert |
| Plattform-Ebene (PDP/PEP) | Zentrale Entscheidung, zentrale Durchsetzung | Das Ziel |
Die Lösung: PDP + PEP auf Plattform-Ebene
Das Muster trennt zwei Rollen:
- PDP (Policy Decision Point): Keycloak trifft alle Entscheidungen — zentral, mit eigener Policy-Engine.
- PEP (Policy Enforcement Point): Die Istio-Ebene setzt die Entscheidung durch — an der Plattform, nicht in der App.
Das Schlüsselwort: Ohne die Anwendungen anzufassen.
Die Architektur
- Istio Ambient Mode statt Sidecars: Kein Proxy pro Pod, sondern ein Waypoint pro Namespace — wirtschaftlicher und einfacher.
- Der Waypoint fängt den Traffic ab, schickt die Anfrage (Header, Body) an Keycloak.
- Keycloak mappt die Anfrage auf Resource/Scope, bewertet gegen Policies und gibt eine Entscheidung zurück.
- Ein WebAssembly-Plugin (Rust) übernimmt die Kommunikation — Open Source, wiederverwendbar.
Der Ablauf
- User ruft Service A auf (z. B.
GET /orders). - Service A will Service B erreichen.
- Der Waypoint greift den Traffic ab, fragt Keycloak: „Darf dieser Aufrufer das?"
- Keycloak antwortet: Allow oder Deny (mit Scope-Token).
- Der Waypoint leitet weiter — oder lehnt ab.
In einem Round-Trip (UMA-Ticket-Grant) wird die Entscheidung evaluiert und durchgesetzt.
Zwei Stile der Autorisierung
| Stil | Subject | Geeignet für |
|---|---|---|
| UMA (User-Managed Access) | Der User, secret-frei | Nutzer-Kontexte |
| Client Credentials / Service-Identität | Der Service, mit Credentials zwischen PEP und PDP | Reine Service-to-Service-Calls |
Die Wahl hängt davon ab, ob das Subject ein User oder ein Service ist. Beide Stile haben ihren Platz — und in modernen Architekturen mit AI-Agents oft beide zugleich.
Die Betriebs-Realität (ehrlich gemessen)
| Aspekt | Beobachtung |
|---|---|
| Latency | ~8,8 ms → ~2–3 ms nach Warm-up; im Betrieb akzeptabel |
| Deny-Verhalten | Klare 403-Antworten, konsistent |
| Kein Token | 401 Unauthorized |
| Bypass-Versuch (direkter Pod-Zugriff) | Von Istio-Z-Tunnel blockiert — kein Weg am Waypoint vorbei |
| Keycloak-Ausfall | Fail-closed: Dienst unverfügbar, kein unautorisierter Zugriff. Keycloak ist damit ein Single Point of Failure → HA-Architektur zwingend |
Warum der Bypass-Schutz entscheidend ist
Der wichtigste Punkt für die Sicherheit: Direkter Pod-Zugriff muss architektonisch unmöglich sein. Die Istio-Z-Tunnel-Netzwerk-Policy blockiert jeden Weg am Waypoint vorbei. Nur so ist die Kontrolle lückenlos — sonst umgehen Services die Autorisierung einfach über die direkte Pod-IP.
Warum „Plattform statt App" das richtige Muster ist
Autorisierung in der Plattform bedeutet: eine Kontrollebene, ein Regelwerk, eine Durchsetzung.
- Eine Kontrollebene: Keycloak als zentrale Entscheidungsinstanz statt Policies in hundert Apps.
- Ein Regelwerk: Policies werden einmal gepflegt, nicht in jedem Service dupliziert.
- Eine Durchsetzung: Die Mesh-Ebene setzt überall dieselbe Entscheidung durch.
- Fail-closed: Bei Ausfall wird Zugriff verweigert — nicht geöffnet.
- Observabel: OpenTelemetry über die gesamte Kette (Keycloak, Service, Plugin, Istio), um Entscheidungen, Latency und Fehler zu verstehen.
Das ist genau die Betriebsverantwortung, die Teams abgenommen bekommen: Sie bauen Features, die Plattform stellt sicher, dass nur erlaubter Zugriff passiert.
Die Verbindung zu KI: Agents & MCP unter zentraler Autorisierung
Dasselbe Muster gilt für AI-Agents und MCP-Server: Eine zentrale Policy entscheidet, welcher Agent welches Tool aufrufen darf — ohne jeden Agent-Code zu ändern. In Kombination mit Identity Chaining (RFC 8693/ID-JAG) entsteht ein vollständiges Zero-Trust-Bild:
- Keycloak als PDP entscheidet, welcher Agent welches Tool aufrufen darf
- Waypoint als PEP setzt die Entscheidung durch — ohne App-Änderungen
- Identity Chaining propagiert die Nutzer-Absicht über jeden Hop
Lessons Learned & Risiken (ehrlich)
- Keycloak als PDP im Live-Pfad braucht HA: Bei Ausfall fail-closed — das ist sicher, aber ein Single Point of Failure. HA-Architektur ist Pflicht.
- Latency ist messbar, aber beherrschbar: ~2–3 ms nach Warm-up sind im Betrieb akzeptabel — aber gemessen, nicht angenommen.
- Bypass muss architektonisch unmöglich sein: Direkter Pod-Zugriff wird durch die Istio-Z-Tunnel-Netzwerk-Policy blockiert. Nur so ist die Kontrolle lückenlos.
- UMA vs. Client Credentials: Beide Stile haben ihren Platz — die Wahl hängt davon ab, ob das Subject ein User oder ein Service ist.
- Ohne Observability blind: OpenTelemetry über die ganze Kette ist nötig, um Entscheidungen, Latency und Fehler zu verstehen.
Fazit
Autorisierung gehört in die Plattform, nicht in die App. Keycloak als zentrale Autorisierungs-Control-Plane mit Istio Ambient + Waypoint setzt das Muster um — zentral, fail-closed, observabel, ohne App-Änderungen:
- PDP + PEP auf Plattform-Ebene statt Autorisierung im Anwendungscode.
- Istio Ambient + Waypoint — ein Waypoint pro Namespace statt Sidecar pro Pod.
- Fail-closed mit HA — Sicherheit ohne Single Point of Failure.
- KI-ready — Agents und MCP-Server unter derselben zentralen Policy.
FAQ
Brauchen wir OPA zusätzlich? Nicht zwingend — Keycloak hat eine eigene Policy-Engine. OPA ist eine Alternative, aber ein zusätzliches System. Die Wahl hängt vom Use Case ab.
Muss ich meine Anwendungen ändern? Nein — das ist der Kern des Musters. Die Istio-Plattform-Ebene setzt die Entscheidung durch, die Apps bleiben unverändert.
Was passiert bei Keycloak-Ausfall? Fail-closed: Zugriff wird verweigert. Sicher, aber ein SPOF — deshalb wird Keycloak in HA betrieben.
Ist das nicht zu langsam für Service-to-Service-Calls? In der Praxis sind ~2–3 ms nach Warm-up akzeptabel — gemessen, nicht angenommen. Für die meisten Microservice-Lasten unkritisch.
Verwandte Artikel
📖 Verwandte Artikel
Weitere interessante Beiträge zu ähnlichen Themen
Non-Human Identities: Zero-Trust für KI-Agents in Kubernetes
Non-Human Identities & Identity Chaining für AI-Agents: So verhindern Sie den Confused Deputy mit RFC 8693, RFC 7523 & ID-JAG — Zero-Trust in Kubernetes.
Keyless Identity für AI-Agents auf Kubernetes: MCP-Agents ohne statische Secrets
Keyless Identity für MCP-Agents: Warum statische Secrets das größte Sicherheitsrisiko Ihrer KI sind und wie SPIRE, Keycloak, DPoP & OPA Agents ohne stehlbare Secrets absichern.
Zero-Trust Architektur für Kubernetes: Komplett-Guide (2026)
Zero-Trust für Kubernetes: Network Policies, mTLS, Service Mesh & Identity Verification. Schritt-für-Schritt-Anleitung für sicherste Cluster-Architektur.
AI-Agent-Sandbox auf Kubernetes: VM-Isolation mit Kata Containers
AI-Agent-Sandbox auf Kubernetes: Warum Container-Isolation für untrusted Agents nicht reicht und wie Kata Containers VM-Isolation bei Standard-Container-Workflow liefert.
NIS2-Meldepflicht für Kubernetes-Vorfälle: Ablauf in Stunden
Meldepflicht nach NIS2/§ 32 BSIG für Kubernetes-Vorfälle: 24h-Erstmeldung, 72h-Meldung, Abschlussbericht. Welche Cluster-Ereignisse die Frist auslösen.
§ 30 BSIG auf Kubernetes übersetzt: was der Gesetzestext technisch bedeutet
Die zehn Maßnahmenkategorien aus § 30 Absatz 2 BSIG, jede einzeln auf konkrete Kubernetes-Mechanismen übersetzt: Audit-Policy, etcd-Backup mit getestetem Restore, Secrets-Verschlüsselung at rest, RBAC, NetworkPolicies, Pod Security Standards. Inklusive der Abgrenzung, was aus § 30 BSIG gerade nicht folgt.
Kubernetes CIS Benchmark Hardening: Guide + Checkliste
Kubernetes CIS Benchmark Hardening: kube-bench ausführen, Report priorisieren, Top-15-Fehler beheben. Härtungs-Checkliste & Managed-Kubernetes-Fallstricke.
Kubernetes Cluster absichern: Security-Checkliste 2026
Kubernetes Cluster absichern: 30-Minuten-Security-Check mit kube-bench, Trivy & Polaris plus 12-Punkte-Härtungs-Checkliste mit YAML-Templates für Audits.