Classic painting used as the article cover
← Back to blog

AUTHORIZATION

Role-Based Access Control for AI Agents

NIST named the way RBAC breaks in 2014 and called it role explosion. What a role can decide for an agent, what ABAC and ReBAC cost instead, and the catalogue-rot symptoms to watch for.

•Jul 13, 2026•Updated Oct 13, 2026•15 min
AuthorizationRBACSecurity

TL;DR

RBAC is the right place to start agent permissions and the wrong place to put everything, and the failure has had a name since 2014.

NIST SP 800-162 calls it role explosion: trying to express situational decisions in roles "would require the creation of numerous roles that are ad hoc and limited in membership." The same document says RBAC "does not easily support multi-factor decisions" and that role assignments "tend to be based upon more static organizational positions."

The common reading is that this means moving to attributes. Sometimes it does. NIST is equally blunt in the other direction: the cost of ABAC "may exceed its benefits in the long term," and an ABAC system "may not lend itself well" to answering who has access to what before a request is made, which is the question auditors actually ask.

We are not arguing for a bigger role catalogue or against one. Roles are the reviewable ceiling. They were never the per-request decision, and for agents there are now two subjects to bound rather than one.

What to do today: keep roles verb-scoped and few, make an agent's effective permission the intersection of the agent's role and the acting user's own access, and route the record-level and requester-level questions to something built for them.

Overview

Take an HR assistant agent with one role, hr-assistant, holding read access to leave balances and compensation bands. A team lead asks about a direct report's remaining leave and it should answer. An individual contributor asks about a colleague's salary band and it should not. Same role, same grant, opposite correct outcomes, and nothing in the role can tell the requests apart. That is not a flaw in how the role was written. RBAC assigns permissions to a named job, and both requests come from the same job.

What makes it worse for agents than it ever was for people is arithmetic. A human in that role makes a handful of sensitive requests a day and has a manager. An agent serves everyone who can invoke it, at machine rate, and the role is now attached to two subjects: the agent and whoever it is acting for. Most role catalogues were designed when there was only one.

RBAC answers "what kind of thing is this." It does not answer "should this particular request, from this particular person, about this particular record, go through," and no amount of role design will make it.

What RBAC Means for Agents

Role-based access control groups permissions into named roles and assigns those roles to actors instead of granting each capability one at a time. It is neither new nor vague. Ferraiolo and Kuhn formalised it in a 1992 paper at the 15th National Computer Security Conference; it became ANSI/INCITS 359-2004 on 11 February 2004, revised as INCITS 359-2012; and NIST cites an RTI International analysis estimating its RBAC research "saved industry $1.1 billion." Whatever its limits, that is three decades of operational evidence, which is more than any agent-specific authorisation scheme can claim.

For an agent, a role becomes a bundle that maps to a recognisable job:

  • An IT operations triage agent reads alerts, acknowledges incidents and posts status updates, and cannot restart production services.
  • A data analytics agent runs read-only warehouse queries and builds dashboards, and cannot write to source tables or export raw records.
  • A procurement assistant reads the vendor catalogue, drafts purchase requests and checks budget, and cannot approve a purchase order.

The role names the kind of work; the permissions name its verbs. An agent assigned analytics-readonly inherits a known set of capabilities and gets reasoned about as a category rather than a one-off.

Kubernetes is the largest RBAC deployment most engineers have touched, and its vocabulary carries over. A Role "always sets permissions within a particular namespace"; a ClusterRole is "a non-namespaced resource"; bindings attach one to a subject. The line worth memorising is the constraint: "Permissions are purely additive (there are no 'deny' rules)."

That is the design discipline in one clause. You cannot carve an exception out of a role already granted, so the only way to withhold something is to never put it in. Role design is subtractive work done before deployment, not corrective work after an incident.

Why RBAC Works as a Foundation

RBAC earns its place by making agent permissions standardised and reviewable, two properties that are hard to retrofit once permissions have sprawled.

Security teams approve a role once and reuse it across every agent of that type. Business teams can tell what an agent may do without reading a permission manifest. And a role called finance-reporting that quietly includes write access to ledgers is an obvious red flag precisely because the role gave it a name to violate.

There is a less obvious property, and NIST names it while discussing ABAC's weaknesses. Some organisations need "to know what access each individual has before the requests are made," which SP 800-162 calls "before the fact audit," and which exists "to demonstrate compliance to specific regulations or directives." RBAC answers that by construction: read the role, know the ceiling. This is what teams give up without noticing when they replace roles with computed decisions, and it is what an auditor will ask for.

Roles scale operationally too. A tenth analytics agent does not mean renegotiating permissions, and tightening access later means editing one role rather than chasing every agent granted something directly.

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 before anything more sophisticated gets involved.

Where RBAC Runs Out of Room

RBAC describes what kind of thing an agent may do. It is much weaker at describing when, on what, and on whose behalf, and agents constantly need those finer distinctions because a single role spans situations that deserve different treatment.

NIST wrote the diagnosis down in January 2014, a decade before anyone deployed an agent. SP 800-162 observes that "RBAC does not easily support multi-factor decisions," offers recent HIPAA training as a prerequisite a role cannot express, and notes that role assignments "tend to be based upon more static organizational positions, presenting challenges in certain RBAC architectures where dynamic access control decisions are required." Then the consequence: trying anyway "would require the creation of numerous roles that are ad hoc and limited in membership, leading to what is often termed 'role explosion'."

same role, same grant

role: hr-assistant

team lead asks about
a direct report

IC asks about
a colleague's salary

should answer

should not answer

Figure 1 — Two requests through the identical role, with opposite correct answers. That's the shape of every case RBAC alone can't handle.

A footnote in the same document reads like a specification of the problem. It gives three precision levels for one rule: "coarse: employees can read file X, fine: employees working on project A can read file X, and finer: employees working on project A during office hours can read file X." A role expresses the first. Only the first.

Three agent cases land on the wrong side of that line. A marketing agent may draft a campaign email but not send it externally without sign-off. A legal review agent may read most contracts but must be kept away from anything flagged privileged or under litigation hold. An analytics agent may query a dataset only if the person who invoked it can. Each depends on the record, the requester, or the moment.

Of the three, the legal case worries us most. Missing a privilege flag doesn't surface as an incident. It surfaces months later, in discovery, when the question is why a system that could read everything was never told the one thing that mattered.

Handle these with RBAC alone and the response is always the same: invent a narrower role. hr-assistant-own-records. hr-assistant-direct-reports. Do that enough times and the catalogue stops being something anyone can hold in their head, which was the entire reason RBAC was worth adopting.

RBAC, ABAC and ReBAC, and What Each Costs

The instinct after the section above is to replace roles with attributes. The two credible alternatives answer different questions, and both cost more to operate than a role. RBAC and ABAC are aact:authorization-model/role-based and per-action-policy in the Agent Access Control Taxonomy.

ModelThe question it answers wellWhat it costsThe honest weakness
RBAC"What kind of agent is this, and what is its ceiling?"Almost nothing. Read the role, know the answerCannot express record, requester or time. Role explosion when you try
ABAC"Does this subject, with these attributes, meet the rule for this object now?"Attribute plumbing and rule authoring. NIST: the cost "may exceed its benefits in the long term"Before-the-fact audit gets hard. Asking who can reach an object needs "a significant data retrieval and computation effort"
ReBAC"Is there a relationship path from this subject to this object?"A tuple store that has to stay in sync with the applicationRules that are not relationships, like time of day, do not fit

Table 1 — Three models, three different questions. Rows two and three are not upgrades to row one.

ABAC is the one most agent platforms drift toward, and NIST's own guide is the best argument for restraint. It says ABAC "is not the right solution for every access control problem but can prove viable for environments where subjects and objects carry a rich set of attributes," and it names a cost nobody budgets for: as authorisation moves "from the traditional method of provisioning an account and populating an ACL to an automated decision process, it will be more difficult for system users to understand and remedy access denials." For an agent that means a tool call failing for a reason nobody can explain, which is a support load rather than a security win.

AWS states the trade-off from the operator's side. Its IAM documentation names the RBAC disadvantage exactly, that "when you or your users add new resources to your environment, you have to update the policies to allow access to those resources," and sells ABAC on the grounds that it "requires fewer policies" and that "permissions scale with innovation." Both halves are true. The bill is the tagging discipline underneath.

ReBAC is the model fewest teams have evaluated and the one that fits several agent cases best, because "may query a dataset only if the invoking user can" is a relationship question. Google's Zanzibar paper (USENIX ATC '19) showed the approach holds at scale: it "scales to trillions of access control lists and millions of authorization requests per second" with "95th-percentile latency of less than 10 milliseconds and availability of greater than 99.999% over 3 years of production use." OpenFGA, whose syntax "closely follows the original syntax in the Zanzibar Paper," reduces the model to tuples of a user, a relation and an object: user:anne, editor, repo:auth0/express_jwt.

We think the honest answer for most teams is roles plus one narrow relationship check rather than a migration. Keep the role as the ceiling and add the single relationship question the domain turns on, usually whether the invoking user could reach the object themselves.

Designing Roles That Don't Explode

The discipline that keeps a catalogue useful is refusing to let it grow past what one person can read in one sitting.

Keep roles verb-scoped, not job-title-scoped. "Can read leave balances" is a role decision. "Is an HR agent" is not, because it invites every future HR-adjacent capability under one label. Separate roles for separate duties, the way procurement separates drafting a requisition from approving one, matters as much for an agent as for the person it is modelled on.

Build a small hierarchy where it helps: a base read-only role that several specific roles extend, rather than five that each redeclare the same read permissions. Kubernetes supports this through aggregated ClusterRoles, and the feature exists because flat catalogues duplicate rules until nobody can tell which copy is authoritative.

Treat every new role request as a design decision, not an inventory addition. If nobody can say in one sentence what makes it different from an existing role, it probably shouldn't exist. And the question at review time is never what to take away later. It is what we are about to hand over permanently.

What a Role Was Never Going to Decide

Requests that depend on the record, the requester or the moment aren't a failure of role design. They were never role-shaped, and the honest move is routing them elsewhere.

NIST SP 800-207, the zero trust architecture guide published August 2020, describes where they go. Its operative definition turns on "accurate, least privilege per-request access decisions," and two of its seven tenets are the relevant ones: access "is granted on a per-session basis," and access "is determined by dynamic policy, including the observable state of client identity, application/service, and the requesting asset," which "may include other behavioral and environmental attributes." A decision point and its matching enforcement component are the architectural home for everything a role cannot say.

For agents there is a second subject, and the standards already have vocabulary for it. RFC 8693's act claim exists to "express that delegation has occurred and identify the acting party to whom authority has been delegated," and may_act "makes a statement that one party is authorized to become the actor and act on behalf of another party." Read that as a design requirement. A role bounds the agent; the acting user's own access bounds the request; the effective permission is the intersection, aact:authorization-model/intersection-of-agent-and-user, and it is smaller than either.

OWASP's Agent Control Standard, published 1 September 2026, makes the same point from the operations side, requiring agents to be "inspectable, traceable and instrumentable" because "enterprises cannot rely on black-box agents operating across cloud, SaaS, on-premises and endpoint environments." A role is the inspectable part and neither of the other two.

no

yes

no

yes

no

yes

agent tool call

in the agent's role?

deny

does the acting user
hold it too?

deny

can the acting user
reach this record?

deny

allow, and log
agent + user + target

Figure 2 — Three gates. RBAC is the first one, and on its own it is the only one most deployments have.

Catalogue Rot, and Its Symptoms

Role explosion does not announce itself. It shows up as operational symptoms that are easy to read once you know they are the same disease.

SymptomWhat it meansWhat to do
Two roles differ by one permission and nobody can say whyA situational decision was encoded as a roleMerge them; move the distinction to a per-request check
A role name carries a qualifier like -own-records or -eu-onlyThe role is expressing a record filterThe filter belongs at the object level, not in the name
Nobody can say what an agent can do without reading five bindingsAggregation has outgrown its legibilityFlatten the agent-facing view, even if definitions stay composed
The fix for every denial is a new roleThere is no per-request layer, so roles absorb everythingAdd one, then stop growing the catalogue
An agent's role grants more tools than the invoking user hasThe effective permission is a maximum, not an intersectionCompute the intersection before the call
A denial cannot be explained to the person who hit itThe decision outgrew what the model can articulateNIST flags this as an ABAC transition cost. Log the reason

Table 2 — Six symptoms of a catalogue that has been asked to do the wrong job.

The fifth row is the agent-specific one, and the one we would instrument first, because it is silent by construction. Nothing fails. The agent holds a role permitting forty tools, the user it acts for is entitled to six, and the other thirty-four work fine until someone asks why.

In Practice

None of this requires a rewrite. It requires deciding which decisions belong in a role and resisting the pull to encode everything as a new one. A permission that is stable and tied to the agent's purpose belongs in the role. A permission that depends on the request, which record, which requester, which threshold, does not belong in a role at all, however tempting a narrower role looks in the moment.

Written out, an agent's role has two halves, and only the first is RBAC.

yaml
role: analytics-readonly
tools:
  - warehouse.query          # SELECT only
  - dashboard.create
  - dashboard.share
denied_by_omission:
  - warehouse.write          # never granted: additive models cannot revoke
  - export.raw_records

# Not expressible as a role. Evaluated per call, against the acting user.
per_request_checks:
  - acting_user_can_read: "${query.tables}"
  - row_filter: "region == acting_user.region"
  - max_rows: 50000

The second block is the one a role catalogue keeps trying to swallow. Keep it out. Every entry moved up into tools becomes a permission you cannot take back without editing the role for every agent sharing it.

Agentic Fabriq sits on the RBAC half of that split, deliberately. It runs default-deny across organisation, team and member with scope sets and per-user overrides, and an agent's effective tool list is the intersection of the user's scopes and the agent's, computed before the call. Every request carries two identities, the agent and the acting user, into the audit record. What it does not do is evaluate record-level rules for you. That check is yours to write, in the layer the second block describes.

Frequently Asked Questions

Is RBAC enough for AI agents? For bounding what kind of thing an agent is, yes. For deciding a specific request, no. NIST SP 800-162 says RBAC "does not easily support multi-factor decisions" and that trying anyway produces role explosion, and that was written in 2014 about human users.

What is role explosion? NIST's term for what happens when situational decisions are forced into roles: "the creation of numerous roles that are ad hoc and limited in membership." The tell is a catalogue where several roles differ by one permission and nobody remembers why.

Should we use ABAC instead of RBAC for agents? Not as a replacement. NIST's own guide says the cost of ABAC "may exceed its benefits in the long term" and that it suits environments where "subjects and objects carry a rich set of attributes." It also warns that before-the-fact audit gets hard. We think roles plus one narrow per-request check beats a migration for most teams.

What is ReBAC and when is it the right answer? Relationship-based access control, in the shape Google's Zanzibar paper described and OpenFGA implements: tuples of a user, a relation and an object. It is the right answer when your real rule is a relationship, and "the invoking user must be able to read this record themselves" is exactly that.

Can a role stop an agent acting outside a user's own access? Not on its own, because the role is attached to the agent. The acting user's entitlement has to be evaluated on the same call and the permission taken as the intersection. RFC 8693's act claim is the standards-track way to carry both parties.

Do agents need their own roles, or can they reuse human ones? Usually their own, narrower ones. Human roles were sized for a person who exercises a fraction of them, with judgment and a manager. An agent in the same role will exercise all of it, quickly.

Why can't we just add a deny rule? Some systems have them; the largest RBAC deployment most teams run does not. Kubernetes states that "permissions are purely additive (there are no 'deny' rules)," so the only reliable way to withhold a capability is never to grant it.

Roles and Boundaries

RBAC is a strong foundation and not the whole authorization strategy. Roles give an agent a recognisable identity and a reviewable ceiling, with three decades of tooling and audit practice behind them. On their own they don't capture what makes a single action safe in a specific moment, and they were never going to.

The answer isn't a bigger catalogue, and it usually isn't a migration either. It is a smaller catalogue that stays legible, plus the two checks a role structurally cannot make: whether the acting user holds the permission independently, and whether the named record is one they could reach themselves.

RBAC answers what kind of agent this is. It was never going to answer whether this particular action, right now, is the right call, and a role catalogue that tries to do both eventually does neither.

Sources

All URLs read 2026-09-29.