Re: Question about group policies
Ramesh, thanks. Alex, it seems you are confusing between the Plugin Interface and the Ranger API (isAccessAllowed()). For HAWQ, you will be implementing the Plugin Interface (akin RangerKafkaAuthorizer) and in that plugin you will (or could) use Hadoop Common to get the groups for the users. If you share you plugin code, we can review and help. > - Might there be a difference between handling LDAP groups vs. groups > manually created ? To avoid confusion, you should ignore the users and groups created manually in Ranger Admin. The users and groups in Ranger Admin are there only to help associating users/groups to policies. If you are doing sync with LDAP, then you shouldn’t be manually creating any users or groups. This could be mis-leading for some. Happy to clarify more if needed. Thanks Bosco On 3/30/17, 2:39 PM, "Ramesh Mani"wrote: Alex, What I was mentioning when you do plugin.isAccessAllowed(request), your request should contain both user / group and to get the group information you can use Hadoop UserGroupInformation API. That is what Don Bosco Durai was mention in this last email. Additional comments I have put against your questions below. Thanks, Ramesh On 3/29/17, 3:14 PM, "Alexander Denissov" wrote: >Don, Ramesh, Abhay -- thank you for your replies. > >I am still quite confused, though :( While Ramesh and Abhay state that a >client needs to provide group membership explicitly when calling >isAccessAllowed() plugin API, Don implies that it is not necessary and we >can only call with a username. > >Also, one of our engineers tested with LDAP groups and says that LDAP >groups work, while groups created via Ranger UI do not. By "work" I mean >when a user is a member of the group and only a group policy is defined, >then passing only the username results in policy evaluating correctly and >granting access to the resource. I have not yet tested this LDAP scenario >myself. Ramesh Mani: Groups created via Ranger must be the groups which are in OS or in LDAP. Users and Groups that are in Ranger are only for Policy creation and Login into Ranger admin. > >So, I'll try asking again: >- Does the client have to pass user groups to API call or passing just a >username is sufficient ? Ramesh Mani: For plugin.isAccessAllowed(request), request should have user and group. Prior to building the request you will need to make the hadoop api call to create the UGI and create the user and group and use it in the request. Refer this : https://github.com/apache/ranger/blob/master/plugin-kafka/src/main/java/org /apache/ranger/authorization/kafka/authorizer/RangerKafkaAuthorizer.java#L1 39 Here plugin provides only the username to create UGI. Hadoop user group mapping should be done correctly to get this user / group mapping to be resolved . Also can make sure by doing “hdfs groups ” resolves to get the groups for that user for the user you are doing. Refer this parameter for more details: https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/co re-default.xml org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback >- If Ranger plugin is able to get user-group membership from Ranger >Admin, does it happen during policy sync or as a separate process ? If >separate, how often does the sync happen ? Ramesh Mani: Ranger Plugin gets only the policies defined in the ranger admin periodically ( every 30 sec by default) User and Groups are determined by the above mentioned hadoop api in the plugin when request is created. >- Might passing an empty set for roles parameter to the API circumvent >automatic lookup (if such even exists) ? Should we pass null instead ? Ramesh Mani : Not sure which api you are mentioning here? >- Might there be a difference between handling LDAP groups vs. groups >manually created ? Ramesh Mani. The core-site.xml has set of param for LDAP user group mapping. Or other methods to use SSSD / Centrify / NSLCD / Winbind to connect linux OS with LDAP. First you can try with Linux OS level user group mapping. >-- >Thanks, >Alex. > >On 2017-03-24 16:12 (-0700), Don Bosco Durai wrote: >> Alex >> >> Both Abhay and Ramesh are correct. In the Hadoop eco-system we want to >>ensure that the users and groups are consistent across all components. >>And generally, AD/LDAP or Unix system user/groups are the source of >>truth. >> >> >> >>This also means user <--> group mapping in Ranger
Re: Question about group policies
Alex, What I was mentioning when you do plugin.isAccessAllowed(request), your request should contain both user / group and to get the group information you can use Hadoop UserGroupInformation API. That is what Don Bosco Durai was mention in this last email. Additional comments I have put against your questions below. Thanks, Ramesh On 3/29/17, 3:14 PM, "Alexander Denissov"wrote: >Don, Ramesh, Abhay -- thank you for your replies. > >I am still quite confused, though :( While Ramesh and Abhay state that a >client needs to provide group membership explicitly when calling >isAccessAllowed() plugin API, Don implies that it is not necessary and we >can only call with a username. > >Also, one of our engineers tested with LDAP groups and says that LDAP >groups work, while groups created via Ranger UI do not. By "work" I mean >when a user is a member of the group and only a group policy is defined, >then passing only the username results in policy evaluating correctly and >granting access to the resource. I have not yet tested this LDAP scenario >myself. Ramesh Mani: Groups created via Ranger must be the groups which are in OS or in LDAP. Users and Groups that are in Ranger are only for Policy creation and Login into Ranger admin. > >So, I'll try asking again: >- Does the client have to pass user groups to API call or passing just a >username is sufficient ? Ramesh Mani: For plugin.isAccessAllowed(request), request should have user and group. Prior to building the request you will need to make the hadoop api call to create the UGI and create the user and group and use it in the request. Refer this : https://github.com/apache/ranger/blob/master/plugin-kafka/src/main/java/org /apache/ranger/authorization/kafka/authorizer/RangerKafkaAuthorizer.java#L1 39 Here plugin provides only the username to create UGI. Hadoop user group mapping should be done correctly to get this user / group mapping to be resolved . Also can make sure by doing “hdfs groups ” resolves to get the groups for that user for the user you are doing. Refer this parameter for more details: https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/co re-default.xml org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback >- If Ranger plugin is able to get user-group membership from Ranger >Admin, does it happen during policy sync or as a separate process ? If >separate, how often does the sync happen ? Ramesh Mani: Ranger Plugin gets only the policies defined in the ranger admin periodically ( every 30 sec by default) User and Groups are determined by the above mentioned hadoop api in the plugin when request is created. >- Might passing an empty set for roles parameter to the API circumvent >automatic lookup (if such even exists) ? Should we pass null instead ? Ramesh Mani : Not sure which api you are mentioning here? >- Might there be a difference between handling LDAP groups vs. groups >manually created ? Ramesh Mani. The core-site.xml has set of param for LDAP user group mapping. Or other methods to use SSSD / Centrify / NSLCD / Winbind to connect linux OS with LDAP. First you can try with Linux OS level user group mapping. >-- >Thanks, >Alex. > >On 2017-03-24 16:12 (-0700), Don Bosco Durai wrote: >> Alex >> >> Both Abhay and Ramesh are correct. In the Hadoop eco-system we want to >>ensure that the users and groups are consistent across all components. >>And generally, AD/LDAP or Unix system user/groups are the source of >>truth. >> >> >> >>This also means user <--> group mapping in Ranger is NOT the >>source of >> >>truth, but rather a mirror of some other authentication system >>(OS, LDAP, >> >>etc) and a service will need to fetch this information upon user >> >>authentication and provide to Ranger ? >> >> Based on some of the earlier discussion on the HAWQ/Ranger integration >>design model, it was decided to run the Ranger Plugin in another >>process. If it is still the case, you just need to send the user from >>the HAWQ side and the Ranger Plugin would be able to get the groups from >>the AD/LDAP/Unix using Hadoop Common APIs. Ranger does the same for >>Kafka and Solr integrations, because both these systems call the Ranger >>plugin API only with the username. >> >> Let me know if you need additional information. >> >> Thanks >> >> Bosco >> >> >> >> >> On 3/24/17, 12:50 PM, "Ramesh Mani" wrote: >> >> Adding to Abhay comment, >> >> In most of the Ranger Plugin from the components side we use >> org.apache.hadoop.security.UserGroupInformation API >> >>https://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/security/User >>Gr
Re: Question about group policies
Alex Both Abhay and Ramesh are correct. In the Hadoop eco-system we want to ensure that the users and groups are consistent across all components. And generally, AD/LDAP or Unix system user/groups are the source of truth. >>This also means user <--> group mapping in Ranger is NOT the source of >>truth, but rather a mirror of some other authentication system (OS, LDAP, >>etc) and a service will need to fetch this information upon user >>authentication and provide to Ranger ? Based on some of the earlier discussion on the HAWQ/Ranger integration design model, it was decided to run the Ranger Plugin in another process. If it is still the case, you just need to send the user from the HAWQ side and the Ranger Plugin would be able to get the groups from the AD/LDAP/Unix using Hadoop Common APIs. Ranger does the same for Kafka and Solr integrations, because both these systems call the Ranger plugin API only with the username. Let me know if you need additional information. Thanks Bosco On 3/24/17, 12:50 PM, "Ramesh Mani"wrote: Adding to Abhay comment, In most of the Ranger Plugin from the components side we use org.apache.hadoop.security.UserGroupInformation API https://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/security/UserGr oupInformation.html which will wrap around JAAS and provides the mechanism to determine the User and Groups. Please check if this can be used. Thanks, Ramesh On 3/24/17, 12:03 PM, "Abhay Kulkarni" wrote: >Hi Alex, > >This is exactly right. Users, groups and their associations in Ranger >(specifically Ranger Admin) are props for being able to define policies. >They are not the Œsource of truth¹. It is expected that the correct user ><‹-> group associations will be available in the component (service) from >appropriate authentication system, and provided to Ranger Plugin as part >of authorization request. > >Thanks! >-Abhay > >On 3/24/17, 11:51 AM, "Alexander Denissov" wrote: > >>Hi Ranger experts, >> >>We are developing a custom Ranger Plugin for Apache HAWQ(incubating) and >>noticed that group policies are not behaving as we expected. >> >>In Ranger, we define a user U (actually synched from OS). We then >>manually >>define group G and enroll user U into it. We then define a policy and >>grant >>a privilege to the group G in this policy. >> >>On the client side, we do not know that user U belongs to group G, as >>this >>information is only defined in Ranger. When we request policy evaluation, >>we send an empty set for the userGroups API parameter, assuming Ranger >>will >>use its internal mapping. But the access is denied by Ranger. >> >>So, it seems Ranger will not use the information from its internal user >><--> group mapping when evaluating policies and would rely on client >>providing the set of groups for the user explicitly ? >> >>This also means user <--> group mapping in Ranger is NOT the source of >>truth, but rather a mirror of some other authentication system (OS, LDAP, >>etc) and a service will need to fetch this information upon user >>authentication and provide to Ranger ? >> >>I will appreciate clarification on these points. >>-- >>Thanks, >>Alex. > >
Re: Question about group policies
Adding to Abhay comment, In most of the Ranger Plugin from the components side we use org.apache.hadoop.security.UserGroupInformation API https://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/security/UserGr oupInformation.html which will wrap around JAAS and provides the mechanism to determine the User and Groups. Please check if this can be used. Thanks, Ramesh On 3/24/17, 12:03 PM, "Abhay Kulkarni"wrote: >Hi Alex, > >This is exactly right. Users, groups and their associations in Ranger >(specifically Ranger Admin) are props for being able to define policies. >They are not the Œsource of truth¹. It is expected that the correct user ><‹-> group associations will be available in the component (service) from >appropriate authentication system, and provided to Ranger Plugin as part >of authorization request. > >Thanks! >-Abhay > >On 3/24/17, 11:51 AM, "Alexander Denissov" wrote: > >>Hi Ranger experts, >> >>We are developing a custom Ranger Plugin for Apache HAWQ(incubating) and >>noticed that group policies are not behaving as we expected. >> >>In Ranger, we define a user U (actually synched from OS). We then >>manually >>define group G and enroll user U into it. We then define a policy and >>grant >>a privilege to the group G in this policy. >> >>On the client side, we do not know that user U belongs to group G, as >>this >>information is only defined in Ranger. When we request policy evaluation, >>we send an empty set for the userGroups API parameter, assuming Ranger >>will >>use its internal mapping. But the access is denied by Ranger. >> >>So, it seems Ranger will not use the information from its internal user >><--> group mapping when evaluating policies and would rely on client >>providing the set of groups for the user explicitly ? >> >>This also means user <--> group mapping in Ranger is NOT the source of >>truth, but rather a mirror of some other authentication system (OS, LDAP, >>etc) and a service will need to fetch this information upon user >>authentication and provide to Ranger ? >> >>I will appreciate clarification on these points. >>-- >>Thanks, >>Alex. > >
Re: Question about group policies
Hi Alex, This is exactly right. Users, groups and their associations in Ranger (specifically Ranger Admin) are props for being able to define policies. They are not the Œsource of truth¹. It is expected that the correct user <‹-> group associations will be available in the component (service) from appropriate authentication system, and provided to Ranger Plugin as part of authorization request. Thanks! -Abhay On 3/24/17, 11:51 AM, "Alexander Denissov"wrote: >Hi Ranger experts, > >We are developing a custom Ranger Plugin for Apache HAWQ(incubating) and >noticed that group policies are not behaving as we expected. > >In Ranger, we define a user U (actually synched from OS). We then manually >define group G and enroll user U into it. We then define a policy and >grant >a privilege to the group G in this policy. > >On the client side, we do not know that user U belongs to group G, as this >information is only defined in Ranger. When we request policy evaluation, >we send an empty set for the userGroups API parameter, assuming Ranger >will >use its internal mapping. But the access is denied by Ranger. > >So, it seems Ranger will not use the information from its internal user ><--> group mapping when evaluating policies and would rely on client >providing the set of groups for the user explicitly ? > >This also means user <--> group mapping in Ranger is NOT the source of >truth, but rather a mirror of some other authentication system (OS, LDAP, >etc) and a service will need to fetch this information upon user >authentication and provide to Ranger ? > >I will appreciate clarification on these points. >-- >Thanks, >Alex.
Question about group policies
Hi Ranger experts, We are developing a custom Ranger Plugin for Apache HAWQ(incubating) and noticed that group policies are not behaving as we expected. In Ranger, we define a user U (actually synched from OS). We then manually define group G and enroll user U into it. We then define a policy and grant a privilege to the group G in this policy. On the client side, we do not know that user U belongs to group G, as this information is only defined in Ranger. When we request policy evaluation, we send an empty set for the userGroups API parameter, assuming Ranger will use its internal mapping. But the access is denied by Ranger. So, it seems Ranger will not use the information from its internal user <--> group mapping when evaluating policies and would rely on client providing the set of groups for the user explicitly ? This also means user <--> group mapping in Ranger is NOT the source of truth, but rather a mirror of some other authentication system (OS, LDAP, etc) and a service will need to fetch this information upon user authentication and provide to Ranger ? I will appreciate clarification on these points. -- Thanks, Alex.