2019年5月21日,Elastic官方发布消息: Elastic Stack 新版本6.8.0 和7.1.0的核心安全功能现免费提供。
这意味着用户现在能够对网络流量进行加密、创建和管理用户、定义能够保护索引和集群级别访问权限的角色,并且使用 Spaces 为 Kibana提供全面保护。 免费提供的核心安全功能如下:

1)TLS 功能。 可对通信进行加密;
2)文件和原生 Realm。 可用于创建和管理用户;
3)基于角色的访问控制。 可用于控制用户对集群 API 和索引的访问权限;
通过针对 Kibana Spaces 的安全功能,还可允许在Kibana 中实现多租户。

一般情况下,ELK部署在公司内网部署,不对外提供服务。不开放公网9200、5601等端口,可能存在安全漏洞风险。公司或团队内部开放9200、5601端口,基本head插件、kibana都能连接,极易导致线上索引或数据可能被误删。

安全方式一:nginx反向代理+防火墙策略
# 更改kibana配置文件
server.host: "127.0.0.1" #监听地址改为本机
# nginx配置文件
upstream  kibana_server{
        server 127.0.0.1:5601 weight=1 max_fails=3 fail_timeout=60;
}
server {
	listen       80;
    server_name  elk.xiaoma.com;
    auth_basic "Restricted Access";      # 验证
    auth_basic_user_file /etc/nginx/htpasswd.users; #验证文件
    location / {
        proxy_pass http://kibana_server;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

使用命令添加用户和密码
[root@node1 ~]# yum install -y  httpd-tools 
[root@node1 ~]# htpasswd -bc /etc/nginx/htpasswd.users admin 123456 # 创建验证文件,并添加用户
Adding password for user admin
[root@node1 ~]# cat /etc/nginx/htpasswd.users 
admin:$apr1$9AMiN0Ud$Q95cyrPix89nw3h3d4cwo0
要添加多个用户密码可以使用如下命令
htpasswd -b /etc/nginx/htpasswd.users test 123456
安全方式二:单机版elk认证
# 1.es添加认证
[root@node2 ~]# vim /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: true # 这条配置表示开启xpack认证机制
xpack.security.transport.ssl.enabled: true #这条如果不配,es将起不来
cluster.initial_master_nodes: ["es-node1"]
# 2.创建用户和密码
ES中内置了几个管理其他集成组件的账号即:apm_system, beats_system, elastic, kibana, logstash_system, remote_monitoring_user
执行该命令:/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
然后一路添加密码
# 3.测试
curl -XGET -u elastic 'localhost:9200/_xpack/security/user?pretty'
curl 127.0.0.1:9200 -u elastic
# 4.kibana添加密文认证
原封不动执行如下三条命令,用户名的时候输入kibana,密码写入对应密码
/usr/share/kibana/bin/kibana-keystore --allow-root create
/usr/share/kibana/bin/kibana-keystore --allow-root add elasticsearch.username
/usr/share/kibana/bin/kibana-keystore --allow-root add elasticsearch.password
修改kibana配置文件
xpack.reporting.encryptionKey: "a_random_string"
xpack.security.encryptionKey: "something_at_least_32_characters"
然后重启kibana即可访问,访问的时候使用elastic的用户密码登入,将是全局管理权限,如果需要创建kibana的只读用户,则可以通过管理–用户–新建用户,对用户进行角色授权即可
# 5.logstash配置认证
在output中增加elasticsearch的用户名和密码
  elasticsearch {
    hosts => ["192.168.3.42:9200"]
    user => "elastic"
    password => "123456"
  }
安全方式三:集群版elk认证
群认证需要首先配置秘钥才行,否则在给内置用户创建秘钥的时候将会报错
# 1.添加证书
cd /usr/share/elasticsearch/bin
./elasticsearch-certutil ca #生成证书 一直enter就行
./elasticsearch-certutil cert --ca elastic-stack-ca.p12 # 基于根证书生成集群通信证书
[root@node2 certs]# ls
elastic-certificates.p12  elastic-stack-ca.p12
把证书放到:/usr/share/elasticsearch/config/certs
chown -R elasticsearch.elasticsearch /usr/share/elasticsearch/config/certs
# 2.elasticsearch修改配置文件
tcp启用TLS
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12

在http启用TLS在所有节点elasticsearch.yml文件添加如下配置
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: ./elastic-certificates.p12
xpack.security.http.ssl.truststore.path: ./elastic-certificates.p12
# 3.为内置账号添加密码
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive #interactive:给用户设置明码,auto:自动生成密码
# 4.测试
curl -XGET -u elastic 'localhost:9200/_xpack/security/user?pretty'
curl 127.0.0.1:9200 -u elastic