[ 
https://issues.apache.org/jira/browse/RANGER-3099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17349734#comment-17349734
 ] 

Jason-Morries Adam commented on RANGER-3099:
--------------------------------------------

An AWS Support Engineer was able to replicate this issue and found a solution. 
Below you can find the details:

In particular by inspecting the Ranger code

https://github.com/apache/ranger/blob/master/agents-common/src/main/java/org/apache/ranger/admin/client/RangerAdminRESTClient.java#L129

this was the line of code which controlled this wrong behavior:

 
{code:java}
final boolean isSecureMode = user != null && 
UserGroupInformation.isSecurityEnabled();{code}
 

In specific, the "UserGroupInformation.isSecurityEnabled()" call returns false 
even if the plugin was deployed on a kerberized env (i.e., I had the 
"hadoop.security.authentication" property setup to "kerberos" in 
/etc/hadoop/conf/core-site.xml and so the call should have returned "true"). As 
this looked to me as a bug I recompiled the plugin substituting in the class 
"RangerAdminRESTClient.java" the following line of code:

 
{code:java}
final boolean isSecureMode = user != null && 
UserGroupInformation.isSecurityEnabled();{code}
 

with:
{code:java}
//final boolean isSecureMode = user != null && 
UserGroupInformation.isSecurityEnabled();
final boolean test_value = UserGroupInformation.isSecurityEnabled();
LOG.info("MYCUSTOMLOG test_value - " + test_value); final boolean isSecureMode 
= true; LOG.info("MYCUSTOMLOG isSecureMode - " + isSecureMode); {code}
In this we basically hardcoded the fact I want the plugin to use the secured 
endpoint.

After performing this change and using the newer version of the Hive/HDFS 
plugins everything was working as expected.

Please note this change is related to the plugins deployed on the EMR master 
instance only and not the ranger-admin, usersync tools deployed on the Ranger 
server.
----
In the meantime you can find below some info regarding my 
configuration/architecture and some mandatory prerequisites needed to have 
everything working.


######### Network Architecture #########

* EMR cluster and Ranger server on the same VPC but on 2 different subnets.
* The DHCP option set assigns the same domain to the EMR nodes and to the 
Ranger server.

######### Important prerequisites #########

# hostnames should be cross-resolvable. Example, the following commands should 
all work both on the master and on the Ranger server:
{code:java}
$ hostname -f
$ nslookup $(hostname -f)
$ nslookup <ranger_fully_qualified_hostname> $ nslookup 
<EMR_master_fully_qualified_hostname>{code}
# The Ranger instance and the EMR cluster should be able to communicate. 
Example:

* on the Ranger Server SecurityGroup I opened all the Inbound traffic from the 
EMR master
* on the EMR master SecurityGroup I opened all the Inbound traffic from the 
Ranger server

# The Ranger server should have in /etc/hadoop/conf the same files as the ones 
present on the master

# Install the kerberos client on the Ranger server => sudo yum install 
krb5-workstation

# The Ranger server should have in /etc/krb5.conf the same file as the one 
present on the master

######### General overview #########

* the Ranger server will retrieve the users from the AD server (i.e., UserSync 
- LDAP). In order to do this you need to collect the following info. Here I 
have some dummy values as an example:
{code:java}
ldap_ip_address="rootdomain.com"
ldap_server_url="ldap://$ldap_ip_address";
ldap_base_dn="DC=ROOTDOMAIN,DC=COM"
ldap_bind_user_dn="CN=BindUser,CN=Users,DC=ROOTDOMAIN,DC=COM"
ldap_bind_password="MyStrongPa55word"{code}
* On the Ranger server you have to create the ranger user (i.e., sudo useradd 
ranger) and assign the password "ranger" to it (i.e., passwd ranger)

* on the EMR master we have to create all the principals for ranger. Example, 
let's say your kerberos realm is MYEMRDOMAIN.COM and that your Ranger fully 
qualified hostname is "ip-7-0-3-163.myemrdomain.com". You have to create on the 
EMR master KDC (i.e., sudo kadmin.local) the principals for:

- HTTP/[email protected]
- rangeradmin/[email protected]
- rangerlookup/[email protected]
- rangerusersync/[email protected]

and than you have to push them on the related keytab:

- rangerspnego.keytab
- rangeradmin.keytab
- rangerlookup.keytab
- rangerusersync.keytab

Example, on the master:
{code:java}
mkdir /home/hadoop/keytabs/
sudo kadmin.local
addprinc -randkey HTTP/[email protected]
xst -k /home/hadoop/keytabs/rangerspnego.keytab 
HTTP/[email protected]
addprinc -randkey rangeradmin/[email protected]
xst -k /home/hadoop/keytabs/rangeradmin.keytab 
rangeradmin/[email protected]
addprinc -randkey rangerlookup/[email protected]
xst -k /home/hadoop/keytabs/rangerlookup.keytab 
rangerlookup/[email protected]
addprinc -randkey rangerusersync/[email protected]
xst -k /home/hadoop/keytabs/rangerusersync.keytab 
rangerusersync/[email protected]
{code}
You than have to copy the keytabs on the Ranger server on a dedicated location 
(i.e., /etc/), make them owned by the ranger user (chown ranger <keytab>) and 
only readable by it (chmod 700 <keytab>).

Once you have them try to see if they works. Example:
{code:java}
sudo su - ranger
kinit HTTP/[email protected] -kt 
/etc/rangerspnego.keytab klist
kinit rangeradmin/[email protected] -kt 
/etc/rangeradmin.keytab klist
kinit rangerlookup/[email protected] -kt 
/etc/rangerlookup.keytab klist
kinit rangerusersync/[email protected] -kt 
/etc/rangerusersync.keytab klist
{code}
 

> Ranger hdfs policies not syncing automatically
> ----------------------------------------------
>
>                 Key: RANGER-3099
>                 URL: https://issues.apache.org/jira/browse/RANGER-3099
>             Project: Ranger
>          Issue Type: Bug
>          Components: plugins, Ranger
>    Affects Versions: 2.1.0
>         Environment: AWS EMR, WIndows AD
>            Reporter: Anoop Kumar K M
>            Priority: Blocker
>
> Hi,
> We are trying to implement Ranger 2 .1.0 on top of AWS EMR 6.1.0.
> EMR 6.1.0 has  hadoop 3. The cluster is Kerberos enabled.
> I have installed ranger in a separate ec2 machine and able to install hdfs 
> plugin in EMR.
> But the problem is that for policies to be applied, both ranger server and 
> hdfs namenode should be restarted . After I restart both the policies becomes 
> effective
> Ranger admin logs shows below error.
> ==========
> 2020-11-30 10:57:42,397 [http-bio-6080-exec-9] INFO 
> org.apache.ranger.common.RESTErrorUtil (RESTErrorUtil.java:345) - Request 
> failed. loginId=null, logMessage=Unauthenticated access not allowed 
> javax.ws.rs.WebApplicationException at 
> org.apache.ranger.common.RESTErrorUtil.createRESTException(RESTErrorUtil.java:337)
>  =========
>  
> Namenode logs show below error.
> ==========
>  
> 2020-12-02 13:32:53,863 ERROR 
> org.apache.ranger.admin.client.RangerAdminRESTClient (Thread-29): Error 
> getting Roles; service not found. secureMode=false, 
> user=hdfs/ip-10-98-84-189.eu-west-1.compute.internal@EU-WEST-1.COMPUTE.INTERNAL
>  (auth:KERBEROS), response=404, serviceName=hadoopdev, 
> lastKnownRoleVersion=-1, lastActivationTimeInMillis=1606746562885
>  
> 2020-12-02 13:32:53,863 WARN 
> org.apache.ranger.admin.client.RangerAdminRESTClient (Thread-29): Received 
> 404 error code with body:[null], Ignoring
>  2020-12-02 13:32:53,863 INFO 
> org.apache.ranger.admin.client.RangerAdminRESTClient (Thread-29): Skip 
> Securetrue
>  2020-12-02 13:32:53,869 WARN 
> org.apache.ranger.admin.client.RangerAdminRESTClient (Thread-29): Error 
> getting policies. secureMode=false, 
> user=hdfs/ip-10-98-84-189.eu-west-1.compute.internal@EU-WEST-1.COMPUTE.INTERNAL
>  (auth:KERBEROS), response=\{"httpStatusCode":400,"statusCode":0}, 
> serviceName=hadoopdev
> ==========
>  
> Under kerberos config in install.properties of ranger I have the below 
> settings
>  
> --------------Kerberos Config -----------------
>  
> spnego_principal=HTTP/ip-10-98-84-189.eu-west-1.compute.internal@EU-WEST-1.COMPUTE.INTERNAL
>  spnego_keytab=/etc/security/keytabs/spnego.keytab
>  token_valid=30
>  cookie_domain=ip-10-98-84-189.eu-west-1.compute.internal
>  cookie_path=/
>  
> admin_principal=rangeradmin/ip-10-98-84-189.eu-west-1.compute.internal@EU-WEST-1.COMPUTE.INTERNAL
>  admin_keytab=/etc/security/keytabs/rangeradmin.keytab
>  
> lookup_principal=rangerlookup/ip-10-98-84-189.eu-west-1.compute.internal@EU-WEST-1.COMPUTE.INTERNAL
>  lookup_keytab=/etc/security/keytabs/rangerlookup.keytab
>  hadoop_conf=/etc/hadoop/conf
>  
> In the ranger console for the service config I have given below property
>  
> [policy.download.auth.users = 
> [email protected]|mailto:[email protected]]
>  
> Not sure what I am missing. Any input in this will be a great help
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to