This directory contains demo scenarios showing AuthBridge providing zero-trust authentication for Kubernetes agent workloads. Each demo progressively introduces more AuthBridge capabilities.
Note: These demos use the operator-injected combined sidecar (after cortex#411 —
authbridgefor proxy-sidecar,authbridge-envoyfor envoy-sidecar, andauthbridge-lite, the proxy image built auth-only viaexclude_plugin_*tags). The previousauthbridge-unifiedimage and the per-component sidecars (client-registration, standalonespiffe-helper) have been removed.
| Demo | Difficulty | What It Shows | Deployment |
|---|---|---|---|
| Weather Agent | Beginner | Inbound JWT validation, automatic identity registration, outbound passthrough | UI |
| Weather Agent (advanced) | Intermediate | Inbound on agent and tool, outbound token exchange, ingress JWT verification on the tool | kubectl + script |
| GitHub Issue Agent | Intermediate | Inbound validation + outbound token exchange + scope-based access control | UI or Manual |
| Token-Exchange Routes | Reference | How to write authproxy-routes for single- and multi-target token exchange |
Configuration only |
| MCP Parser Plugin | Reference | Enable the mcp-parser plugin to surface tool calls / resource reads in session events |
Configuration only |
| abctl Walkthrough | Reference | Watch the AuthBridge plugin pipeline live with the abctl TUI |
Tooling only |
| IBAC | Intermediate | Intent-Based Access Control: LLM judge denies outbound HTTP that doesn't align with the user's recorded intent. Reproduces the email-poison / prompt-injection attack from huang195/ibac; chat with the agent through the rossoctl UI and see the exfiltration blocked, then make show-result for a pipeline-level forensic |
UI + kubectl |
| SPARC (finance) | Intermediate | SPARC pre-tool reflection: the sparc plugin blocks a hallucinated/ungrounded tool argument (an invented transaction id) before it executes and transparently asks the user to clarify, then approves the corrected call. Complements IBAC — SPARC verifies argument grounding, IBAC verifies intent alignment |
UI + kubectl |
| CPEX Bridge (HR) | Advanced | CPEX/APL declarative policy: one route chains a coarse APL predicate, an embedded Cedar PDP, RFC 8693 token exchange with a post-check, PII redaction and audit plugins. Same request, different data per caller (Bob sees an SSN, Eve gets it redacted). Self-contained: its own kind cluster + namespace, deployed via make rather than operator injection |
kubectl (make) |
New to AuthBridge? Start with the demos in this order:
-
Weather Agent — Fastest way to see AuthBridge in action. Deploys via the Rossoctl UI with inbound JWT validation protecting the agent. No token exchange configuration needed; outbound traffic uses the default passthrough policy.
-
GitHub Issue Agent — Full AuthBridge demo with inbound validation and outbound token exchange. Shows how AuthBridge transparently exchanges tokens when the agent calls the GitHub tool, with scope-based access control (Alice vs Bob).
-
Token-Exchange Routes — Reference for the
authproxy-routesConfigMap. Covers both single-target (one route) and multi-target (one agent → multiple tools, each with its own audience) patterns. Configuration-only — pair with one of the deployment demos above for a working stack.
- Deploy agent + tool via Rossoctl UI
- AuthBridge inbound JWT validation (signature, issuer, audience)
- Automatic SPIFFE identity registration with Keycloak
- Default outbound passthrough — agents work out-of-the-box with any tool or LLM
- CLI testing: public endpoints, token rejection, valid token
- Same images as the beginner demo, separate
*-advancedDeployments so the getting-started flow stays untouched - Outbound token exchange to the tool SPIFFE audience (
authproxy-routes) - AuthBridge injected on the MCP tool — JWT checks at Envoy before the tool process
deploy_and_verify_advanced.shfor reproducible CI-style verification (Keycloak exchange + MCPinitializewithout requiring a working LLM)
- Deploy agent + tool via Rossoctl UI or kubectl
- Keycloak configuration for token exchange (realm, clients, scopes)
- Inbound JWT validation protecting the agent
- Outbound OAuth 2.0 token exchange (RFC 8693) — agent-scoped token exchanged for tool-scoped token
- Subject preservation through exchange (
subclaim maintained) - Scope-based access control: Alice (public repos) vs Bob (all repos)
- Comprehensive CLI testing and AuthProxy log verification
- How AuthBridge resolves the request
Hostheader to a route entry - ConfigMap shape for
authproxy-routes— fields, glob patterns, ordering - Single-target example (one route)
- Multi-target example (multiple routes, one agent → multiple tools)
- Mixing exchange and passthrough; tightening to
default_policy: exchange - Troubleshooting:
Hostmismatches, missing scopes, audience errors
- How to enable the
mcp-parseroutbound plugin - Surfaces MCP tool calls / resource reads / prompt invocations in
session events for
abctland the:9094API - Required
allow_mode_override: trueon the outbound ext_proc filter in envoy-sidecar mode
- Run the
abctlTUI against the weather-agent's session API - See inbound JWT validation → protocol parsers → outbound exchange → LLM inference → response, paired live
- Self-contained: own namespace
cpex-demo, deployed with plainkubectl applyviamake deploy(not operator-injected); thehr-mcpbackend, Keycloak realm, and chat agent are all vendored - Runs the
cpexplugin (theauthbridge-cpeximage) with CPEX's policy language APL as a sidecar in front of an MCP backend - Embedded PDP: APL consults Cedar through a
cedar:step (the slot is engine-agnostic by design — OPA, AuthZen, …) - Explicit effects: field redaction on request and response, a PII content guardrail, and structured audit logging — all as policy steps, not backend code
- Authorization as action: RFC 8693 token exchange (
delegate(...)) is a first-class policy step, with a post-check that refuses to forward a token the IdP narrowed below what the call needs - Seven deterministic curl scenarios plus an interactive LLM chat with mid-conversation persona switching (Bob / Eve / Alice)
All demos require:
- A Kubernetes cluster with the Rossoctl platform installed (Installation Guide)
- Keycloak deployed in the
keycloaknamespace - SPIRE deployed (for demos using SPIFFE identity)
UI-based demos additionally require:
- The Rossoctl UI running at
http://rossoctl-ui.localtest.me:8080
Most demos need Keycloak accessible at http://keycloak.localtest.me:8080.
If not already available via an ingress:
kubectl port-forward service/keycloak-service -n keycloak 8080:8080Demos that configure Keycloak need a Python virtual environment:
cd authbridge
python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt- AuthBridge Overview — Architecture and design
- AuthBridge Binary — Unified authbridge binary supporting ext_proc, ext_authz, and proxy modes
- Rossoctl Operator — Admission webhook for sidecar injection (migrated from this repo)