TL;DR: Broken access control remains the dominant application authorization risk, and the article argues that policy-based access control is re-emerging because modern systems now need context-aware decisions across microservices, human users, and machine identities, according to Cerbos. The practical shift is away from scattered code checks toward centralized policy evaluation that can support least privilege, auditability, and real-time decisioning.
At a glance
What this is: This is an analysis of why policy-based access control is regaining traction as a response to broken access control and authorization sprawl.
Why it matters: It matters because IAM and security teams need authorization models that can govern human and non-human access consistently across distributed applications, APIs, and services.
By the numbers:
- 94% of applications tested in 2021 had some form of broken access control.
- Only 20% have formal processes for offboarding and revoking API keys, and even fewer have procedures for rotating them.
- 97% of NHIs carry excessive privileges, increasing unauthorised access and broadening the attack surface.
👉 Read Cerbos's analysis of policy-based access control for modern authorization
Context
Broken access control is what happens when applications decide who can do what through scattered rules, ad hoc role checks, and one-off exceptions that accumulate over time. In modern identity programmes, that creates a governance problem as much as a coding problem, because authorization logic becomes inconsistent across services, data stores, and machine identities.
Policy-based access control, or PBAC, moves authorization decisions out of application code and into a central policy engine. For IAM teams, that matters because the same decision model can be applied more consistently across human access, service accounts, APIs, and emerging agentic workloads, instead of relying on brittle embedded logic.
The article’s core point is that authorization deserves the same engineering discipline long given to authentication. That is the right framing for teams dealing with access reviews, least privilege, and audit requirements in environments where static roles no longer describe how access is actually consumed.
Key questions
Q: How should teams implement policy-based access control in modern applications?
A: Start by identifying the highest-risk authorization checks, then externalize those decisions into a central policy engine. Define policies around subject, resource, action, and context, and keep them under version control. The goal is consistent enforcement across services, with tests that confirm allow and deny behaviour before deployment.
Q: Why does PBAC work better than hardcoded role checks in distributed systems?
A: Hardcoded role checks spread authorization logic across codebases, which makes drift and missed checks more likely. PBAC centralises decision-making, so one policy change can apply consistently across services. That matters in microservices and multi-tenant systems where a coarse role model cannot express the full access context.
Q: What do security teams get wrong about policy-based access control?
A: They often treat PBAC as a feature choice rather than a governance model. The real value comes from making authorization reviewable, testable, and auditable. If policies are not owned, tested, and version controlled, PBAC can recreate the same confusion it was meant to remove.
Q: How do you know if authorization policy is actually improving least privilege?
A: Look for fewer embedded access checks, fewer exceptions that bypass the policy path, and clearer audit evidence for who can access what and why. If teams still need to inspect application code to explain access, the policy model is not yet governing the system effectively.
Technical breakdown
Why scattered authorization logic fails at scale
Traditional application authorization often starts with simple role checks, then grows into a web of exceptions, conditional branches, and service-specific logic. That creates authorization debt: the policy is no longer visible in one place, so teams cannot confidently reason about who can access what. The result is brittle access control, inconsistent enforcement, and a higher chance that one forgotten check becomes an exploitable gap. PBAC addresses this by externalizing decision logic into a central point that evaluates policy rather than embedded code.
Practical implication: move access decisions out of application code where authorization drift is hardest to detect.
How PBAC evaluates context, not just roles
PBAC uses declarative policies to evaluate attributes about the subject, the resource, the action, and the surrounding context. That means access can depend on department, data sensitivity, device state, time, location, or risk signals, rather than only on a coarse role. This makes PBAC closer to a governance engine than a static permission matrix. In zero-trust environments, that context sensitivity is what allows access decisions to stay aligned with actual session conditions instead of stale provisioning assumptions.
Practical implication: define policy inputs explicitly so contextual controls are measurable and reviewable.
Why policy-as-code changes authorization governance
PBAC is operationally stronger when policies are treated like code artifacts: version controlled, tested, and reviewed before deployment. That allows authorization to evolve without forcing full application redeploys, which is critical in microservice and multi-tenant environments. It also improves auditability because the decision rules are human readable and traceable over time. In practice, PBAC becomes a control plane for authorization rather than a collection of scattered implementation choices.
Practical implication: put authorization policies under version control and test them like production code.
NHI Mgmt Group analysis
PBAC is becoming necessary because broken access control is an authorization governance failure, not just a coding bug. When teams distribute permission checks across services, the control surface becomes impossible to reason about at scale. That is why the same access pattern can be denied in one app and accidentally allowed in another. The practitioner conclusion is straightforward: authorization needs a central governance model, not a patchwork of local implementation choices.
Policy-based access control creates a stronger baseline for NHI governance because machine access rarely fits role-only logic. Service accounts, API keys, and workload identities often need decisions that depend on resource sensitivity, environment, and operational context. RBAC alone cannot express that cleanly, which is why PBAC aligns better with least privilege for non-human identities. The practitioner conclusion is to treat machine authorization as a distinct policy problem rather than a human-access afterthought.
Context-aware authorization also exposes a deeper identity problem: least privilege cannot be maintained if the decision model is static while the environment is dynamic. Microservices, third-party integrations, and ephemeral workloads change the access picture continuously. A policy engine can adapt faster than hardcoded permissions, but only if policy ownership is explicit and reviewed. The practitioner conclusion is to align authorization governance with runtime reality, not provisioning-time assumptions.
Authorization has become a first-class identity discipline, and that shifts responsibility from developers alone to IAM and security architecture. When access decisions govern customer data, regulated workflows, and machine-to-machine actions, the policy model is part of enterprise control design. This is where PBAC intersects with governance, auditability, and zero trust. The practitioner conclusion is to treat authorization as an enterprise control plane that spans application teams and identity teams.
PBAC is also relevant to autonomous access patterns because externalized policy can constrain runtime decisions more consistently than embedded logic. As AI agents and other software actors begin to initiate actions across systems, static checks become harder to trust. Policy-driven authorization does not solve autonomy by itself, but it gives teams a clearer place to enforce decision boundaries. The practitioner conclusion is to design authorization for runtime behaviour, not only for named users.
From our research:
- 80% of identity breaches involved compromised non-human identities such as service accounts and API keys, according to the Ultimate Guide to NHIs.
- Only 5.7% of organisations have full visibility into their service accounts, which means most machine-identity estates remain difficult to govern in practice.
- For a broader control framework, see Ultimate Guide to NHIs , Key Challenges and Risks, which connects visibility gaps, over-privilege, and offboarding failures.
What this signals
Policy-based authorization will increasingly become the control plane for NHI governance, not a niche application pattern. As service accounts, APIs, and workload identities proliferate, static permission models will struggle to keep pace with runtime context. Teams should expect authorization architecture to sit closer to identity governance than to pure application development, especially where least privilege and auditability matter.
Context-aware decisioning is the real differentiator, because identity programmes now need to govern access at the point of use. That shifts attention from provisioning alone to whether the policy path can explain and enforce access consistently across systems. The practical signal to watch is whether access exceptions are disappearing or just moving into new layers of custom code.
The broader message is that authorization debt behaves like technical debt, but its consequences are governance failures. Enterprises that still rely on scattered checks will find it harder to support zero-trust assumptions, prove access intent, or extend control models cleanly into machine and autonomous access patterns.
For practitioners
- Centralise authorization decisions Move high-risk permission checks out of application code and into a policy decision point so access logic is visible, versioned, and reviewable across services.
- Model access around subject, resource, action, and context Define policies that include attributes such as department, data sensitivity, device state, and session risk, rather than relying only on coarse roles.
- Test policies before deployment Store authorization rules in version control and add unit tests for allow and deny cases so policy changes do not introduce regressions.
- Treat machine identities as a separate authorization class Apply PBAC patterns to service accounts, APIs, and workload identities where role-only models are too blunt for least privilege enforcement.
Key takeaways
- Broken access control persists because authorization logic is still too often embedded in application code instead of governed centrally.
- PBAC matters because it can express context-aware decisions for humans, service accounts, APIs, and other non-human identities.
- Teams that want stronger least privilege should treat policy design, testing, and review as core identity governance work.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
OWASP Non-Human Identity Top 10 address the attack and risk surface, while NIST CSF 2.0 and NIST Zero Trust (SP 800-207) set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| OWASP Non-Human Identity Top 10 | NHI-03 | Policy-driven authorization helps reduce excessive standing access for non-human identities. |
| NIST CSF 2.0 | PR.AC-4 | Least-privilege authorization is central to access enforcement across distributed systems. |
| NIST Zero Trust (SP 800-207) | AC-6 | Context-aware authorization aligns with zero-trust decisions at the point of use. |
Use dynamic policy evaluation to verify access continuously instead of trusting static roles.
Key terms
- Policy-Based Access Control: A model that decides access by evaluating policies at runtime instead of hardcoding permission checks inside each application. It centralises authorization logic so teams can express who may do what, under which conditions, and with what contextual signals across users, services, and workloads.
- Authorization Debt: The accumulation of fragile, duplicated, or poorly documented access rules over time. It appears when teams keep adding exceptions and ad hoc checks instead of maintaining a single policy model, making it harder to reason about access, audit decisions, and prevent privilege drift.
- Policy Decision Point: The component that evaluates authorization policies and returns allow or deny decisions at runtime. In a PBAC architecture, it is the central control plane for access decisions, while applications act as policy enforcement points that ask for a decision before proceeding.
- Context-Aware Authorization: An authorization approach that uses current conditions such as device, location, time, risk, or resource sensitivity when making access decisions. It is more adaptable than role-only models and is especially useful in zero-trust and distributed environments where access conditions change frequently.
Deepen your knowledge
NHI governance, agentic AI identity, and machine identity lifecycle are core topics in our NHI Foundation Level course, the industry's only accredited NHI security programme. If you are responsible for identity security strategy or NHI governance in your organisation, it is worth exploring.
This post draws on content published by Cerbos: Policy-based access control is back for modern authorization. Read the original.
Published by the NHIMG editorial team on 2025-08-28.
NHI Mgmt Group — the independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org