3
Distinct decision models compared: hybrid RBAC/ABAC/ReBAC, ABAC with derived roles, and ReBAC-native hybrid
$0
Cost to run the core Cerbos PDP at any scale, under its Apache 2.0 license
2
Policy languages Permit.io supports natively for agent policy authoring: Rego and Cedar

SponsoredHorizon3.ai

Proactive Security for the AI Era

NodeZero continuously and autonomously pentests infrastructure, identity, cloud, and now web applications, chaining weaknesses across every domain the way real attackers do. Every finding ships with replayable proof showing exploitable business impact, not theoretical risk.

See NodeZero WebApp in action

Say an AI agent has already authenticated. Maybe it carries a workload credential brokered by something like Aembit, Descope, or WorkOS. Maybe it is acting under a human's session-bound authority passed through Auth0's Token Vault, Microsoft Entra Agent ID, or Okta Cross App Access. Either way, that credential answers who or what the agent is. It does not answer the question that actually determines what happens next: can this agent read this specific customer record, can it invoke this specific tool on behalf of this specific user, can it write to this specific document, right now, given everything else true about the request.

That question is a policy decision, and it is a distinct layer from identity issuance. This piece covers that third layer: standalone, policy-as-code authorization engines that a running application or agent calls at the moment of action to get a fine-grained allow or deny. Permit.io, Cerbos, and Oso are three current implementations. None of them issues credentials, brokers tokens, or manages OAuth flows. They answer one narrower question, repeatedly, fast, and auditably: given this actor, this action, and this resource, is the answer yes.

This is a companion piece, not a restatement. For the delegated-authority layer, an agent acting with a human's live, session-bound authority via OAuth token exchange, see our comparison of Auth0, Entra Agent ID, and Okta Cross App Access. For the workload-identity layer, an agent acting as an autonomous machine-to-machine caller that needs a short-lived, scoped credential rather than a standing secret, see our comparison of Aembit, Descope, and WorkOS. If you have not yet inventoried the non-human identities and service accounts already running in your environment, our non-human identity security guide is the place to start before layering any of the three products below on top. This article stays narrow to the authorization-decision layer: policy language and decision model, how each product sits in an agent's tool-invocation path, deployment, operational effort, pricing where it is public, and which team profile each one actually fits.

At a glance

Permit.ioCerbosOso
Decision modelHybrid: RBAC, ABAC, and ReBAC together, policy expressed in OPA/Rego or Cedar under a management layerPrimarily ABAC with derived roles (dynamic, condition-based roles) layered on RBAC; no native relationship-graph traversalHybrid: RBAC, ReBAC, and ABAC expressed together in Polar, with relationships modeled as graph-like facts
Where it runs in the agent's pathSaaS control plane for policy authoring and audit, paired with an open-source PDP container that runs local to the service for the actual per-call decisionSelf-hosted PDP you run as a sidecar or standalone service next to the agent's code; no vendor cloud is in the decision path at all unless you choose Cerbos Hub for policy managementOso Cloud answers checks over the network from a managed, globally replicated service, or evaluates locally against synced data using its local-authorization mode
Built-in AI agent framingYes: a documented four-perimeter model covering prompt filtering, RAG data access, and tool/MCP access specifically for agentsNo agent-specific product framing; agent authorization is modeled by hand as attributes on an existing ABAC/RBAC policyYes: repositioned in 2026 as an "AI Agent Security & Control Platform," including query-level filtering so an agent's data retrieval returns only permitted rows
LicensingManaged SaaS control plane; PDP itself is open sourcePDP is Apache 2.0, free, no usage caps, forever; Cerbos Hub is the commercial layerClosed-source managed service (Oso Cloud); the original open-source Polar library still exists but active development centers on Cloud
Public pricingYes: published self-serve tiers by MAU and tenant countPDP itself has no price; Cerbos Hub pricing is not listed as flat public numbersPartial: a free developer tier is public; paid tiers are not consistently listed with a flat public number
Best starting fitTeams that want a managed policy-authoring UI and out-of-the-box AI agent guardrails on top of a hybrid modelTeams that want a fully self-hosted, zero-cloud-dependency engine and are comfortable authoring policy as YAML/CELTeams whose access model is fundamentally relationship-shaped (sharing, hierarchies, delegation chains) and want a managed service with query-level filtering

Architecture: policy language and decision model

The three products answer the same question, but they model the underlying access relationships differently, and that difference shows up the moment an agent's permission logic gets past a handful of simple roles.

Cerbos is the most conventional of the three: attribute-based access control, with role-based access control still available underneath, and a mechanism called derived roles that lets a role's effective permissions change based on runtime conditions (an agent acting as an editor on a document it owns versus one it was merely shared) without hardcoding a new role for every combination. Policies are written in YAML with CEL-style conditions, not a general-purpose logic language. This is a deliberate ceiling: Cerbos does not model relationships as a traversable graph the way a ReBAC system does, so a genuinely relationship-heavy question, can this agent act on any document nested three folders below one this user owns, has to be expressed as attributes passed into the request rather than resolved by graph traversal inside the engine itself.

Oso goes the opposite direction. Its Polar language is a declarative, logic-based language that lets RBAC, ReBAC, and ABAC coexist in one policy rather than forcing a choice, and relationships are modeled as facts (this document belongs to this folder, this folder belongs to this workspace) that Oso Cloud can traverse to answer a check. The distinguishing capability for agent use cases specifically is that Oso can generate a filtered query, rather than a single yes/no answer, so an agent's data retrieval step (a RAG lookup, a search across records) can ask which rows this agent is allowed to see and get back only the permitted set, instead of running an unfiltered query and post-filtering the results in application code.

Permit.io sits between the two, both technically and in market positioning. It supports RBAC, ABAC, and ReBAC together, and lets teams author policy in either Rego (the language OPA popularized) or Cedar (the language AWS open-sourced for Verified Permissions), rather than inventing a third proprietary syntax. On top of that, Permit.io ships policy templates and guardrails specifically framed around agent behavior, described publicly as a four-perimeter model: policies that filter what reaches an LLM's prompt, policies that scope what a RAG pipeline can retrieve, and policies that gate which tools, MCP servers, and external APIs an agent is allowed to call. That framing does not change the underlying decision math, it is still RBAC/ABAC/ReBAC evaluated against a policy, but it means a team adopting Permit.io for agent use cases gets pre-shaped policy patterns for agent-specific choke points instead of building that modeling from scratch.

Where each engine sits in the call path also differs. Cerbos and Permit.io both keep the actual per-request decision local: Cerbos as a self-hosted sidecar or standalone service you run yourself, Permit.io as an open-source PDP container that syncs policy from its SaaS control plane but evaluates locally, so neither adds a network round trip to a vendor's cloud on every single tool call. Oso Cloud's default path answers checks over the network from a managed service, though its local-authorization mode (evaluating against data already synced to the caller) exists specifically to avoid that round trip when latency matters, meaning a team choosing Oso for latency-sensitive agent tool calls needs to plan for local authorization from the start rather than defaulting to the network path.

Free daily briefing

Briefings like this, every morning before 9am.

Threat intel, active CVEs, and campaign alerts, distilled for practitioners. 50,000+ subscribers. No noise.

Deployment model

Cerbos deploys as infrastructure you run and own: a container or binary placed as a sidecar next to each service, or as a shared standalone instance, with policies loaded from files, a Git repository, or Cerbos Hub if you want the commercial management layer. Nothing about the core PDP requires a connection to Cerbos's own servers to make a decision, which matters for air-gapped or strict data-residency environments. Permit.io splits the deployment: policy authoring, testing, and audit trail live in Permit.io's SaaS control plane, while the actual enforcement point is an open-source PDP container you run inside your own environment and that syncs policy bundles down from the control plane, so a network outage to Permit.io's cloud degrades policy updates, not live decision-making, assuming the PDP already has its last synced bundle. Oso Cloud is deployed as a managed service by default, meaning there is no PDP to run or patch, at the cost of authorization data living in Oso's infrastructure unless the team specifically adopts the local-authorization pattern to keep decision data closer to the caller.

Integrations

All three publish SDKs across the common backend languages (TypeScript/Node, Python, Go, Java, and others), and all three integrate at the point where application or agent code would otherwise write an inline permission check. Cerbos's integration story is the most protocol-neutral of the three: a gRPC or REST call to a PDP that could be running anywhere, with no dependency on a specific cloud or identity provider. Permit.io's integrations lean toward the agent and MCP ecosystem specifically, with documented patterns for gating MCP tool calls and RAG retrieval, plus support for teams that want to bring existing Rego or Cedar policies rather than start from zero. Oso's integration story centers on the data layer: because Oso Cloud can return a filtered query rather than a single check, it integrates most naturally where an agent's action is a data read across many rows (a search, a RAG retrieval, a list endpoint) rather than a single discrete action, which is a narrower but deeper integration surface than the other two.

Operational effort to adopt

None of the three is a configuration toggle; all three require modeling the actual resources, roles, and relationships an agent's actions touch before any check can return a meaningful answer, and that modeling work dominates the total effort far more than installing the SDK does. Cerbos's effort centers on writing and testing YAML policies with CEL conditions and derived roles for every resource type an agent can touch, plus standing up and operating the PDP fleet itself, which is real infrastructure work with no managed alternative unless Cerbos Hub is adopted for the authoring side. Permit.io's effort centers on deciding which policy language to standardize on (Rego or Cedar) if the team does not already have a preference, modeling the RBAC/ABAC/ReBAC relationships in Permit.io's data model, and configuring the agent-specific perimeters (prompt, RAG, tool access) rather than treating an agent as just another API caller. Oso's effort centers on translating the application's actual relationship graph (who owns what, what is nested under what, who was delegated what) into Polar facts and rules, which is a different kind of modeling than writing conditional role logic and tends to front-load more design work before the first check runs, though it pays off specifically when the access model really is relationship-shaped rather than attribute-shaped.

Pricing and availability

Cerbos is the most transparent of the three on price because there is effectively one number: the Cerbos PDP itself is Apache 2.0 licensed and free to run with no usage caps, on any infrastructure, indefinitely. Cerbos Hub, the commercial policy management and collaboration layer, exists as a paid product, but its pricing is not published as a flat, comparable number on Cerbos's public materials as reviewed for this piece, so a team that wants Hub specifically should confirm current terms directly rather than budgeting from a guess.

Permit.io publishes tiered, self-serve pricing scaled by monthly active users and tenant count. Its documented tiers describe a paid plan supporting up to roughly 25,000 MAU and 100 tenants across up to 5 environments, with a higher tier extending to roughly 50,000 MAU and 20,000 tenants across up to 50 environments and dedicated support. Treat these as the figures published at the time of writing, not a locked-in quote, and confirm current numbers before budgeting, since usage-based vendor pricing pages change without much notice.

Oso publishes a free developer tier for Oso Cloud, which is enough to build and test a policy end to end. Beyond that, we could not confirm a consistent, flat public price for paid Oso Cloud tiers directly from Oso's own current materials; one third-party review cites a paid tier starting near $149 per month, but that figure did not appear as a listed price on Oso's own site as reviewed for this piece, so it should be treated as a data point to verify with Oso directly, not a confirmed number.

Strengths and limitations, by vendor

Each engine's biggest strength tracks directly to the design choice behind it, and the limitation is usually the other side of that same choice.

Permit.io: broadest out-of-the-box agent framing, most moving parts to operate

Supporting RBAC, ABAC, and ReBAC together, plus Rego and Cedar policy authoring, plus documented agent-specific guardrails for prompts, RAG, and tool access, makes Permit.io the fastest path to a working agent authorization setup that already anticipates AI-specific choke points. The tradeoff is a split architecture, a SaaS control plane paired with a self-run PDP, which is more moving parts to understand and secure than a single self-hosted engine or a single managed cloud.

Cerbos: fully self-hostable and free at the core, weakest on native relationship modeling

A permissively licensed, zero-usage-cap PDP with no vendor cloud in the decision path is the strongest fit for teams with strict data-residency requirements or a hard no on sending authorization data to a third party. The limitation is that Cerbos has no native graph-based ReBAC; genuinely relationship-heavy access patterns have to be flattened into attributes and derived roles by hand, which gets harder to maintain as the relationship depth grows.

Oso: strongest for relationship-shaped access and data filtering, least transparent on price and the most centralized by default

Blending RBAC, ReBAC, and ABAC natively in one policy language, plus the ability to return a filtered query instead of a single check, fits an agent doing document- or record-level retrieval better than the other two. The limitation is that the default architecture is a managed cloud service with authorization data living in Oso's infrastructure unless a team deliberately adopts local authorization, and public pricing beyond the free tier is not consistently confirmable.

Best-fit guidance by policy complexity and existing infrastructure

There is no universal winner among these three; the right pick tracks the shape of the access model an agent actually needs enforced, and what the team already runs. A team building agents that call a genuinely diverse set of internal tools and RAG data sources, that wants agent-specific policy patterns already thought through rather than modeled from scratch, and that is comfortable running a self-managed PDP alongside a vendor's SaaS control plane, gets the most immediate value from Permit.io. A team with hard data-residency or air-gapped requirements, or one that already has infrastructure and platform engineers comfortable owning a PDP fleet and writing YAML policy, and whose access model is closer to roles-plus-conditions than a deep relationship graph, gets the most durable fit from Cerbos, in part because the core engine costs nothing to run at any scale. A team whose access model is fundamentally about relationships, an agent inheriting access through folder hierarchies, sharing chains, or delegation trees, and whose agents primarily need to filter what data they retrieve rather than gate single discrete actions, gets the most leverage from Oso, particularly now that it has repositioned specifically around agent security. A team already standardized on OPA and Rego across its broader infrastructure, not just for agents, may find that Permit.io's Rego support lets it extend that existing investment rather than adopting a wholly new policy language, which is worth weighing before treating Cerbos's or Oso's own languages as a green-field choice.

When none of these are the right fit yet

All three of these products solve for policy complexity that has already outgrown hardcoded checks. If an agent's actual footprint today is one or two internal tools with a small, stable set of callers, a hardcoded role check in the application code (this agent may call this endpoint, full stop) is not a security gap that needs a policy engine to close; it is an appropriately sized control for the actual blast radius, and standing up a PDP fleet or a managed policy cloud for that footprint adds operational surface without a matching reduction in risk. The signal that it is time to move to one of these three is usually the same signal that would push a human-facing application there: permissions that vary by resource attribute or relationship rather than a flat role, more than a couple of agents or tools that need consistent policy rather than each hand-rolling its own check, or a compliance or audit requirement to show, after the fact, exactly why a specific decision was allowed or denied. Separately, a team already running OPA/Rego at scale across non-agent services should weigh extending that existing investment (Permit.io's Rego support is the closest bridge among these three) before introducing an entirely separate policy language just for agent traffic, since running two unrelated policy stacks in parallel is its own maintenance cost.

A short PoC and evaluation checklist

Run these checks against one real agent workflow the team already operates, not a hypothetical, before committing to any of the three.

Model the hardest real relationship first, not the easiest

Pick the single most relationship-heavy or attribute-heavy access decision the agent actually needs to make (not a simple flat role check) and build that policy first in each candidate, since that is where the differences between ABAC-with-derived-roles and native ReBAC actually show up.

Measure decision latency inside the real tool-invocation path

Put the policy check at the actual point in the agent's tool-calling loop where it would run in production and measure added latency per call, not a synthetic benchmark, since a network round trip to a managed cloud reads very differently under real agent call volume than in a demo.

Confirm the audit trail answers a real incident question

After a multi-step agent task, confirm the logs can answer which policy rule allowed or denied a specific action for a specific agent and resource, not just that a check occurred, since that is the artifact a security team will actually need during an incident review.

Test a policy change under load, not just a redeploy

Change a permission mid-session (revoke a relationship, change an attribute) and confirm how quickly that change takes effect against an agent already mid-task, since the answer differs by architecture: a locally cached PDP, a synced bundle, and a live network call all propagate changes on different timelines.

Price the actual expected check volume, not the free tier

Estimate the number of authorization checks an agent fleet will generate at real production volume (every tool call, every RAG lookup, every write) against each vendor's pricing model, since Cerbos's free PDP, Permit.io's MAU-based tiers, and Oso's unclear paid tier scale very differently as check volume grows.

The bottom line

Permit.io, Cerbos, and Oso all answer the same question, given this agent, this action, and this resource, is the answer yes, but they get there through different decision models and different deployment shapes. Permit.io blends RBAC, ABAC, and ReBAC with Rego or Cedar policy authoring and ships agent-specific guardrails out of the box, at the cost of a split SaaS-plus-self-hosted architecture. Cerbos is a free, fully self-hostable ABAC-with-derived-roles engine with no native relationship graph, strongest where data residency or infrastructure ownership matters most. Oso blends RBAC, ReBAC, and ABAC natively in Polar and can filter a query instead of just answering a single check, strongest where access is genuinely relationship-shaped, at the cost of a managed-cloud default and less transparent pricing. None of these is the right layer for an agent's identity or its delegated authority, which are separate problems covered by the identity-issuance and OAuth-delegation comparisons this piece links to. And none of them is worth adopting for an agent footprint still small enough that a hardcoded role check does the job. The right pick tracks policy complexity, team size, and whether the organization already has a policy-as-code investment (OPA/Rego in particular) worth extending rather than replacing.

Frequently asked questions

What is fine-grained authorization for AI agents, and how is it different from agent identity or agent authorization delegation?

Fine-grained authorization is the policy decision that determines what a specific, already-identified agent is allowed to do, such as reading one particular record or invoking one particular tool for one particular user. It is distinct from identity issuance, which establishes what the agent is through a credential, and from delegated authority, which establishes whose authority the agent is acting under through an OAuth flow. Permit.io, Cerbos, and Oso operate at the authorization-decision layer specifically, after identity and delegation have already been established elsewhere.

What is the difference between ReBAC and ABAC for AI agent authorization?

ABAC, attribute-based access control, evaluates a policy against attributes of the actor, resource, and context, such as an agent's role or a document's classification. ReBAC, relationship-based access control, instead evaluates access by traversing relationships in a graph, such as an agent inheriting access to a document because it is nested inside a folder the requesting user owns. Cerbos is primarily ABAC with condition-based derived roles standing in for simple relationships, while Oso and Permit.io both model ReBAC natively alongside ABAC and RBAC.

Does Permit.io, Cerbos, or Oso issue credentials or manage OAuth tokens for AI agents?

No. All three are policy decision engines that answer an allow-or-deny question for an already-authenticated caller; none of them issues credentials, brokers OAuth tokens, or manages a token exchange flow. Credential issuance and delegated-authority token exchange are handled by a separate category of products, such as Aembit, Descope, and WorkOS for workload identity, or Auth0, Microsoft Entra Agent ID, and Okta Cross App Access for delegated human authority.

Can Cerbos handle relationship-based access control (ReBAC) for AI agents?

Not natively as a graph-traversal model. Cerbos supports RBAC and ABAC, with a feature called derived roles that lets a role's effective permissions change based on runtime conditions, which can approximate simple relationship logic, such as an agent that owns a resource getting different permissions than one that was merely shared it. Genuinely deep or many-layered relationship chains have to be flattened into attributes passed into the request rather than resolved by native graph traversal the way Oso's Polar language handles it.

How does Oso's query filtering help with AI agents doing RAG retrieval?

Oso Cloud can generate a filtered query instead of answering a single yes-or-no check, so when an agent's RAG pipeline or search step asks which records or documents it is allowed to see, Oso returns only the permitted set directly. This avoids the pattern of running an unfiltered retrieval and post-filtering results in application code afterward, which is both slower and easier to get wrong by accidentally exposing an unfiltered result before the filter runs.

When does a team not need Permit.io, Cerbos, or Oso for AI agent authorization?

When an agent's actual footprint is one or two internal tools with a small, stable set of callers, a hardcoded role check in application code is a reasonably sized control and does not yet justify the operational overhead of a dedicated policy engine. The signal to adopt one of these three is permissions that vary by resource attribute or relationship rather than a flat role, multiple agents or tools needing consistent policy enforcement, or an audit requirement to show exactly why a specific access decision was allowed or denied after the fact.

Sources & references

  1. Permit.io - Why AI Agents Choose Permit.io for Authorization
  2. Permit.io - RBAC vs ReBAC for AI Agents
  3. Permit.io - Pricing
  4. Cerbos - Cerbos Policy Decision Point (PDP)
  5. Cerbos - For Architects: Externalized Authorization
  6. Oso - The Polar Language in Oso Cloud
  7. Oso - AI Agent Security & Control Platform
  8. microservices.io - Implementing complex authorization using Oso Cloud local authorization

Free resources

25
Free download

Critical CVE Reference Card 2025–2026

25 actively exploited vulnerabilities with CVSS scores, exploit status, and patch availability. Print it, pin it, share it with your SOC team.

No spam. Unsubscribe anytime.

Free download

Ransomware Incident Response Playbook

Step-by-step 24-hour IR checklist covering detection, containment, eradication, and recovery. Built for SOC teams, IR leads, and CISOs.

No spam. Unsubscribe anytime.

Free newsletter

Get threat intel before your inbox does.

50,000+ security professionals read Decryption Digest for early warnings on zero-days, ransomware, and nation-state campaigns. Free, daily, no spam.

Unsubscribe anytime. We never sell your data.

Eric Bang
Author

Founder & Cybersecurity Evangelist, Decryption Digest

Cybersecurity professional with expertise in threat intelligence, vulnerability research, and enterprise security. Covers zero-days, ransomware, and nation-state operations for 50,000+ security professionals every morning.

Related Questions: Answer Hub

Giveaway: InfoSec World 2026 All Access Pass ($3,895 value)

Details →
Daily Briefing

Subscribe to enter the giveaway

Every subscriber is automatically entered. You also get daily threat intel every morning: zero-days, ransomware, and nation-state campaigns. Free. No spam.

Already subscribed? You're already entered.

Giveaway

Win a $3,895 InfoSec World 2026 pass.