You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ranger.apache.org by "Vyom Mani Tiwari (Jira)" <ji...@apache.org> on 2026/10/16 10:42:00 UTC
[jira] [Created] (RANGER-5845) Supported-constraint registration: deny access when a returned constraint is not supported by the caller
Vyom Mani Tiwari created RANGER-5845:
----------------------------------------
Summary: Supported-constraint registration: deny access when a returned constraint is not supported by the caller
Key: RANGER-5845
URL: https://issues.apache.org/jira/browse/RANGER-5845
Project: Ranger
Issue Type: Improvement
Components: Ranger
Reporter: Vyom Mani Tiwari
Assignee: Vyom Mani Tiwari
RANGER-5842 adds constraint-policy evaluation: when access is allowed, the policy engine returns all matching constraints in {{{}RangerAccessResult.getConstraintResults(){}}}. If a caller can’t enforce a returned constraint (for example {{{}requireApproval{}}}), it might silently ignore it. This sub-task adds a way for plugins and PDP callers to declare which constraints they support. If a returned constraint isn’t supported, the result becomes a deny.
_Proposed behavior_
* A plugin registers the names of the constraints it supports.
* After constraint evaluation in {{{}RangerPolicyEngineImpl.evaluateConstraintPolicies{}}}, if any matched constraint isn’t in the supported set:
** the result becomes a deny ({{{}isAllowed=false{}}}) with reason {{{}unsupported constraint: <name>{}}};
** the constraint results are cleared;
** the deny is audited, with the policy id of the constraint policy.
* When nothing is registered, the plugin supports no constraints, so it fails closed.
* A service with no constraint policies behaves as today.
_Open questions (for discussion before implementation)_
# *Registration mechanism:* a {{RangerBasePlugin}} API (e.g. {{{}setSupportedConstraints(Set<String>){}}}), a per-service property (e.g. {{{}ranger.plugin.<service>.supported.constraints=requireApproval,maxRows{}}}), or both? Proposal: both, with config overriding the API.
# *Default when nothing is registered:* support none, so any returned constraint is denied? Proposal: yes.
# *PDP / authz-api callers:* a shared PDP serves many callers, so a per-plugin set doesn’t fit. Should callers declare support per request (e.g. {{{}context.supportedConstraints{}}}), or per service in the PDP configuration? Proposal: a request field, falling back to PDP config.
_Out of scope:_ Admin storage and validation of constraint policies, audit schema changes beyond the deny reason, UI, and the authz-api response format (separate sub-tasks).
_Testing:_ policy-engine JSON tests for:
* a supported constraint, which is allowed and returns its constraints;
* an unsupported constraint, which is denied with the reason;
* nothing registered, which is denied;
* a mix of supported and unsupported constraints, which is denied;
* no constraint policies, which leaves behavior unchanged;
* config and API registration, including precedence.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)