Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)

在我之前的文章 “如何让匿名的用户访问受限的资源” 中,我介绍了如何让开发者在不输入用户名和密码的情况下访问 Elasticsearch 集群中的索引(ES 集群配置有用户名及密码)。在很多的场合这个是非常有用的。针对 Kibana,我们可能也会遇到同样的情况。比如我们有一个很好的 Dashboard,我们想分析这个 Dashboard 给没有访问权限的人进行查看。当然这种也使用大屏幕 Canvas 可视化。我们可以让一个实时动态的 Canvas 给大众访问。在这种情况下,我们必须使用一种匿名的访问方式才能完成。在今天的文章中,我来介绍如何完成这个。

安装 首先,我们先要安装 Elasticsearch 及 Kibana。我们可以参考之前的文章:

  • 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch
  • Kibana:如何在 Linux,MacOS 及 Windows上安装 Elastic 栈中的 Kibana
当然按照上面的按照还是是不够的,我们需要给 Elasticsearch 及 Kibana 配置好安全。我们可以参考之前的文章 “Elasticsearch:设置 Elastic 账户安全”。这样当我们访问 Elasticsearch 或者 Kibana 的时候,我们需要输入用户名及密码。

创建一个 Space 在这里,我们希望创建一个完全不同于 Default 的一个 Space。在这个 Space 里,我们只能展示可视化的部分和一些基本的管理部分。打开 Kibana:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

如上所示,我们在 Analytics 的部分值启动了 Dashboard。为了下面的操作方便,我同时也启动了 Management。我们在完成我们的目的过后,可以把这个也去掉。点击上面的 Create space 按钮。
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

这样就创建我们所需要的 visualization_only 这个 space。我们点击上面的 D,并进入这个空间。
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

首先,我们可以看到只有 Kibana (Visualize & analyze ->)在上面显示。我们点击 Try our sample data:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

点击上面的Add data 按钮,我们可以加载我们想要的 kibana_sample_data_logs 索引到这个空间:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

【Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)】如上所示,在这个 space 里,我们只看到 Analytics 和 Management 两个部分。我们点击 Dashboard:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

里面已经有一个创建好的 Dashboard。我们的目的是在用户不使用用户名和密码的情况下就访问这个 Dashboard:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

在上面的浏览器的 url 中,我们可以看到一个以 /app 为起始的字符串。我们把这个字符串拷贝下来。针对我的情况是:
/app/dashboards#/view/edf84fe0-e1a0-11e7-b6d5-4dc382ef7f5b?_g=(filters:!())&_a=(description:'Analyze%20mock%20web%20traffic%20log%20data%20for%20Elastic!'s%20website',filters:!(),fullScreenMode:!f,options:(hidePanelTitles:!f,useMargins:!t),query:(language:kuery,query:''),tags:!(),timeRestore:!t,title:'%5BLogs%5D%20Web%20Traffic',viewMode:view)

我们重新回到 Stack Management/Advanced settings 页面:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

我们把刚才拷贝下来的 /app/xxxx 的内容拷贝到如下的一个设置中:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

它的意思是当打开这个 Space 后,默认的页面就是到这个页面,也就是 Web Traffic Dashboard。点击上面的 Save changes 按钮。我么接下来切回到 Default space,然后在切换回到 visualization_only space,我们看看默认的页面是否有所变化:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

从上面,我们可以看到每当这个 visualization space 被打开的时候,这个 Dashboard 就会自动被打开。

创建 role 我们接下来创建一个叫做 kibana_data_analyst 的 role。当然我们必须切回到 Default 的 space 下来完成这个工作。在进行下面的操作之前,我们也必须仿照之前在 visualization_only space 下加载 kibana_sample_data_logs 索引一样的方法来进行加载。
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

在上面,我们定义 kibana_data_analyst 这个 role。它只允许访问 kibana_sample_data_logs 索引,并只具有 read 权限。我们同时也为它定义相应的 space:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

点击上面的 Create role。这样我们就完成了 kibana_data_analyst 的 role 创建。
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片


创建一个用户 在上面我们已经创建了一个叫做 kibana_data_analyst 的 role。如果没有一个用户使用这个 role,上面的 role 是没有任何意义的。我们点击 Stack Management/Users 来创建一个 user:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

在上面,我们创建一个叫做 kibana-dashboard-only-user 的用户,并设置它的密码为 password。点击上面的 Create user 按钮:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

这样,我们就创建了一个叫做 kibana-dashboard-only-user 的用户。

匿名登录 Kibana 接下来,我们将使用刚才已经被创建好的 kibana-dashboard-only-user 用户匿名来登录 Kibana。这样当一个用户访问我们的 Kibana 时,它会自动登录,并展示我们想要的 Dashboard 页面。我们先停下 Kibana 的运行,并在 Kibana 的配置中做如下的修改:
config/kibana.yml
xpack.security.authc.providers: anonymous.anonymous1: order: 1 credentials: username: "kibana-dashboard-only-user" password: "password"

关于这个部分,请参照 Elastic 的官方文档。等修改完后,我们重新启动 Kibana,并同时访问我们的 Kibana 地址 http://localhost:5601。这个时候,我们可以看到如下的画面:
Kibana|Kibana(如何让用户匿名访问 Kibana 中的 Dashboard)
文章图片

显然这个就是我们之前想要的画面。虽然我们的 Elasticsearch 及 Kibana 都设置有用户名和密码,但是我们还是可以在不使用用户名及密码的情况下访问 Kibana 的部分资源。上面的应用场景针对一些实时事件展示,或者一些大屏幕数据展示都是非常用的,尽管访问者可以不需要使用任何的登录。

    推荐阅读