Safeguard
Security Guides•

What is a policy decision point versus a policy enforcement point?

The decision point evaluates the rules and the enforcement point acts on the answer. Why the split matters, and where each one usually lives in an API.

Safeguard Security Team
4 min read

A policy decision point (PDP) evaluates access rules and returns permit or deny. A policy enforcement point (PEP) sits in front of the action and applies that answer before releasing data or doing the work. Splitting them lets many services share one rule set, but the enforcing side still carries the responsibility.

The vocabulary in one table

The OWASP Authorization Patterns Cheat Sheet uses these terms, and OpenID AuthZEN defines an interface between the first two.

TermRoleEveryday example
PEP, enforcement pointProtects an operation and applies the decisionMiddleware or handler that refuses the request
PDP, decision pointEvaluates the applicable policyRule engine, library or service
PAP, administration pointManages and publishes the rulesRepo or console where policy is edited
PIP, information pointSupplies attributes the rules needUser directory, resource metadata

You can have all four in one process. A small app that checks if user.is_owner(doc) in a handler is its own PEP and PDP. The terms matter when you split them.

Where the PEP should live

The cheat sheet recommends keeping enforcement close to the protected resource so it can check the requested action, object and tenant. A gateway can enforce coarse rules and reject early, but it often lacks the object context. Object-level and business-specific checks belong in the service.

It also warns that a gateway does not give complete coverage on its own. You must restrict direct access to services and cover internal calls and alternate endpoints. Envoy's external authorization filter is cited as an example of delegating to a PDP, with a note that routing changes after authorization can invalidate an earlier check.

Where the PDP can live

Deployment is a separate choice from the access model. The cheat sheet lists three modes.

ModeBenefitRequired control
Embedded libraryWorks without a remote connectionKeep policy and data current
Local sidecar or daemonShared logic near the serviceRestrict its API, handle process failure
Remote serviceCentral administrationAuthenticate PEPs, protect responses, deny when no decision

Open Policy Agent, for example, supports HTTP, library and WebAssembly integration, so a product name does not tell you the deployment mode.

The part people get wrong

Separating decision from enforcement does not move the duty to enforce. The PEP must apply the result on every entry point. If one route skips the call, that route is open, however good the rules are.

A second mistake is trusting input to the PDP. The PEP should send verified subject context and authoritative resource attributes, not values copied from the request. A client claiming its own privileges is not an input to trust.

How to decide whether to split

  1. One service, simple rules: keep policy in code, centralized in one authorization layer.
  2. Several services needing consistent rules: separate the PDP and review policy on its own cadence.
  3. Need early rejection: add gateway checks, but keep service-level enforcement.
  4. Always: log the decision with enough policy version context to investigate, without exposing sensitive attributes.

Try it yourself

Click through it at your own pace, or open it full screen. Notice how a policy is evaluated at one point and enforced at another, the same split as a PDP and PEP.

Safeguard offers policies, gates and guardrails, plus dependency scanning for the libraries that implement your enforcement. Try the free scan at gold.safeguard.sh/scan.

Quick check

Is a gateway a PEP or a PDP?

Usually a PEP, and sometimes it calls out to a PDP. It rarely has object-level context, so services still need their own checks.

Does a central PDP mean one runtime for everyone?

No. Central policy ownership does not require a single central runtime. The decision engine can be embedded or local while policy is managed in one place.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.