Before diving into architecture, grasp why this problem exists.
Traditional Identity has two categories:
| Type | Example |
|---|---|
| Human Identity | Employee login credentials |
| Non-Human Identity (NHI) | Service accounts, API keys |
AI Agents break this model because they are neither purely human nor traditional workloads. They are entities that:
On-Call Engineer
↓ initiates
Oncall Agent
↓ delegates to
Investigation Agent
↓ delegates to
Monitoring Agent
↓ opens
Pull Request ← Who is responsible here?
Without proper identity:
Problem 1: Identity Model Gap
Current models describe humans and workloads, but NOT agents acting on behalf of humans
Problem 2: Lost Provenance
As requests pass through multiple agents, the original context (who started this, why) gets dropped at each hop
Before studying the architecture, learn these foundational terms:
A security model where nothing is trusted by default, even inside the network. Every request must be:
A compact, cryptographically signed token that carries identity claims.
Header.Payload.Signature
Payload example:
{
"sub": "investigation-agent",
"aud": "mcp-gateway",
"actor_chain": ["user1", "oncall-agent", "investigation-agent"],
"exp": 1234567890 ← short-lived, expires in minutes
}
The complete, verifiable record of every entity involved in a request:
[user1 → oncall-agent → investigation-agent → mcp-gateway]
Study each component and its single responsibility:
┌─────────────────────────────────────────────────────┐
│ ARCHITECTURE MAP │
│ │
│ [Engineer] → [AI Agent Mesh] → [MCP Gateway] │
│ ↕ ↕ │
│ [STS Token Service] [Downstream │
│ ↕ Systems] │
│ [Agent Registry] │
│ │
│ [AI Gateway] ← mediates → [External AI Models] │
└─────────────────────────────────────────────────────┘
1. Agent Registry
2. Security Token Service (STS)
3. AI Agent Mesh
4. MCP Gateway
5. AI Gateway
Follow this process step by step:
STEP 1: Workload proves itself
─────────────────────────────
Kubernetes Workload → requests SVID from SPIRE
Result: Cryptographically signed workload identity
"I am Workload-1, running legitimately in this environment"
STEP 2: Agent requests its own token
─────────────────────────────────────
SDK (with agent config + inbound JWT + destination audience)
→ sends request to STS
→ authenticated using the SVID from Step 1
STEP 3: STS validates the request
───────────────────────────────────
STS checks Agent Registry:
"Is this agent_id authorized to run on this workload?"
If YES → proceed
If NO → reject (prevents impersonation)
STEP 4: STS mints the JWT
──────────────────────────
JWT contains:
- Agent identity
- Specific audience (next hop only)
- Full actor chain
- Short expiry (minutes)
| Property | How It's Achieved |
|---|---|
| No token reuse | Each token is scoped to ONE specific destination |
| No impersonation | Agent Registry validates agent-to-workload mapping |
| Full traceability | Actor chain embedded in every token |
| Short exposure window | Tokens expire in minutes |
Now apply everything by following a complete request:
Hop 1: Engineer initiates session
user1 (engineer) → Oncall Agent
Token contains: { actor: "user1" }
Hop 2: Oncall Agent needs to call Investigation Agent
Oncall Agent presents:
- Its SPIRE SVID (Workload-1)
- user1's context
- Audience: "investigation-agent"
STS verifies → mints JWT:
{ actor_chain: ["user1", "oncall-agent"], aud: "investigation-agent" }
Oncall Agent → sends this JWT → Investigation Agent
Hop 3: Investigation Agent needs to call MCP Gateway
Investigation Agent performs its OWN token exchange with STS:
- Audience: "mcp-gateway"
STS mints new JWT:
{ actor_chain: ["user1", "oncall-agent", "investigation-agent"], aud: "mcp-gateway" }
Investigation Agent → sends JWT → MCP Gateway
Hop 4: MCP Gateway enforces policy
MCP Gateway receives JWT:
1. Verifies cryptographic signature ✓
2. Checks audience matches ✓
3. Evaluates tool-level policy using FULL actor chain ✓
4. Proxies request to downstream service ✓
5. Logs complete audit trail ✓
Result: The PR now shows:
"Monitoring Agent acting on behalf of user1, via oncall-agent and investigation-agent, to resolve alert #XYZ"
A critical insight from this article: security must be the easy path.
Without A2A Client (manual, error-prone):
Developer must remember to:
□ Request SVID
□ Call STS with correct parameters
□ Attach actor chain
□ Set correct audience
□ Handle token refresh
With A2A Client (automated, secure-by-default):
Developer calls:
a2a_client.send(destination, payload)
← All security steps happen automatically
Design Principle: The secure path should also be the easiest path
In a Zero Trust system, monitoring is not optional — it's a core requirement.
For every request:
├── Who initiated it (human identity)
├── Which agents were involved (actor chain)
├── Which tools were invoked
├── Authorization decisions made
├── Security context at each hop
└── Timestamp of each event
| Without Observability | With Observability |
|---|---|
| Incident response requires manual log stitching | Complete audit trail in one place |
| Cannot prove compliance | Full attribution available |
| Security anomalies go undetected | Real-time visibility into all agent actions |
The article presents a 3-layer vision for the future:
Layer 3: Unified Policy Enforcement Plane
─────────────────────────────────────────
Consistent policy across all tools, sessions, protocols
Business-level controls expressed uniformly
Layer 2: Dynamic Access Control
────────────────────────────────
Risk-adaptive permissions
Context-aware authorization decisions
Layer 1: Foundation (Current Work)
────────────────────────────────────
Verifiable agent identity
Actor chain propagation
Short-lived scoped tokens
Core insight: Static, human-managed permissions don't scale in an agent-driven world. The future requires identity, risk assessment, and policy to work together dynamically.
PROBLEM SOLUTION
───────────────────────────────────────────────────────
Agents have no → SPIRE SVIDs + Agent Registry
verifiable identity give each agent cryptographic identity
Original context → Actor chain embedded in every
gets lost across hops JWT token at every hop
Tokens can be → Single-hop, short-lived tokens
intercepted/replayed scoped to specific audience
Developers skip → A2A Client automates all
security steps security steps by default
No audit trail → Observability captures complete
across agent workflows lineage of every request
The fundamental shift: AI agents are not just workloads — they are delegated actors that must carry verifiable proof of their entire chain of authority at every step of execution.