Ranger是Hadoop平台的集中式安全管理框架,能够为hadoop平台组件提供细粒度的访问控制。通过Ranger, Hadoop管理员能够轻松地管理各种安全策略,包括:访问文件/文件夹,数据库,Hive表,列, Hbase, YARN等。此外,Ranger还能进行审计管理,以及策略分析,从而为Hadoop环境的深层次分析提供支持。
目前,Ranger支持对以下的Hadoop组件:HDFS, HBase, Hive, Yarn, Knox, Storm, Solr, Kafka。
本文主要介绍如何在Ambari环境下安装Ranger,如何配置Ranger使之与LDAP集成,如何通过配置Ranger策略完成访问控制。
1 Ranger介绍
Apache Ranger目前是Apache下的顶级项目,目的是通过制定策略(policies)实现对Hadoop组件的集中式安全管理。用户可以通过Ranager实现对集群中数据的安全访问。
Ranger由三个模块组成:
· Ranger portal: 提供给用户进行安全管理的界面
· Ranger plugin: 嵌入在需要安全控制的组件进程中,提供两种功能:从Ranger server中把用户配置的安全策略拉取到本地,当用户访问请求到来时,根据安全策略判断该用户是否有权限访问;从本地将用户访问的纪录返回给Ranger服务进行审计。
· User group sync: 提供从OS, LDAP, Active Directory拉取用户和用户组的功能。同步到的用户和用户组能够展示在Ranger portal中
2. Ambari环境下安装Ranger
2.1 安装前置条件
(1) 必须已经使用Ambari部署Hadoop集群
使用Ambari安装Ranger只能在安装Hadoop之后使用add service的方式将Ranger安装在集群中。因为在使用Ambari部署Hadoop集群时,在service列表中没有Ranger。
(2) 集群中已经安装了数据库
目前Ranger支持mysql, oracle, postgres, mssql, sqlanywhere等。建议在Ambari环境下使用Ambari server 安装的postgres数据库。
(3) 在Ambari server上执行
ambari-server setup —jdbc-db={database-type} —jdbc-driver={/jdbc/driver/path}
其中database-type为所用的数据库类型,/jdbc/driver/path为jdbc driver路径。
步骤为:
a. 检查/usr/share/java目录下是否有postgres jdbc driver文件 /usr/share/java/postgresql-jdbc.jar。如果没有,从postgres安装目录下拷贝至此目录。
b. 执行
ambari-server setup —jdbc-db=postgres —jdbc-driver=/usr/share/java/postgresql-jdbc.jar
2.2安装Ranger
(1) 打开Ambari,在Actions下点击Add Service,在打开的服务列表里,勾选Ranger,点击next
(2) 在安装配置页面,Ranger Admin下,
a. DB FLAVOR 选择POSTGRES
b. Ranger DB host 选择Postgres安装的主机名
c. Ranger DB password 输入Postgres DB的密码
d. DBA username改为postgres, DBA password输入密码
e. JDBC connect string 例如: jdbc:postgresql://ochadoop06.novalocal:5432/postgres
配置完成后,点击Test Connection。如果返回没有权限,一般是因为在postgres的配置里面没有把该机器的访问权限配置。
需要在安装postgres的机器上配置/var/lib/pgsql/data/pg_hba.conf,增加需要访问的机器权限,例如:host all postgres 192.168.1.11/24 ident
然后重启postgres.
(3) 在Ranger User Info配置下,主要是配置是否从LDAP读取用户组,此项配置可以在安装完成后再进行配置。
(4) 在Ranger Audit配置下,主要对Ranger audit log的存放位置进行配置。
a. Solr
如果集群中已经安装了Solr,可以打开Solr选项,ranger.audit.solr.urls为solr core的地址,例如:http://ochadoop06.novalocal:8983/solr/ranger_audits
ranger.audit.solr.username 使用默认,ranger.audit.solr.password输入创建密码。
b. HDFS
打开HDFS配置,Ranger audit log可以自动保存在HDFS中以便长期保存。Destination HDFS Directory为HDFS保存的地址,例如:hdfs://ochadoop06.novalocal:8020/ranger/audit
c. DB
打开DB配置,把audit log保存在DB中。
根据此配置,安装Ranger。
3.Ranger配置
3.1 Ranger配置LDAP
Ranger用来获取用户和组的模块叫做User group sync,可以配置获取Unix,LDAP或者AD的用户和组。
(1) Ranger User Info配置
打开Ambari Ranger配置页面里的Ranger User Info选项。
a. Enable User Sync 置为 Yes
b. Sync Source 选择 LDAP/AD
打开Cmmon Configs
a. LDAP/AD URL,输入LDAP URL。例如:ldap://192.168.1.15:389
b. Bind Anonymous 置为 No
c. Bind User,输入LDAP的管理员用户。例如:cn=root,dc=asiainfo,dc=com
d. Bind User Password,输入上面LDAP的管理员密码。
打开User Configs
a. Username Attribute,输入cn
b. User Object Class,这个根据LDAP配置决定,一般可以配为person,user,或者posixAccount。
c. User Search Base,输入ou=People,dc=asiainfo,dc=com
d. User Search Filter,输入cn=
e. User Search Scope,输入sub
f. User Group Name Attribute,输入memberof。这个根据LDAP配置决定,一般需要LDAP支持memberof属性。
g. Group User Map Sync,置为Yes。
打开Group Configs
a. Enable Group Sync,置为Yes。
b. Group Member Attribute,输入 memberUid。
c. Group Name Attribute,输入 cn。
d. Group Object Class,输入posixGroup。这个根据LDAP配置决定,需要查看LDAP的group object class。一般为group或者posixGroup。
e. Group Search Base,输入ou=Group,dc=asiainfo,dc=com
f. Group Search Filter,输入cn=
(2) Advanced配置
Ranger Settings
a. Authentication method,选择LDAP
LDAP Settings
a. ranger.ldap.base.dn,设为LDAP的dn,例如:dc=asiainfo,dc=com
b. ranger.ldap.group.roleattribute,设为cn
c. ranger.ldap.user.dnpattern,设为uid={0},ou=People,dc=asiainfo,dc=com,其中ou=People,dc=asiainfo,dc=com为LDAP 的用户类别。
(3) LDAP用户同步验证
根据上述配置好后,使用Ambari重启Ranger,打开Ranger界面。在Settings下的的Users/Groups可以查看到已经同步到的LDAP用户和用户组。
如果用户和用户组没有同步到,应该是配置的有问题,可以通过Ranger提供的LDAP检查工具进行检查。
a. 进入工具目录,/usr/hdp/current/ranger-usersync/ldaptool
b. 配置conf/input.properties,其中的参数根据Ambari上配置的Ranger LDAP配置。
c. 执行./run.sh -r groups -i conf/input.properties 获取用户组信息,-r users返回用户信息,-r all 返回用户和用户组信息。返回的结果在output/ ldapConfigCheck.log中。
3.2 Ranger配置Audit log
(1) Ranger Audit配置
打开Ambari Ranger Configs下的Ranger Audit,
a. Audit to DB,置为Yes。设置Data base 密码。这样的目的是使Ranger将log存放在DB中。
(2) ranger.audit.source.type
打开Advanced下的Advanced ranger-admin-site,将ranger.audit.source.type设为db。这样的目的是Ranger Admin从DB读取audit log。
3.2 Enable Ranger Plug-in
进入Ranger Plugin配置页面,打开需要使用Ranger进行安全控制的组件。例如hdfs,yarn,hive。
4. Ranger权限认证实例
上述的配置完成后,根据提示,Ambari需要把相关影响的服务进行重启。本节使用Ranger对HDFS进行权限管理。
Ranger对HDFS的访问控制方式为:
如果enable了Ranger HDFS的plugin,当用户访问HDFS时,首先会根据ranger的策略进行访问权限判断。如果ranger策略通过,那么用户可以访问。如果ranger策略拒绝,使用hdfs的native文件权限控制判断。
(1) 配置hive所在的hdfs的文件夹访问权限为000,这样的目的是使该文件夹完全由Ranger进行权限控制。
hdfs dfs -chmod -R 000 /apps/hive
(2) 登录Ranger,选择HDP_hadoop,新增一个policy。
(3) 给usertest 添加读,写,执行权限。保存。
(4) 使用usertest,访问hdfs /apps/hive文件夹,可以通过。使用其他user访问该文件夹,会返回访问拒绝。
(5) 查看Ranger Audit页面,在Access下能够查询通过,拒绝的访问记录。