elasticsearch设置登录用户名和密码 & nginx代理免密登录kibana
ELK从7.x开始就内置了x-pack的安全鉴权机制,不用单独付费购买了。因此,可以直接在es中配置登录用户名和密码,以增强系统安全性。需要说明的是,kibana实际使用的是es的内置账户,所以配置kibana账号其实就是配置es的账号。一、运行环境es和kibana都采用docker安装,docker-compose.yml如下:version: '3'services:es-data-node
ELK从7.x开始就内置了x-pack的安全鉴权机制,不用单独付费购买了。因此,可以直接在es中配置登录用户名和密码,以增强系统安全性。
需要说明的是,kibana实际使用的是es的内置账户,所以配置kibana账号其实就是配置es的账号。
一、运行环境
es和kibana都采用docker安装,docker-compose.yml如下:
version: '3'
services:
es-data-node:
image: docker.elastic.co/elasticsearch/elasticsearch:7.11.1
container_name: es-data-node
hostname: data-node1
environment:
- cluster.name=escluster
- node.name=data-node1
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms5g -Xmx5g"
- network.publish_host=172.30.0.9
- discovery.seed_hosts=172.30.0.9:9300
- cluster.initial_master_nodes=172.30.0.9
- http.port=9200
- transport.tcp.port=9300
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /data/es/data/datanode:/usr/share/elasticsearch/data:rw
user: "1001"
privileged: true
network_mode: "host"
kibana:
image: docker.elastic.co/kibana/kibana:7.11.1
container_name: kibana
network_mode: "host"
user: "1001"
privileged: true
volumes:
- /data/es/data/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
安装过程略。
二、配置elasticsearch
1.启用安全设置
进入docker容器,修改elasticsearch.yml:
[root@server]# docker exec -it es-data-node bash
bash-4.4$ cd config
bash-4.4$ vi elasticsearch.yml
新增如下内容并保存退出:
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
2.重启es
docker-compose restart es-data-node
3.设置es密码
按步骤1的方式进入容器,并执行以下命令:
bash-4.4$ cd bin
bash-4.4$ ./elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
bash-4.4$
在交互命令行依次输入各内置账号的密码,切记找地方记录好!!!
elastic:是es的管理账号,从kibana的登录界面登录就用这个账号
kibana:是es授权kibana进行接口调用的账号,需要配置在后面的kibana.yml中
三、配置kibana
从docker-compose.yml可看出,我们是将kibana的配置文件映射到宿主机的,因此可直接打开对应的文件/data/es/data/kibana/kibana.yml进行编辑,追加用户名和密码的内容:
server.name: kibana
server.host: "0"
server.basePath: "/kibana"
elasticsearch.hosts: [ "http://172.30.0.9:9200" ]
#xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"
elasticsearch.username: "kibana"
elasticsearch.password: "123456"
题外话:这里的kibana部署在内网,通过ng代理,增加了访问路径上下文kibana,因此这里有个server.basePath: "/kibana"路径,与ng的location一致
重启kibana:
docker-compose restart kibana
此时,访问kibana首页,就会给出类似以下登录界面了:
四、nginx代理内网kibana,并免密登录
kibana的dashboard功能非常丰富,在一些场景下我们需要直接将其分享的仪表盘以iframe方式嵌入到业务系统中,但业务系统已经登录了一次了,再嵌入的dashboard又需要登录一次,用户体验不太好,因此需要进行“免密”代理
这里提供一个nginx代理授权header头的方式,配置如下:
location ^~ /kibana {
proxy_pass http://localhost:5601/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Authorization "Basic base64(username:password)";
rewrite ^/kibana/(.*)$ /$1 break;
}
其中的base64(username:password)是 用户名:密码 的base64格式,可在系统下直接输入命令获得:
echo -n kibana:123456 | base64
重启ng后就可直接内嵌到业务系统了
五、新的问题
爱动脑筋的小朋友又会问了,既然通过ng代理后可免密进入kibana,那和之前没有设置密码不又一样了吗?
是的,这样的配置相当于还是把kibana直接暴露出去啦~
怎么解决呢?且听下回分解~
更多推荐
所有评论(0)