> On Jan. 4, 2023, 7:01 a.m., Madhan Neethiraj wrote:
> > security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
> > Lines 316 (patched)
> > <https://reviews.apache.org/r/74268/diff/4/?file=2273372#file2273372line316>
> >
> >     adding filter zoneId=RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID 
> > will not retrieve policies that are in security zones. Is zoneId filter 
> > necessary?
> 
> Ramachandran Krishnan wrote:
>     Will it create any security imapct when we use guid alone without passing 
> zoneId or zoneName or serviceName ?
>     If no, then we no need to put 
> zoneId=RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID will not retrieve 
> policies that are in security zones
> 
> Kirby Zhou wrote:
>     it seems created an security impact without 
> RANGER_UNZONED_SECURITY_ZONE_ID when zoneName is blank.
>     
>     The old code line300 set RANGER_UNZONED_SECURITY_ZONE_ID too.
>     
>     But if zoneName is not black, you should pass it to SQL query.
> 
> Ramachandran Krishnan wrote:
>     Kirby Zhou/Madhan,
>      
>     As part of the fix we added the RANGER_UNZONED_SECURITY_ZONE_ID for 
> zoneId when guid is not null and serviceName,zoneName is null
>     
>     select obj from XXPolicy obj where obj.guid = :guid and obj.zoneId = 
> :zoneId
>     
>     zoneId ---> RANGER_UNZONED_SECURITY_ZONE_ID(1L)
>     to avoid the security impact .

if (StringUtils.isNotBlank(serviceName)) {
                                if (StringUtils.isBlank(zoneName)) {
                    // query with guid, serviceName and 
RANGER_UNZONED_SECURITY_ZONE_ID
                                        return 
getEntityManager().createNamedQuery("XXPolicy.findPolicyByPolicyGUIDAndServiceName",
 tClass)
                                                .setParameter("guid", guid)
                                                .setParameter("serviceName", 
serviceName)
                                                .setParameter("zoneId", 
RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID)
                                                .getSingleResult();
                                } else {
                    // query with guid, serviceName and zoneName
                                        return getEntityManager()
                                                
.createNamedQuery("XXPolicy.findPolicyByPolicyGUIDAndServiceNameAndZoneName", 
tClass)
                                                .setParameter("guid", guid)
                                                .setParameter("serviceName", 
serviceName)
                                                .setParameter("zoneName", 
zoneName)
                                                .getSingleResult();
                                }
                        } else {
                                if (StringUtils.isNotBlank(zoneName)) {
                   // query with guid and zoneName

                                        return getEntityManager()
                                                
.createNamedQuery("XXPolicy.findPolicyByPolicyGUIDAndZoneName", tClass)
                                                .setParameter("guid", guid)
                                                .setParameter("zoneName", 
zoneName)
                                                .getSingleResult();
                                } else {
                    // query with guid and RANGER_UNZONED_SECURITY_ZONE_ID

                                        return getEntityManager()
                                                
.createNamedQuery("XXPolicy.findPolicyByPolicyGUID", tClass)
                                                .setParameter("guid", guid)
                                                .setParameter("zoneId", 
RangerSecurityZone.RANGER_UNZONED_SECURITY_ZONE_ID)
                                                .getSingleResult();
                                }
                        }
            
  Kirby Zhou/Madhan,

I hope this will cover all the cases


- Ramachandran


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/74268/#review225041
-----------------------------------------------------------


On Jan. 4, 2023, 5:09 a.m., Ramachandran Krishnan wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/74268/
> -----------------------------------------------------------
> 
> (Updated Jan. 4, 2023, 5:09 a.m.)
> 
> 
> Review request for ranger, Don Bosco Durai, Abhay Kulkarni, Madhan Neethiraj, 
> Mehul Parikh, Nikhil P, Pradeep Agrawal, Ramesh Mani, Selvamohan Neethiraj, 
> Sailaja Polavarapu, Subhrat Chaudhary, and Velmurugan Periasamy.
> 
> 
> Bugs: RANGER-4031
>     https://issues.apache.org/jira/browse/RANGER-4031
> 
> 
> Repository: ranger
> 
> 
> Description
> -------
> 
> Not able to fetch Policy details using guid /api/policy/guid/{guid} without 
> service name
> 
> Request without servicename 
> 
> curl -s -L -X GET 
> "https://q************/service/public/v2/api/policy/guid/****-2f42-4451-9edf-****";
>  -H "Content-Type: application/json" -H "Accept: application/json" -H 
> "Authorization: Basic *********DEyMw=="
> Response : 404 
> 
> Request with servicename 
> 
> curl -s -L -X GET 
> "https://****************/service/public/v2/api/policy/guid/*****-2f42-4451-9edf-****?serviceName=hive";
>  -H "Content-Type: application/json" -H "Accept: application/json" -H 
> "Authorization: Basic ***************=="
> Response Proper : 200 with proper details 
> 
> Code : 
> https://github.com/apache/ranger/blob/master/security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java#L505
> 
> @GET  @Path("/api/policy/guid/{guid}")        
> @Produces({ "application/json", "application/xml" })
> public RangerPolicy 
> getPolicyByGUIDAndServiceNameAndZoneName(@PathParam("guid") String guid,      
>                                                                               
>                                        @DefaultValue("") 
> @QueryParam("serviceName") String serviceName,                                
>                                                                               
>                   @DefaultValue("") @QueryParam("ZoneName") String zoneName) {
>               return 
> serviceREST.getPolicyByGUIDAndServiceNameAndZoneName(guid, serviceName, 
> zoneName);       } 
> As query parameters are optional it should give proper response 
> 
> Expected : User should be able to get policy details using only guid in path 
> params 
> 
> 
> As part of the current design, Ranger expects both serviceName,guid should be 
> mandatory and zoneName can be optional 
> Proposal:
> Add the logic to fetch the RangerPolicy by guid from the backend
> 
> 
> Diffs
> -----
> 
>   security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java 
> 6b9604817 
>   security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java 
> 37d7561d4 
>   security-admin/src/main/java/org/apache/ranger/rest/PublicAPIsv2.java 
> c7a6ea0a6 
>   security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java 
> e17494fa9 
>   security-admin/src/main/resources/META-INF/jpa_named_queries.xml 85c8b6213 
>   security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java 
> 7f1ec6d3e 
>   security-admin/src/test/java/org/apache/ranger/rest/TestPublicAPIsv2.java 
> 2a123de93 
>   security-admin/src/test/java/org/apache/ranger/rest/TestServiceREST.java 
> 7b15810e0 
> 
> 
> Diff: https://reviews.apache.org/r/74268/diff/4/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Ramachandran Krishnan
> 
>

Reply via email to