
Authorization
RBAC is a strong foundation for agent permissions — but agents need roles and context-aware boundaries. Where RBAC ends and policy begins.
Once an enterprise decides that agents should be governed, the first practical question is how to express what each agent is allowed to do. Role-based access control is the natural place to start. It is the model most security teams already know, already operate, and already trust for human users.
RBAC translates cleanly to agents, and it solves a real problem: it gives autonomy a standardized, reviewable shape instead of a tangle of one-off permissions. But agents are not static employees with a fixed desk and a fixed scope. They act on behalf of different users, across different data, in different situations, often many times a minute. That is where roles alone start to strain.
This post covers what RBAC does well for agents, exactly where it runs out of room, and how to combine it with policy so that an agent has both a role and a set of boundaries.
Role-based access control is an authorization model where permissions are grouped into named roles, and roles are assigned to actors. Instead of granting each capability individually, you define a role once and attach it to anything that should behave that way.
For agents, a role becomes a reusable bundle of permissions that maps to a recognizable job. A few concrete shapes:
The pattern is the same in each case: the role describes the kind of work, and the permissions describe the verbs that work involves. An agent assigned the analytics-readonly role inherits a known set of capabilities, and you reason about it as a category rather than as a unique snowflake.
RBAC earns its place because it makes agent permissions standardized, legible, and reviewable — three properties that are hard to retrofit once permissions sprawl.
The value shows up most clearly in how different teams interact with the same role:
finance-reporting that quietly includes write access to ledgers is an obvious red flag.Roles also scale operationally. When you deploy your tenth analytics agent, you do not negotiate its permissions from scratch — you attach the existing role and move on. Tightening a permission later means editing one role rather than chasing down every agent that happened to be granted it directly.
The takeaway: RBAC turns agent authorization from a per-agent improvisation into a small set of reviewable categories. That alone removes a large class of governance failures.
RBAC describes what kind of thing an agent can do. It is much weaker at describing when, on what, and on whose behalf. Agents constantly need those finer distinctions, because a single role often spans situations that should be treated very differently.
Consider the gaps that a flat role cannot express:
Each of these depends on context: the specific record, the data classification, the user's relationship to the resource, the direction of an action, or whether an approval exists. A role is a coarse instrument. To handle these cleanly with RBAC alone you would have to invent ever-narrower roles — hr-assistant-own-records, hr-assistant-direct-reports — until the role catalog explodes and stops being legible. That is the symptom that RBAC has reached its limit.
The fix is not to abandon roles. It is to pair them with attribute-based access control — policy that evaluates the attributes of the request at the moment of the action. RBAC answers "is this the right kind of agent?" Policy answers "is this specific action allowed right now?"
Keep the role broad and let policy add precision. An agent might hold the role customer-support, while policies further constrain it based on customer region, ticket sensitivity, the invoking user's group, approval status, or the type of action being attempted.
A policy for the legal review agent might look like this in plain pseudocode:
allow read on contract
when agent.role == "legal-review"
and contract.classification != "privileged"
and contract.litigation_hold == false
allow send on contract.summary
when action.recipient == "internal"
deny send on contract.summary
when action.recipient == "external"
and approval.status != "granted"The role still does the heavy lifting of saying "this is a legal review agent." The policy layer captures the conditions that change from request to request — classification, hold status, recipient, approval. Crucially, these conditions are data-driven, so they hold even as new contracts and new users appear, without anyone editing a role.
In practice the strongest approach is layered, with each layer doing the one job it is good at. None of them is sufficient alone, and none of them tries to be.
Read top to bottom, the layers move from coarse to fine to accountable. The role decides the category, the policy decides the instance, the approval decides the exception, and the audit trail proves what happened. A high-risk procurement action, for example, passes through all four: the procurement role permits drafting, a policy checks that the amount is within a threshold and the budget exists, an approval gate stops anything above the threshold, and the audit trail captures the whole chain.
Putting this together does not require a rewrite. It requires deciding which decisions belong in roles and which belong in policy — and resisting the temptation to encode everything as a new role.
A useful rule of thumb when designing agent authorization:
The common failure mode is the opposite: teams overload roles with situational logic, end up with hundreds of nearly identical roles, and lose the legibility that made RBAC valuable in the first place. Keep roles few and broad. Push the "it depends" into policy, where it belongs.
For enterprises scaling AI agents, RBAC is a strong foundation — but it should not be the entire authorization strategy. Roles give agents a recognizable identity and a reviewable scope. They do not, by themselves, capture the context that determines whether a single action is actually safe in the moment.
The answer is to treat authorization as layers that compose: roles for the broad shape, policy for precision, approvals for the high-risk edges, and audit trails for evidence. Each is simple on its own; together they let an agent act with autonomy that is still bounded and accountable.
Agents need roles, but they also need boundaries. RBAC defines the role. Policy, approvals, and audit define the boundary — and an enterprise needs all of them to let agents act safely at scale.