Zeppelin 笔记本授权

概述

我们假设有一个Shiro认证组件,它将用户字符串和一组组字符串与每个NotebookSocket关联起来。 如果您尚未设置认证组件,请先查看Apache Zeppelin的Shiro认证

授权设置

您可以在每个笔记本中设置Zeppelin笔记本的权限。当然,只有笔记本所有者可以更改此配置。 只需点击锁定图标并在您的笔记本中打开权限设置页面。

如你所见,每个 Zeppelin 笔记本都有 3 个实体:

  • 所有者(用户或组)
  • 读者(用户或组)
  • 写作者(用户或组)
  • 运行者(用户或组)

填写每个表单,使用在conf/shiro.ini文件中配置的逗号分隔的用户。 如果表单为空(*),则表示任何用户都可以执行该操作。

如果某人没有读取权限试图访问笔记本,或者某人没有写入权限试图编辑笔记本,或者某人没有运行权限试图运行段落,Zeppelin 将要求登录或阻止该用户。

默认情况下,所有者和写作者拥有权限,所有者、写作者和运行者拥有运行权限,所有者、写作者、运行者和读者拥有权限

分离的笔记本工作区(公共与私有)

默认情况下,授权权限允许其他用户查看新创建的笔记,这意味着工作区是public。这种行为是可控制的,可以通过conf/zeppelin-env.sh中的ZEPPELIN_NOTEBOOK_PUBLIC变量或conf/zeppelin-site.xml中的zeppelin.notebook.public属性进行设置。因此,为了使新创建的笔记默认仅出现在您的private工作区中,您可以在conf/zeppelin-env.sh中将ZEPPELIN_NOTEBOOK_PUBLIC设置为false,如下所示:

export ZEPPELIN_NOTEBOOK_PUBLIC="false"

或者在conf/zeppelin-site.xml中将zeppelin.notebook.public属性设置为false,如下所示:

<property>
  <name>zeppelin.notebook.public</name>
  <value>false</value>
  <description>Make notebook public by default when created, private otherwise</description>
</property>

在幕后,当你创建一个新笔记时,只有owners字段会填充当前用户,而readersrunnerswriters字段则留空。所有至少有一个授权字段为空的笔记都被视为在public工作区中。因此,当将zeppelin.notebook.public(或相应的ZEPPELIN_NOTEBOOK_PUBLIC)设置为false时,新创建的笔记会将readersrunnerswriters字段填充为当前用户,使笔记显示为在private工作区中。

它是如何工作的

在本节中,我们将解释笔记本授权在后台如何工作的详细信息。

Notebook服务器

NotebookServer 将每个笔记本操作分为三类:读取运行写入管理。 在执行笔记本操作之前,它会检查与NotebookSocket关联的用户和组是否具有权限。 例如,在执行读取操作之前,它会检查用户和组是否至少有一个属于读者实体的实体。

Notebook REST API 调用

Zeppelin 执行一个 REST API 调用 来获取笔记本的权限信息。 在后端,Zeppelin 获取连接的用户信息,如果与当前用户关联的用户和组至少有一个实体属于笔记本的所有者实体,则允许操作。