目录
序:
最近在工作中遇到了Zeppelin要同步Ranger的需求,由于项目中有LDAP组件,省去了改源码做shiro集成ranger的麻烦。项目内部使用的ApacheDS Ldap,在Zeppelin的集成过程中部分操作不同于openLdap,在此记录下集成过程及部分坑。
一、Zeppelin0.9.0的安装
TODO....
二、Apache DS Ldap的安装
TODO...
三、Zeppelin集成ApacheDS LDAP
此处参考了@章剑锋(Jeff) 大佬的配置文档,由于文档针对于openLDAP,在使用ApacheDSLDAP有一些不同之处。
1、ApacheDS LDAP部分操作
(1)创建新的partition
在连接框内选择我们的LDAP链接右键点击配置,并,command+s保存。重启dsLdap
在新建partition标签页填写信息
重启dsLdap
(2)创建用户和用户组,准备做zeppelin的映射
首先,为了显示apacheDS的posixAccount和posixGroup,我们需要进行一些配置,首先打开ou=schema的列表,(部分使用mac的同学可能发现自己无法展开schema,此时需要你先左键选中schema,再点击上面的刷新按钮,schema才可以展开,这是什么鬼才交互设计。。。。)
在这里我们需要把m-disabled改成FALSE
再次重启LDAP
然后添加用户组组织单元(ou)
添加用户组织单元(ou)
2、Zeppelin相关配置
# Sample LDAP configuration, for user Authentication, currently tested for single Realm
[main]
ldapRealm=org.apache.zeppelin.realm.LdapRealm
ldapRealm.contextFactory.authenticationMechanism=simple
ldapRealm.contextFactory.url=ldap://192.168.101.48:10389
ldapRealm.userDnTemplate=cn={0},ou=users,dc=yss,dc=com
ldapRealm.pagingSize = 200
ldapRealm.authorizationEnabled=true
ldapRealm.searchBase=dc=yss,dc=com
ldapRealm.userSearchBase = ou=users,dc=yss,dc=com
ldapRealm.groupSearchBase = ou=groups,dc=yss,dc=com
ldapRealm.groupObjectClass=posixGroup
ldapRealm.userLowerCase = true
ldapRealm.memberAttribute = memberuid
ldapRealm.groupSearchFilter=(&(objectClass=posixGroup)(memberuid={0}))
ldapRealm.userSearchScope = subtree
ldapRealm.groupSearchScope = subtree
ldapRealm.contextFactory.systemUsername= commonName=zpln_admin,ou=users,dc=yss,dc=com
### 我的cn=admin,dc=domain,dc=com密码设置的是admin,这里需要替换成用户自己设置的密码
ldapRealm.contextFactory.systemPassword = secret
ldapRealm.groupSearchEnableMatchingRuleInChain = false
### 将Ldap上的admin group映射成zeppelin的admin角色, user group映射成zeppelin的user_role角色
ldapRealm.rolesByGroup = admin:admin,user:user_role
securityManager.realms = $ldapRealm
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
cookie = org.apache.shiro.web.servlet.SimpleCookie
cookie.name = JSESSIONID
cookie.httpOnly = true
sessionManager.sessionIdCookie = $cookie
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.globalSessionTimeout = 86400000
shiro.loginUrl = /api/login
securityManager.sessionManager = $sessionManager
securityManager.realms = $ldapRealm
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
### Enables 'HttpOnly' flag in Zeppelin cookies
cookie = org.apache.shiro.web.servlet.SimpleCookie
cookie.name = JSESSIONID
cookie.httpOnly = true
### Uncomment the below line only when Zeppelin is running over HTTPS
#cookie.secure = true
sessionManager.sessionIdCookie = $cookie
securityManager.sessionManager = $sessionManager
# 86,400,000 milliseconds = 24 hour
securityManager.sessionManager.globalSessionTimeout = 86400000
shiro.loginUrl = /api/login
[urls]
# shiro检测资源权限是顺序检测的,前面的资源匹配上了就验证这个规则对应的权限即可,不再往后匹配
# 所以底层实现规则存储用的是LinkedList,保证规则链路保持配置时的顺序
/api/version = anon
/api/cluster/address = anon
## 配置允许所有登陆的用户访问解释器重启接口
/api/interpreter/setting/restart/** = authc
## 配置只允许拥有admin角色,且登陆成功的用户可以访问解释器相关接口(解释器配置页)
/api/interpreter/** = authc, roles[admin]
## 配置只允许拥有admin角色,且登陆成功的用户可以访问解释器仓库相关接口(解释器配置页)
/api/notebook-repositories/** = authc, roles[admin]
## 配置只允许拥有admin角色,且登陆成功的用户可以访问配置相关接口
/api/configurations/** = authc, roles[admin]
## 配置只允许拥有admin角色,且登陆成功的用户可以访问凭据设置相关接口
/api/credential/** = authc, roles[admin]
## 配置只允许拥有admin角色,且登陆成功的用户可以访问管理员相关接口
/api/admin/** = authc, roles[admin]
#/** = anon
/** = authc
修改完配置后重启zeppelin服务并用zpln_admin用户登陆
登陆成功,并且可以查看解释器,配置完成!
如果各位看官遇到什么问题可以留言,看到后会第一时间回复~