When reporting an issue, it is important to explain which standard you are implementing. A diagram on paper that only shows PEP, PIP, and PDP does not say much by itself. Technically, almost anything is possible, but we usually recommend following open standards, or at least proposed standards.
I recommend reviewing the latest standards, since no one is really talking about XACML anymore. Nowadays, if you want to use Keycloak as an Authorization Server, you must implement UMA (User-Managed Access). You can review that standard to better understand and clarify the concepts, but that’s when you end up relying on Keycloak policies, resources, permissions, and so on. That said, my two cents are that the standard has very limited adoption, so I generally do not recommend it.
If you want to expose an API protected by OAuth , acting as a Resource Server (RS) and using scopes or identity claims in your authz policies, the API can act as both PDP and PEP, or you can use an API Gateway or an authorization sidecar that acts as the PEP.
If you want to externalize and standardize authorization, I recommend reading the OpenID AuthZEN specifications [1].
Nowadays, it is hard to find a single PEP, since you usually have multiple PEPs for coarse-grained (CGA) and fine-grained (FGA) authorization. At the same time, you can have multiple authorization models, PBAC, ReBAC, ABAC, RBAC, etc. It all depends on the authorization and business requirements.
Finally, I also recommend reading Dasniko’s post. I am oversimplifying my answer here, since authorization is a hard problem to solve (I’ve written a couple of articles on these topics as well, if you want to review them [2]).
[1] AuthZEN Working Group - OpenID Foundation
[2] https://embesozzi.medium.com/