Fateh Singh created RANGER-4733:
-----------------------------------

             Summary: Bug in tag policy cache computation for a given service - 
irrelevant tag policies found
                 Key: RANGER-4733
                 URL: https://issues.apache.org/jira/browse/RANGER-4733
             Project: Ranger
          Issue Type: Bug
          Components: Ranger
            Reporter: Fateh Singh
            Assignee: Fateh Singh


While testing the hasTagPolicies function of the policy engine, I observed that 
even though for a given service, there are no tag based policies, still some 
tag based policies are found in the policy cache for a given service.

 

 
{code:java}
PolicyEngine.java
    public boolean hasTagPolicies(RangerPolicyRepository tagPolicyRepository) {
        if (LOG.isDebugEnabled()){
            LOG.debug("PolicyEngine.hasTagPolicies 
tagPolicies="+tagPolicyRepository.getPolicies().toString());
        }
        return tagPolicyRepository != null && 
CollectionUtils.isNotEmpty(tagPolicyRepository.getPolicies());
    }
{code}
 

 

Below scenarios were tested for analysis-

Scenario 1: If an existing policy which has base as a policy and is now 
modified such that base is no longer a service mentioned in any of the 
conditions in the tag based policy, then “policies” still has this tag based 
policy but with various conditions and policy items as empty lists (this is 
unexpected behavior because ideally, policies list should have been empty 
instead of it existing but policy items being empty)

Scenario 2: If a new tag policy is created but hbase is not mentioned as a 
service, then still “policies” list has this policy in the hbase policy cache 
(with policy items list being empty) which is unexpected behavior (similar to 
Scenario 1)

Scenario 3: If a tag policy is disabled (and there are no other tag policies), 
then the tag repository exists but “policies” list does not exist in the 
tagPolicies data structure (which is expected behavior i.e. policy is deleted 
from policy cache)

Scenario 4: If all tag policies for cm_tag are either disabled or deleted then 
“policies” list does not exist (expected behavior similar to Scenario 3)

Scenario 5: cm_tag is disassociated from hbase- tag policy respository I.e. 
tagPolicies in policy cache is removed (which is the expected behavior)

 

Illustration of Scenario 1:

When Hbase is listed as a service in a tag based policy item:

 
{code:java}
2024-03-04 16:13:31,853 DEBUG 
org.apache.ranger.plugin.policyengine.PolicyEngine: PolicyEngine.hasTagPolicies 
tagPolicies=[RangerPolicy={id={4} guid={3d82d579-bce0-4527-a23e-53dbcda21f4d} 
isEnabled={true} createdBy={null} updatedBy={null} createTime={null} 
updateTime={null} version={3} service={cm_tag} name={EXPIRES_ON} policyType={0} 
policyPriority={0} description={Policy for data with EXPIRES_ON tag} 
resourceSignature={null} isAuditEnabled={true} serviceType={tag} 
resources={tag={RangerPolicyResource={values={EXPIRES_ON } isExcludes={false} 
isRecursive={false} }} } policyLabels={} policyConditions={} policyItems={} 
denyPolicyItems={RangerPolicyItem={accessTypes={RangerPolicyItemAccess={type={read}
 isAllowed={true} }RangerPolicyItemAccess={type={write} isAllowed={true} 
}RangerPolicyItemAccess={type={create} isAllowed={true} 
}RangerPolicyItemAccess={type={admin} isAllowed={true} 
}RangerPolicyItemAccess={type={execute} isAllowed={true} }} users={} 
groups={public } roles={} 
conditions={RangerPolicyCondition={type={accessed-after-expiry} values={yes } 
}} delegateAdmin={false} }} allowExceptions={} denyExceptions={} 
dataMaskPolicyItems={} rowFilterPolicyItems={} options={} validitySchedules={, 
zoneName=null, isDenyAllElse={false} }}]
 
{code}
 

When Hbase is removed from all tag based policies :
{code:java}
2024-03-04 16:25:01,584 DEBUG 
org.apache.ranger.plugin.policyengine.PolicyEngine: PolicyEngine.hasTagPolicies 
tagPolicies=[RangerPolicy={id={4} guid={3d82d579-bce0-4527-a23e-53dbcda21f4d} 
isEnabled={true} createdBy={null} updatedBy={null} createTime={null} 
updateTime={null} version={4} service={cm_tag} name={EXPIRES_ON} policyType={0} 
policyPriority={0} description={Policy for data with EXPIRES_ON tag} 
resourceSignature={null} isAuditEnabled={true} serviceType={tag} 
resources={tag={RangerPolicyResource={values={EXPIRES_ON } isExcludes={false} 
isRecursive={false} }} } policyLabels={} policyConditions={} policyItems={} 
denyPolicyItems={} allowExceptions={} denyExceptions={} dataMaskPolicyItems={} 
rowFilterPolicyItems={} options={} validitySchedules={, zoneName=null, 
isDenyAllElse={false} }}]{code}
Note here that policy still exists but the items lists are empty here instead 
of policy not existing in hbase policy cache

 

*Scenario 1 and Scenario 2* need to be fixed so that no tag based policies 
should be there in policy cache of a service if there are no relevant policies 
(instead of returning all policies relevant to other services but with empty 
policy items in the data structure)

 

*Impact:* While no impact in policy evaluation, there could be performance 
impact due to this because if there are tag policies found then various 
computations are performed for every request such as finding relevant tags etc.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to