Skip to content

2026-03-08

RBAC Is Not Enough for AI Agents

Intended Team · Founding Team

RBAC Is Not Enough for AI Agents

Role-Based Access Control has been the foundation of enterprise authorization for three decades. It is elegant in its simplicity: assign users to roles, assign permissions to roles, check role membership at access time. RBAC works because it maps cleanly to how organizations think about responsibility. An "Editor" can edit. A "Viewer" can view. An "Admin" can do everything.

RBAC was designed for humans clicking buttons. It assumed that the entity exercising a permission would apply judgment about when and how to exercise it. That assumption held for thirty years. AI agents break it completely.

How RBAC Works

A quick refresher. In a standard RBAC implementation, you define roles like "deployment-operator" with permissions like "deploy:staging" and "deploy:production." You assign the role to a principal. When the principal attempts to deploy, the system checks whether the principal's role includes the required permission.

The check is binary. Either the principal has the permission or it does not. The check is static. The same permission applies at 2 PM on a Tuesday and at 2 AM on a Saturday. The check is context-free. Deploying a one-line CSS change and deploying a database migration that drops tables both require the same "deploy:production" permission.

For humans, these limitations rarely matter. A human deploying to production at 2 AM on a Saturday knows that this is unusual. A human deploying a destructive migration knows to be careful. The human provides the context, the judgment, and the proportionality that RBAC does not.

Why AI Agents Break RBAC

AI agents do not provide judgment. They provide optimization. An agent with a "deploy:production" permission will deploy to production whenever its reasoning concludes that a deployment is warranted. It does not distinguish between Tuesdays and Saturdays. It does not distinguish between safe changes and destructive ones. It has the permission, so it exercises the permission.

This creates five specific failure modes that RBAC cannot address.

Failure Mode 1: No Velocity Awareness

An agent with "send:email" permission can send one email or ten thousand emails. RBAC treats both identically. The permission is "send email." The agent has it. How many emails the agent sends per minute is outside the model entirely.

In practice, velocity is one of the most important risk signals. An agent that suddenly makes 50 API calls per minute when its baseline is 5 is exhibiting anomalous behavior. RBAC has no way to express or enforce velocity constraints because it was designed for humans who cannot make 50 API calls per minute.

Failure Mode 2: No Contextual Risk

A "transfer:funds" permission in RBAC is a single permission. Transferring $10 and transferring $1,000,000 require the same permission. Transferring to a known vendor and transferring to a new international account require the same permission. The risk difference is enormous. The RBAC difference is zero.

You could try to solve this by creating fine-grained permissions: "transfer:funds:under-1000" and "transfer:funds:over-1000." But the number of permutations explodes. What about time of day? Day of week? Cumulative daily total? Destination country? Recipient history? You would need thousands of permissions to model what a single contextual risk evaluation handles naturally.

Failure Mode 3: No Intent Classification

RBAC operates on actions: read, write, delete, execute. It does not understand intent. "Write a customer record" could mean updating a phone number or changing a billing address to redirect payments. Both are "write" operations on the same resource. RBAC treats them identically. The risk is completely different.

Intent classification maps the raw action to what the agent is actually trying to accomplish. "Update customer.billing_address" is a different intent than "update customer.phone" even though both are writes to the customer table. An authority runtime evaluates intent. RBAC evaluates action verbs.

Failure Mode 4: No Cumulative Awareness

RBAC evaluates each access decision independently. There is no concept of session, sequence, or cumulative impact. An agent that reads one customer record is fine. An agent that reads every customer record in the database, one at a time, is performing a data exfiltration. Each individual read is authorized. The cumulative behavior is a policy violation.

Cumulative awareness requires state: what has this agent done recently, how does this request fit into the pattern of its recent behavior, is the aggregate within acceptable bounds? RBAC is stateless by design.

Failure Mode 5: No Escalation Path

RBAC has two outcomes: allow and deny. There is no "allow with conditions" or "escalate for human review." When an agent attempts an action that is within its permissions but unusual or high-risk, RBAC either allows it unconditionally or denies it entirely.

What organizations actually need is a third option: hold this action, notify a human, let the human decide. This is especially important for high-stakes actions where the agent might be right, but the cost of being wrong is too high to accept without human confirmation.

What AI Agents Actually Need

AI agents need authorization that understands what they are doing, not just what they are allowed to do. This requires several capabilities that RBAC does not provide:

**Intent-aware evaluation** that classifies each action by its semantic meaning, not just its API signature. Creating a $100 purchase order and creating a $100,000 purchase order are different intents even though they hit the same endpoint.

**Dynamic risk scoring** that evaluates each action in context. The same action can be low-risk on a Tuesday afternoon and high-risk at 3 AM on a holiday. The scoring adapts to time, velocity, cumulative impact, resource sensitivity, and organizational state.

**Stateful evaluation** that tracks agent behavior over time. An agent making its third API call today is different from an agent making its three-thousandth. The authorization system needs to know the difference.

**Escalation and hold** that provides a middle ground between allow and deny. Some actions should proceed only with human confirmation. Some should be allowed but flagged for review. Some should be allowed with conditions attached.

**Cryptographic proof** that records what was evaluated and what was decided. When an auditor asks why an agent was allowed to take an action, the answer should be a signed token with the full evaluation context, not a log line that says "role check: pass."

RBAC Still Has a Role

RBAC is not useless. It remains valuable as a coarse-grained boundary. An agent that should never access financial systems should not have a role that grants financial permissions. RBAC provides the outer fence.

But the outer fence is not sufficient. Inside the fence, agents need governance that understands intent, context, velocity, and risk. They need an authority runtime that evaluates every action before it executes, scores the risk dynamically, and produces cryptographic proof of every decision.

RBAC tells you what an agent can do. An authority runtime tells you what an agent should do. For AI agents in production, the difference between "can" and "should" is where the incidents live.