免登陆查看 Kibana Dashboard

7.x 中,elastic 公司开放了 x-pack 的认证功能,所以我们可以对 Kibana 的使用也进行登陆认证,保障了系统的安全性。

这样导致的问题是,我们将 Kibana 中创建好的报表通过 iFrame 的方式嵌入到其他系统中后,运营人员在查看报表时也需要进行登陆,有没有什么办法可以不登陆就查看报表呢?

可以通过 Nginx,将拼好的 Authorization 请求头传递给 Kibana 服务。

请求头的生成策略是:

1
base64(用户名:密码)

Nginx 示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 15601;
server_name 127.0.0.1;

location / {
proxy_pass http://<实际的 kibana IP>:5601;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 将 base64 编码的 <用户名:密码> 传过去
proxy_set_header Authorization "Basic cmVhZC1vbmx5OnRtIypkNCZyJXA0aGM=";
}

}

建议新建一个只有 read-only 权限的角色和用户,用他的 token 来进行免登陆查看报表。

通过 kibana 生成 iFrame 的嵌入代码后,只需将将里边的正常 kibana url 前缀部分替换为这个 Nginx 的地址和对应的端口号就可以了。

TIP

可以使用如下命令在 Linux 中生成 base64 编码:

1
echo -n username:password | base64