Agent identity & access
An agent is a non-human identity (NHI) that acts with real authority - it holds tokens, calls APIs, touches data, triggers actions. OWASP puts it bluntly: an AI agent is an execution principal, closer to a privileged workload than a conversational interface. NHIs already vastly outnumber human identities and are the least-governed credentials in most estates; agents make it acute because they are numerous, dynamic, and act autonomously on untrusted input. The OWASP Agentic Top 10 (II.8) cross-maps directly to the OWASP Top 10 for Non-Human Identities - over-privileged NHIs, secret exposure, long-lived credentials, and reused identities are the root causes that turn agent risks into incidents.
# treat each agent/tool credential as a first-class identity with least privilegetoken: { aud: "tool://crm.read", scope: ["records:read"], ttl: 300s } # audience-bound (RFC 8707), short-livedmTLS + OIDC between agents; no token passthrough upstream (confused-deputy fix)tool_allowlist: ["crm.read","calendar.read"]; egress_allowlist: ["api.internal"]rotate + revoke on anomaly; log every tool call to the action ledger (III.3)flowchart LR PROV["Provision: per-agent NHI<br/>not a shared / static key"] --> AUTH["Authenticate<br/>mTLS + OIDC / workload identity"] AUTH --> AUTHZ["Authorize: least-privilege,<br/>task-scoped + on-behalf-of user"] AUTHZ --> ACT["Act + audit every action"] ACT --> DEPROV["Rotate & de-provision<br/>kill orphaned identities"] DEPROV -.->|"no standing super-credentials"| PROV classDef d fill:#0f1a18,stroke:#5bd1c5,color:#bdeee2; class PROV,AUTH,AUTHZ,ACT,DEPROV d;
The control that matters most is on-behalf-of: when an agent acts for a user it should borrow the user’s scoped authority, not wield its own standing super-credentials - so an injection can’t reach everything the agent could ever touch.
- One identity per agent. Never a shared human’s credentials or a static, broadly-scoped API key. Isolate agent identities from user identities.
- Authenticate strongly. mTLS + OIDC / workload identity; for A2A, signed and verified Agent Cards (II.7).
- Authorize least-privilege, task-scoped. The agent’s permissions are its blast radius (ASI03); deny dangerous tool combinations (II.6 capability chaining).
- On-behalf-of, not super-creds. When acting for a user, use the user’s delegated, scoped authority - the single most effective limit on injection impact.
- Short-lived, JIT credentials. No long-lived static keys; audience-bound tokens (RFC 8707); secrets in a manager, never in prompts or memory (secrets + memory poisoning = ASI06).
- Non-transitive delegation. Authority must not accumulate across A2A hops (II.7); re-scope at each boundary.
- Lifecycle & de-provisioning. Orphaned NHIs and identity sprawl are where breach-by-exhaust lives (II.13) - decommission aggressively.
▸ For the organization
- Inventory every agent/NHI and its entitlements; treat agents as managed identities, not config.
- Per-agent identity, JIT task-scoped tokens, on-behalf-of for user actions; never shared static keys.
- Rotate and de-provision aggressively; audit the delegation chain; map to OWASP NHI Top 10 + ASI03.