Skip to content

Foundations

PBAC Without a Governance Layer

1 min readEdit on GitHub

Policy-Based Access Control (PBAC) — the general family of approaches that includes ABAC, ReBAC, and engines like OPA, Cedar, Cerbos, and XACML — is a decision mechanism, not a governance process. A PBAC engine answers "is this action allowed, given this policy?" It does not answer "do we know every action this policy could allow, is that set of actions an acceptable risk, and can we prove afterward that only the allowed actions occurred?"

Those governance questions do not go away just because a more sophisticated decision engine is in place. Adopting PBAC without an accompanying governance layer typically just moves the ungoverned complexity from role definitions (RBAC's failure mode) into policy logic (PBAC's failure mode): policies accumulate the same way roles do, become just as hard to audit as roles were, and — because policy languages are more expressive than role assignments — can be harder to reason about exhaustively.

GovOps does not compete with PBAC engines and does not standardize a new one (see ../scope/README.md). It prescribes a governance process organized around capability_id that sits above whichever engine makes the decision: the capability catalog inventories what an engine could allow, independent of how the engine's policy is written, and the runtime correlation mechanism records what it actually allowed, independent of the engine's internal decision mechanics. This makes GovOps engine-neutral by design — any PBAC engine capable of tagging its decisions with a capability_id can participate.