本博客每周五更新一次。
本文在原Elasticsearch安装基础上增加插件x-pack用户权限认证和Kibana页面管理,丰富Elasticsearch使用场景。
安装分为三个层次
- 普通安装,仅启用Kibana,不启用x-pack
- 用户认证,开启x-pack,Kibana自动开启用户管理。
- https加密,为Elasticsearch和Kibana增加数据安全。
/etc/security/limits.conf
默认添加内容如下:* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
/etc/sysctl.conf
,末尾增加内容:vm.max_map_count=262144
,立即生效命令:/sbin/sysctl -p
从官网下载 7.17版本,解压到安装目录即可。
# 创建安装目录
mkdir /usr/local/elasticsearch
# 解压安装包
cd /usr/local/elasticsearch
tar -zxvf elasticsearch-7.17.0-linux-x86_64.tar.gz
tar -zxvf kibana-7.17.0-linux-x86_64.tar.gz
#创建用户
useradd 用户
# 授权
chown -R 用户: /usr/local/elasticsearch/
####### 切换到新建用户,后续操作都使用该用户完成####
su 用户
config/elasticsearch.yml
,设置如下# ---------------------------------- Cluster -----------------------------------
# 集群名称
cluster.name: my-application
# 集群中主节点的节点的集合
cluster.initial_master_nodes: ["node-1"]
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
# 节点名称
node.name: node-1
# ----------------------------------- Paths ------------------------------------
# 设置data存储目录
path.data: /usr/local/elasticsearch/elasticsearch-7.17.0/data
# 设置logs日志的目录
path.logs: /usr/local/elasticsearch/elasticsearch-7.17.0/logs
# ---------------------------------- Network -----------------------------------
#
# 默认仅localhost访问,配置当前服务器ip,允许ip访问
network.host: 192.168.10.200
# 服务端口,默认为9200
http.port: 9200
编辑文件:config/jvm.options
填写如下内容
-Xms1g
-Xmx1g
bin/elasticsearch
http://服务器ip:9200
解压安装包,修改配置文件:vi config/kibana.yml
,指定Elasticsearch地址:
# kibana 服务地址,默认仅localhost可访问
server.host: "192.168.10.200"
# Elasticsearch服务地址
elasticsearch.hosts: ["http://192.168.10.200:9200"]
# 系统语言默认英文,改为中文
i18n.locale: "zh-CN"
运行启动软件即可。命令:bin/kibana
,登录地址:http://ip:5601
编辑文件:config/elasticsearch.yml
,设置如下内容:
# 开启 xpack
xpack.security.enabled: true
# 确保节点不会无意中连接到可能在网络上运行的其他群集
discovery.type: single-node
# 开启传输层 ssl加密,不开启服务无法启动
xpack.security.transport.ssl.enabled: true
注意:
Transport SSL must be enabled if security is enabled on a [basic] license. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security by setting [xpack.security.enabled] to [false]
bin/elasticsearch
# 自定义密码
bin/elasticsearch-setup-passwords interactive
# 随机生成密码
bin/elasticsearch-setup-passwords auto
# 随机生成结果如下
Changed password for user apm_system
PASSWORD apm_system = h1d0q4mfPvbgxqQeLERj
Changed password for user kibana_system
PASSWORD kibana_system = OzKzbRb84YtgyvoXkvXO
# 登录Kibana账号
Changed password for user kibana
PASSWORD kibana = OzKzbRb84YtgyvoXkvXO
Changed password for user logstash_system
PASSWORD logstash_system = kLFsukpLcsyGsqNFGMuW
Changed password for user beats_system
PASSWORD beats_system = ESvQWN3jbM4s7f78CU72
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = KvLoRUhEKutOXrL23ZWL
Changed password for user elastic
PASSWORD elastic = Hm3pZkPVsEpwPC7Kj9QA
注意:
# 不带认证访问会报认证异常
curl http://localhost:9200/_cat/indices
# -u参数指定账号,执行后会提示输入密码
curl -u elastic http://localhost:9200/_cat/indices
# -u参数指定账号和密码,格式:user:password
curl -u elastic:123456 http://localhost:9200/_cat/indices
修改用户密码:curl -XPOST -u elastic http://localhost:9200/_security/user/elastic/_password -H "Content-Type:application/json" -d "{\"password\":\"abcdefg\"}"
如果忘记密码,可以先取消认证,即注释掉上面config/elasticsearch.yml中添加的两个配置,然后重启ElasticSearch,然后找到一个类型.security-X的index,删除掉就可以回到最初无密码认证的状态了:
# 查看.security-X存在与否
curl http://localhost:9200/_cat/indices | grep ".security"
# 删除index,我这里是.security-7
curl -XDELETE http://localhost:9200/.security-7
编辑文件:vi config/kibana.yml
,设置账号和密码
xpack.security.enabled: true
elasticsearch.username: "kibana"
elasticsearch.password: "XXXXXX"
web页面登录时,管理员账号为 Kibana
用户
如果不配置 HTTPS 连接,某些 Elasticsearch 功能(比如令牌和 API 密钥)将被禁用,该安全层确保所有进出集群的通信都是安全的,HTTPS 配置建立在“传输层TLS安全配置之上” ,所以它要求你的集群已经配置了传输层安全配置。
https是加密有三个地方
由于Elasticsearch集群中的每个节点都是客户端和集群中其他节点的服务器,因此所有传输证书都必须是客户端和服务器证书。
Elasticsearch附带加密签名证书工具elasticsearch-certutil生成数字证书,操作如下:
# 生成根证书 执行后确认回车两次
bin/elasticsearch-certutil ca
# 执行后确认回车三次
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
获得可用于加密通信的TLS/SSL证书elastic-certificates.p12
,创建目录config/certs
,将证书复制到config/certs
的目录中,然后在config/elasticsearch.yml
文件配置如下:
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
重新启动Elasticsearch集群中的所有节点,应用传输层加密。
此处使用与传输层相同认证文件,编辑config/elasticsearch.yml
,追加如下代码:
#开启http层加密
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
使用前面生成文件:elastic-certificates.p12
,分解为私匙、公共证书和CA证书
# Private Key 私钥,回车即可
openssl pkcs12 -in elastic-certificates.p12 -nocerts -nodes > client.key
# Public Certificate 公共证书,回车即可
openssl pkcs12 -in elastic-certificates.p12 -clcerts -nokeys > client.cer
# CA Certificate 签署公共证书的CA,回车即可
openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -chain > client-ca.cer
Kibana根目录下创建文件夹:config/certs
,将文件client.cer、client.key、client-ca.cer
复制到该目录。
编辑Kibana配置文件vi config/kibana.yml
,添加如下配置:
# 更新Elasticsearch连接地址
elasticsearch.hosts: ["https://192.168.10.200:9200"]
# ssl加密
elasticsearch.ssl.certificate: config/certs/client.cer
elasticsearch.ssl.key: config/certs/client.key
elasticsearch.ssl.certificateAuthorities: [ "config/certs/client-ca.cer" ]
elasticsearch.ssl.verificationMode: certificate
重启kibana登录后请求Elasticsearch确认是否可操作。
复用Elasticsearch数字证书,编辑Kibana配置文件vi config/kibana.yml
,增加如下内容:
server.ssl.enabled: true
server.ssl.certificate: config/certs/client.cer
server.ssl.key: config/certs/client.key
重启kibana服务,即可通过https://localhost:5601访问kibana UI进行操作。