这章我们需要给elk增加安全权限访问限制,可以使用官方的x-pack插件,x-pack在elk6.4.3中已经内置安装,并且已经开源,但是功能是basic版的,没有安全功能,可以去申请更高权限的证书,我们使用免费版的一个安全管理——search-guard。
本章的elk环境基于前两章内容搭建:
elasticsearch快速开始search-guard
- 查找对应版本的search-guard,版本对应。
- 我的elk版本全部是6.4.3下载对应插件,上传到服务器:
search-guard-6-6.4.3-23.2.zip
- 切换到elasticsearch的目录下,执行命令安装插件:
bin/elasticsearch-plugin install -b file:///path/to/search-guard-6-6.4.3-23.2.zip
- 显示以下信息:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessClassInPackage.sun.misc
* java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission loadLibrary.*
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.security.SecurityPermission getProperty.ssl.KeyManagerFactory.algorithm
...
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
- 切换到目录
<Elasticsearch directory>/plugins/search-guard-6/tools
,执行命令:
./install_demo_configuration.sh
(先赋予执行权限)
显示如下信息:
Search Guard 6 Demo Installer
** Warning: Do not use on production or publicly reachable systems **
Install demo certificates? [y/N] y
Initialize Search Guard? [y/N] y
Enable cluster mode? [y/N] n
按y确认。
- 这个时候观察到elasticsearch.yml,增加了一下这些配置:
######## Start Search Guard Demo Configuration ########
# WARNING: revise all the lines below before you go into production
searchguard.ssl.transport.pemcert_filepath: esnode.pem
searchguard.ssl.transport.pemkey_filepath: esnode-key.pem
searchguard.ssl.transport.pemtrustedcas_filepath: root-ca.pem
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.http.enabled: true
searchguard.ssl.http.pemcert_filepath: esnode.pem
searchguard.ssl.http.pemkey_filepath: esnode-key.pem
searchguard.ssl.http.pemtrustedcas_filepath: root-ca.pem
searchguard.allow_unsafe_democertificates: true
searchguard.allow_default_init_sgindex: true
searchguard.authcz.admin_dn:
- CN=kirk,OU=client,O=client,L=test, C=de
searchguard.audit.type: internal_elasticsearch
searchguard.enable_snapshot_restore_privilege: true
searchguard.check_snapshot_restore_write_privileges: true
searchguard.restapi.roles_enabled: ["sg_all_access"]
cluster.routing.allocation.disk.threshold_enabled: false
cluster.name: searchguard_demo
discovery.zen.minimum_master_nodes: 1
node.max_local_storage_nodes: 3
######## End Search Guard Demo Configuration ########
- 因为已经内置了x-pack,search-guard和x-pack的安全功能冲突,在elasticsearch.yml中增加以下配置:
xpack.security.enabled: false
- 重启elasticsearch
配置kibana
- 下载对应版本的插件,并上传到服务器:
search-guard-kibana-plugin-6.4.3-16.zip
- 在kibana安装路径下执行以下命令:
bin/kibana-plugin install file:///path/to/search-guard-kibana-plugin-6.4.3-16.zip
- 编辑kibana.yml文件:(kibanaserver是默认内置的角色,可以增删改查kibana相关的索引。)
xpack.security.enabled: false
elasticsearch.url: "https://localhost:9200"
elasticsearch.ssl.verificationMode: none
elasticsearch.username: "kibanaserver"
elasticsearch.password: "kibanaserver"
- 启动kibana,会弹出登录页面,使用默认的admin:admin登录,在kibana页面会新增search-guard插件,可以在此编辑相关权限和用户。
配置head插件可以访问
现在head已经不能直接访问es了,需要修改elasticsearch.yml,增加以下配置:
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
- 重启elasticsearch,head可以使用admin用户登录。
配置logstash
- 编辑logstash启动加载的配置文件,修改输出到elasticsearch的部分:(logstash是内置角色,拥有增删改查和创建索引
logstash-*
和*beat*
的权限,若更改了默认索引的索引名称,可以在kibana中给该角色添加新的索引权限)
# 输出到本机的 ES
output {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "log-%{[log_source]}-%{+YYYY.MM.dd}"
user => logstash
password => logstash
ssl => true
ssl_certificate_verification => false
}
}
- 重启logstash
更改默认用户密码
- 切换到目录
<Elasticsearch directory>/plugins/search-guard-6/tools
,执行命令:
./hash.sh -p 新密码
- 复制生成的hash密码,编辑文件
<Elasticsearch directory>/plugins/search-guard-6/sgconfi/sg_internal_users.yml
,找到想要修改的用户名,替换其下的hash值。 - 让配置生效,执行以下命令:
cd <Elasticsearch directory>/plugins/search-guard-6/tools
./sgadmin_demo.sh
如果更改过elasticsearch默认端口号,打开sgadmin_demo.sh文件,在其中执行sgadmin.sh
脚本时加上-p 端口号
。