7.2.0 版本以后的Elastic Stack添加了很多安全相关的功能,6.3版本以后原本闭源收费的X-pack组件也开源了一部分功能,代码可以在github下载免费试用。这其中最关键的一点是ES和Kibana的安全认证功能可以在开源的ELK版本中使用了。
本文简要介绍如何ELK开启安全认证功能。
0x00 前提
- 已完成单节点ELK部署
0x01 Elasticsearch开启安全认证
如果使用basic或者试用license,安全认证功能默认是关闭的,可以执行以下步骤开启安全认证功能:
- 停止Kibana,如果是通过Docker部署的Kibana,那直接stop容器即可
- 添加
xpack.security.enabled
设置到ES_PATH_CONF/elasticsearch.yml
文件
开启安全认证需要添加如下信息:
xpack.security.enabled: true
- 开启单节点发现模式
本文聚焦于单节点的部署模式,如果在多节点的集群下,组需要在每个Elasticsearch节点下开启安全模式,但这不在本文的范围之内,我们可以通过修改ES_PATH_CONF/elasticsearch.yml
开启单节点模式
0x02 为内置账号创建密码
ES中内置了几个管理其他集成组件的账号即:apm_system
, beats_system
, elastic
, kibana
, logstash_system
, remote_monitoring_user
在使用前需要先设置密码:
在Elasticsearch安装目录下执行
./bin/elasticsearch-setup-passwords interactive
后续步骤会用到这些账号密码,所以请牢记密码
0x03 添加内置账号到Kibana
Elasticsearch的安全特性开始以后,用户登录Kibana必须输入用户名密码
- 配置Kibana使用内置账号
kibana
有两种方式配置账号密码
- 将账号密码明文配置到
KIBANA/config/kibana.yml
文件
elasticsearch.username: "kibana"
elasticsearch.password: "your_password"
密码即为上一步执行elasticsearch-setup-passwords
时设置的口令
- 如果不愿明文保存密码,可以通过下面的命令将密码保存到内置的ketstore里
./bin/kibana-keystore create
./bin/kibana-keystore add elasticsearch.username
./bin/kibana-keystore add elasticsearch.password
- 重启Kibana
./bin/kibana
0x04 在Kibana创建用户
这里创建两个本地账户
- 登录kibana页面,使用
elastic
内置账号 -
进入 Management / Security / Users 页面
这里你可以看到内置账号列表
-
点击Create new user
Elastic支持多种认证模式,如本地认证、文件、LDAP、PKI、AD、SAML或者Kerberos,可以在elaseticsearch.tml
的xpack.security.authc.realms
配置中修改。
0x05 配置加密通信
通过上面的步骤我们已经实现Elasticsearch和Kibana的认证授权访问,但是通信过程还是使用http的明文访问方式,现在我们要通过TLS/SSL对通信过程进行加密。
自签发证书
在centos7默认安装了openssl,这里我们使用openssl生成自签发证书,给Kibana使用。Kinaba支持PEM格式的证书作为浏览器到Kibana服务器的SSL证书。我们使用最简单方式自签发一个证书,包含一个私钥文件和证书文件,在linux下面执行如下命令:
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
配置Kibana 使用加密通信
在Kibana安装目录下找到kibana.yml
添加配置如下:
server.ssl.enabled: true
server.ssl.key: /path/to/your/server.key
server.ssl.certificate: /path/to/your/server.crt
重启后生效,生效以后我们必须通过https//localhost:5601访问Kibana页面
下一步计划
本文仅介绍单节点的Elasticsearch和Kibana安全特性配置方法,但是要实现完整的安全防护或者集群模式下的安全防护还需要做一些额外的配置,具体请参考官方文档