Shiro 授权

原文链接 : http://zeppelin.apache.org/docs/0.7.2/security/shiroauthentication.html

译文链接 : http://www.apache.wiki/pages/viewpage.action?pageId=10030709

贡献者 : 小瑶 ApacheCN Apache中文网

概观

Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,可执行身份验证,授权,加密和会话管理。在本文档中,我们将逐步介绍 Shiro 如何用于 Zeppelin notebook authentication ( 笔记本验证 )。

当您连接到 Apache Zeppelin 时,系统将要求您输入凭据。登录后,您可以访问包括其他用户注释在内的所有备注。

安全设置

您可以通过一些简单的步骤设置 Zeppelin notebook authentication

1.启用 Shiro

默认情况下是在 conf ,你将会找到 shiro.ini.template ,以此文件为例,强烈建议您通过执行以下命令创建文件 shiro.ini

  1. cp conf/shiro.ini.template conf/shiro.ini

有关 shiro.ini 文件格式的更多信息 ,请参阅 Shiro配置

2.Secure the Websocket channel ( 固定 WebSocket 通道 )

conf/zeppelin-site.xml 中设置属性 zeppelin.anonymous.allowedfalse 。如果您还没有这个文件,只需将 conf/zeppelin-site.xml.template 复制到 conf/zeppelin-site.xml

3.启动 Zeppelin

  1. bin/zeppelin-daemon.sh start (or restart)

然后你可以浏览 Zeppelinhttp://localhost:8080

4.登录

最后,您可以使用以下 用户名/密码 组合之一进行登录。

Shiro 授权 - 图1

  1. [users]
  2. admin = password1, admin
  3. user1 = password2, role1, role2
  4. user2 = password3, role3
  5. user3 = password4, role2

你可以为密码旁边的每个用户设置角色。

Groups and permissions (optional) ( 组和权限(可选) )

如果要利用用户组和权限,请在 shiro.ini 中的 [main] 段下使用 LDAPAD 的以下配置之一。

  1. activeDirectoryRealm = org.apache.zeppelin.realm.ActiveDirectoryGroupRealm
  2. activeDirectoryRealm.systemUsername = userNameA
  3. activeDirectoryRealm.systemPassword = passwordA
  4. activeDirectoryRealm.searchBase = CN=Users,DC=SOME_GROUP,DC=COMPANY,DC=COM
  5. activeDirectoryRealm.url = ldap://ldap.test.com:389
  6. activeDirectoryRealm.groupRolesMap = "CN=aGroupName,OU=groups,DC=SOME_GROUP,DC=COMPANY,DC=COM":"group1"
  7. activeDirectoryRealm.authorizationCachingEnabled = false
  8. ldapRealm = org.apache.zeppelin.server.LdapGroupRealm
  9. # search base for ldap groups (only relevant for LdapGroupRealm):
  10. ldapRealm.contextFactory.environment[ldap.searchBase] = dc=COMPANY,dc=COM
  11. ldapRealm.contextFactory.url = ldap://ldap.test.com:389
  12. ldapRealm.userDnTemplate = uid={0},ou=Users,dc=COMPANY,dc=COM
  13. ldapRealm.contextFactory.authenticationMechanism = SIMPLE

还要定义系统中要拥有的角色/组,如下所示;

  1. [roles]
  2. admin = *
  3. hr = *
  4. finance = *
  5. group1 = *

Configure Realm (optional) ( 配置领域(可选) )

领域负责 Apache Zeppelin 的身份验证和授权。默认情况下,Apache Zeppelin 使用 IniRealm (用户和组可配置在 conf/shiro.ini 文件 [user] [group] 部分)。您还可以利用 Shiro Realms ,如 JndiLdapRealm JdbcRealm 或创建 我们自己的 。要了解有关 Apache Shiro 领域的更多信息,请查看 此文档

我们还提供社区自定义领域。

活动目录

  1. activeDirectoryRealm = org.apache.zeppelin.realm.ActiveDirectoryGroupRealm
  2. activeDirectoryRealm.systemUsername = userNameA
  3. activeDirectoryRealm.systemPassword = passwordA
  4. activeDirectoryRealm.hadoopSecurityCredentialPath = jceks://file/user/zeppelin/conf/zeppelin.jceks
  5. activeDirectoryRealm.searchBase = CN=Users,DC=SOME_GROUP,DC=COMPANY,DC=COM
  6. activeDirectoryRealm.url = ldap://ldap.test.com:389
  7. activeDirectoryRealm.groupRolesMap = "CN=aGroupName,OU=groups,DC=SOME_GROUP,DC=COMPANY,DC=COM":"group1"
  8. activeDirectoryRealm.authorizationCachingEnabled = false

而不是在 shiro.ini 管理员的明文中指定 systemPassword 管理员可以选择在 “hadoop凭据” 中指定相同。使用 hadoop 凭据命令行创建密钥库文件,因为 hadoop commons 应该在类路径中

hadoop credential create activeDirectoryRealm.systempassword -provider jceks://file/user/zeppelin/conf/zeppelin.jceks

更改Shiro.ini文件中的以下值,并取消注释行:

activeDirectoryRealm.hadoopSecurityCredentialPath = jceks://file/user/zeppelin/conf/zeppelin.jceks

LDAP

  1. ldapRealm = org.apache.zeppelin.realm.LdapGroupRealm
  2. # search base for ldap groups (only relevant for LdapGroupRealm):
  3. ldapRealm.contextFactory.environment[ldap.searchBase] = dc=COMPANY,dc=COM
  4. ldapRealm.contextFactory.url = ldap://ldap.test.com:389
  5. ldapRealm.userDnTemplate = uid={0},ou=Users,dc=COMPANY,dc=COM
  6. ldapRealm.contextFactory.authenticationMechanism = SIMPLE

PAM

PAM 认证支持允许在 Zeppelin 正在运行的主机上重用现有的认证模块。在典型的系统模块中,每个服务配置例如 sshdpasswd/etc/pam.d/ 。您可以重新使用这些服务之一或为 Zeppelin 创建自己的服务。激活 PAM 认证需要两个参数:1. realm:正在使用的 Shiro 域 2. service :配置为使用的服务 /etc/pam.d/ 。这里的名称需要与下面的文件名相同 /etc/pam.d/

  1. [main]
  2. pamRealm=org.apache.zeppelin.realm.PamRealm
  3. pamRealm.service=sshd

ZeppelinHub

ZeppelinHub 是一种服务,可同步您的 Apache Zeppelin 笔记本,并使您轻松协作。

为了使登录您的 ZeppelinHub 证书,应用以下变化**conf/shiro.ini****[main]**节。

  1. ### A sample for configuring ZeppelinHub Realm
  2. zeppelinHubRealm = org.apache.zeppelin.realm.ZeppelinHubRealm
  3. ## Url of ZeppelinHub
  4. zeppelinHubRealm.zeppelinhubUrl = https://www.zeppelinhub.com
  5. securityManager.realms = $zeppelinHubRealm

注意

ZeppelinHub 没有被转交给 Apache Zeppelin 项目。

保护您的Zeppelin信息(可选)

默认情况下,定义的任何人都 [users] 可以在 Apache Zeppelin 中共享解释器设置,凭证和配置信息。有时您可能希望隐藏这些用于您的用例的信息。由于 Shiro 提供了基于 URL 的安全性,您可以通过在下面的行中注释或取消注释来隐藏信息 conf/shiro.ini

  1. [urls]
  2. /api/interpreter/** = authc, roles[admin]
  3. /api/configurations/** = authc, roles[admin]
  4. /api/credential/** = authc, roles[admin]

在这种情况下,只有具有 admin 角色的角色才能看到解释器设置,凭据和配置信息。如果要向其他用户授予此权限,您可以按照在部分中定义的角色[]进行更改 [users]

注意

所有上述配置都在 conf/shiro.ini 文件中定义。

其他认证方式