准备工作

  • 正确安装的Ldap服务:我这里的Ldap域为domain.com

image.png

  • 安装好的Zeppelin服务
  • Tips: 可以使用phpLdapAdmin对Ldap进行在线管理

Ldap账号配置

  • 添加用户组组织单元(ou)

image.png
image.png

  • 添加用户组织单元(ou)

image.png
image.png

image.png

  • 在组织单元groups(ou=groups)下添加group: 我这里创建admin和user两个group

image.png
image.png
image.png

  • 在组织单元users(ou=users)下创建用户:我这里创建两个测试用户zpln_user1和zpln_admin

image.png
image.png
image.png
image.png

  • 将zpln_admin用户添加到admin组下,zpln_user1用户添加到user组下

image.pngimage.png
image.png
image.png
image.png

  • 将zpln_user1添加到user group的步骤跟上面一样,不再重复演示

Zeppelin LdapRealm配置

  • 将shiro.ini文件用以下内容替换 ```nginx

    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://ldap_host:389 ldapRealm.userDnTemplate=cn={0},ou=users,dc=domain,dc=com ldapRealm.pagingSize = 200 ldapRealm.authorizationEnabled=true ldapRealm.searchBase=dc=domain,dc=com ldapRealm.userSearchBase = ou=users,dc=domain,dc=com ldapRealm.groupSearchBase = ou=groups,dc=domain,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= cn=admin,dc=domain,dc=com

    我的cn=admin,dc=domain,dc=com密码设置的是admin,这里需要替换成用户自己设置的密码

    ldapRealm.contextFactory.systemPassword = admin 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官网英文文档未提及但需要特别注意的几个配置项,使用OpenLdap时若缺少这些配置可能会出现配置完成后能登陆Zeppelin但没有admin权限的情况(目前不确定是否是所有OpenLdap版本都存在这个问题,我这里测试用的是openldap-2.4.42)
    • ldapRealm.groupSearchEnableMatchingRuleInChain = false
    • ldapRealm.memberAttribute = memberuid
    • ldapRealm.groupSearchFilter=(&(objectClass=posixGroup)(memberuid={0}))
    • ldapRealm.groupObjectClass=posixGroup
  • 修改完配置后重启zeppelin服务并用zpln_admin用户登陆, 查看日志,若能正常获取用户角色则表示配置成功

image.png

  • 也能正常打开解释器配置页面

image.png

  • 将zpln_admin用户从cn=admin,ou=groups,dc=domain,dc=com组中移除再测试就没有访问解释器配置页的权限了
    • 从管理员角色对应的group移除用户zpln_admin

image.png
image.png
image.png
image.png
image.png

  • 刷新解释器配置页面,发现已经没有访问权限了

image.png