公号:码农充电站pro
主页:https://codeshellme.github.iohtml
在安装完 ES 后,ES 默认是没有任何安全防御的。node
ES 的安全管理主要包括如下内容:git
这里有一些免费的安全方案:github
ES 中提供的认证叫作 Realms,有如下几种方式,可分为两类:shell
用户鉴权经过定义一个角色,并分配一组权限;而后将角色分配给用户,使得用户拥有这些权限。api
ES 中的权限有不一样的级别,包括集群级别(30 多种)和索引级别(不到 20 种)。安全
ES 中提供了不少内置角色(不到 30 种)可供使用。app
ES 中提供了不少关于用户与角色的 API:curl
下面演示如何使用 ES 的安全功能。elasticsearch
启动 ES 并经过 xpack.security.enabled 参数打开安全功能:
bin\elasticsearch -E node.name=node0 -E cluster.name=mycluster -E path.data=node0_data -E http.port=9200 -E xpack.security.enabled=true
使用 elasticsearch-setup-passwords 命令启用 ES内置用户及初始 6 位密码(须要手动输入,好比是 111111
):
bin\elasticsearch-setup-passwords interactive
该命令会启用下面这些用户:
启用 ES 的安全功能后,访问 ES 就须要输入用户名和密码:
也能够经过 curl 命令(并指定用户)来访问 ES:
curl -u elastic 'localhost:9200'
更多内容可参考这里。
打开 Kibana 的配置文件 kibana.yml
,写入下面内容:
elasticsearch.username: "kibana_system" # 用户名 elasticsearch.password: "111111" # 密码
而后使用 bin\kibana
命令启动 Kibana。
访问 Kibana 也须要用户和密码(这里使用的是超级用户):
下面演示如何使用 Kibana 建立角色和用户。登陆 Kibana 以后进行以下操做:
点击 Stack Management
后进入下面页面:
点击 Create role
建立角色:
建立角色须要填写以下内容:
通过上面的操做,建立的角色名为 test_role
,该角色对 test_index
索引有只读权限;若是进行超越范围的操做,将发生错误。
进入到建立用户的界面,点击 Create user
建立用户:
填写用户名和密码,并将角色 test_role
赋予该用户。
使用新建立的用户登陆 Kibana:
该用户只对 test_index
索引有只读权限;若是进行超越范围的操做,将发生错误。
传输加密指的是在数据的传输过程当中,对数据进行加密(可防止数据被抓包)。
传输加密分为集群内加密和集群间加密:
更多的内容可参考这里。
在 ES 中可使用 TLS 协议对数据进行加密,须要进行如下步骤:
使用以下命令建立 CA:
bin\elasticsearch-certutil ca
成功后,能够看到当前文件夹下多了一个文件:
elastic-stack-ca.p12
使用以下命令为 ES 中的节点生成证书和私钥
bin\elasticsearch-certutil cert --ca elastic-stack-ca.p12
成功后,能够看到当前文件夹下多了一个文件:
elastic-certificates.p12
将建立好的证书 elastic-certificates.p12
放在 config/certs
目录下。
# 启动第一个节点 bin\elasticsearch -E node.name=node0 -E cluster.name=mycluster -E path.data=node0_data -E http.port=9200 -E xpack.security.enabled=true -E xpack.security.transport.ssl.enabled=true -E xpack.security.transport.ssl.verification_mode=certificate -E xpack.security.transport.ssl.keystore.path=certs\elastic-certificates.p12 -E xpack.security.transport.ssl.truststore.path=certs\elastic-certificates.p12 # 启动第二个节点 bin\elasticsearch -E node.name=node1 -E cluster.name=mycluster -E path.data=node1_data -E http.port=9201 -E xpack.security.enabled=true -E xpack.security.transport.ssl.enabled=true -E xpack.security.transport.ssl.verification_mode=certificate -E xpack.security.transport.ssl.keystore.path=certs\elastic-certificates.p12 -E xpack.security.transport.ssl.truststore.path=certs\elastic-certificates.p12
不提供证书的节点将没法加入集群:
bin\elasticsearch -E node.name=node2 -E cluster.name=mycluster -E path.data=node2_data -E http.port=9202 -E xpack.security.enabled=true -E xpack.security.transport.ssl.enabled=true -E xpack.security.transport.ssl.verification_mode=certificate # 加入失败
也能够将配置写在配置文件 elasticsearch.yml
中,以下:
xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
经过配置以下三个参数,使得 ES 支持 HTTPS:
xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12 xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
在命令行启动:
bin\elasticsearch -E node.name=node0 -E cluster.name=mycluster -E path.data=node0_data -E http.port=9200 -E xpack.security.enabled=true -E xpack.security.transport.ssl.enabled=true -E xpack.security.transport.ssl.verification_mode=certificate -E xpack.security.transport.ssl.keystore.path=certs\elastic-certificates.p12 -E xpack.security.transport.ssl.truststore.path=certs\elastic-certificates.p12 -E xpack.security.http.ssl.enabled=true -E xpack.security.http.ssl.keystore.path=certs\elastic-certificates.p12 -E xpack.security.http.ssl.truststore.path=certs\elastic-certificates.p12
启动成功后,能够经过 HTTPS 协议访问 ES:
https://localhost:5601/
首先用 openssl
为 kibana 生成 pem:
openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -out elastic-ca.pem
成功后会生成以下文件:
elastic-ca.pem
将该文件放在 config\certs
目录下。
在 Kibana 的配置文件 kibana.yml
中配置以下参数:
elasticsearch.hosts: ["https://localhost:9200"] elasticsearch.ssl.certificateAuthorities: ["C:\\elasticsearch-7.10.1\\config\\certs\\elastic-ca.pem"] elasticsearch.ssl.verificationMode: certificate
bin\kibana
bin/elasticsearch-certutil ca --pem
上面命令执行成功后会生成以下 zip 文件:
elastic-stack-ca.zip
将该文件解压,会有两个文件:
ca.crt ca.key
将这两个文件放到 Kibana 的配置文件目录 config\certs
。
在 Kibana 的配置文件 kibana.yml
中配置以下参数:
server.ssl.enabled: true server.ssl.certificate: config\\certs\\ca.crt server.ssl.key: config\\certs\\ca.key
bin\kibana
启动成功后,能够经过 HTTPS 协议访问 Kibana:
https://localhost:5601/
(本节完。)
推荐阅读:
欢迎关注做者公众号,获取更多技术干货。