目录
5.2.1 Minimal security(最低安全等级)配置
5.2.2 Basic security(基本安全等级)配置
5.2.2.2.1 配置文件 elasticsearch.yml
5.2.3.2.2.1 当询问您是否要生成 CSR 时,请输入 n
5.2.3.2.2.2 当询问您是否要使用现有 CA 时,输入 y
5.2.3.2.2.6?当询问您是否要为每个节点生成一个证书时,输入 y
5.2.3.2.2.7?出现提示时,输入集群中第一个节点的名称
5.2.3.2.2.8?输入用于连接到您的第一个节点的所有主机名
5.2.3.2.2.9?输入客户端可用于连接到您的节点的 IP 地址
5.2.3.2.3.1 解压elasticsearch-ssl-http.zip文件
5.2.3.2.3.3 修改 elasticsearch.yml 文件
5.2.3.2.3.5 把私钥密码添加到 Elasticsearch 的安全设置中
系统环境描述:本教程基于CentOS 8.0版本虚拟机
es集群规划:
节点 | Master(主节点/候选节点) | Master(紧选举) | Data(数据节点) | Kibana | IP |
master | * | 192.168.31.215 | |||
node1 | * | 192.168.31.8 | |||
node2 | * | * | 192.168.31.9 | ||
node3 | * | 192.168.31.167 | |||
node4 | * | 192.168.31.154 |
软件版本:
Elasticsearch ? ?8.11.1
kibana ? ? ?8.11.1
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.1-linux-x86_64.tar.gz
tar -zxvf elasticsearch-8.11.1-linux-x86_64.tar.gz
mv ?elasticsearch-8.11.1 /usr/local/
#ES无法通过root账号启动服务
(elastic/xiaoning)
# 创建账号
useradd elastic
# 创建密码
passwd elastic
# 给账号密码做目录授权
chown -R elastic:elastic /usr/local/elasticsearch-8.11.1
vim ?/etc/security/limits.conf
hard nofile 65536
soft nofile 65636
elastic soft memlock unlimited
elastic hard memlock unlimited
vim /etc/sysctl.conf
vm.max_map_count=262144
vm.swappiness=0
#重启
sysctl -p
ulimit -l unlimited
提示:以上操作,所有节点都需要操作
cluster.name:集群名称,节点根据集群名称确定是否是同一个集群。
node.name:节点名称,集群内唯一。
node.roles:[ data, master, voting_only ],node.roles配置项如果没有显式的配置,那么当前节点拥有所有角色(master、data、ingest、ml、remote_cluster_client、transform)。如果你放开了注释,或者手动显式添加了 node.roles配置项,那么当前节点仅拥有此配置项的中括号中显式配置的角色,没有配置的角色将被阉割。因此如果在不熟悉角色配置的情况下,不要轻易修改角色配置值, 切勿画蛇添足 。
network.host:节点对外提供服务的地址以及集群内通信的ip地址
bootstrap.memory_lock:?Swapping对性能和节点稳定性非常不利,应该不惜一切代价避免。它可能导致GC持续几分钟而不是几毫秒,并且可能导致节点响应缓慢甚至与集群断开连接。在弹性分布式系统中,使用Swap还不如让操作系统杀死节点效果更好。可以通过设置 bootstrap.memory_lock: true 以防止任何 Elasticsearch 堆内存被换出。
http.port:对外提供服务的端口号
discovery.seed_hosts:?集群初始化的种子节点,可配置部分或全部候选节点,大型集群可通过嗅探器发现剩余节点,考试环境配置全部节点即可
cluster.initial_master_nodes:节点初始 active master节点, 必须是有master角色的节点,即必须是候选节点,但并不是必须配置所有候选节点。生产模式下启动新集群时,必须明确列出应在第一次选举中计算其选票的候选节点。第一次成功形成集群后,cluster.initial_master_nodes从每个节点的配置中删除设置。重新启动集群或向现有集群添加新节点时,请勿使用此设置。
vim elasticsearch.yml
cluster.name: ning_cluster
node.name: ning_cluster_node-1
node.roles: [master]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.215
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
vim elasticsearch.yml
cluster.name: ning_cluster
node.name: ning_cluster_node-2
node.roles: [master]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.8
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
vim elasticsearch.yml
cluster.name: ning_cluster
node.name: ning_cluster_node-3
node.roles: [master,data,voting_only]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.9
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
vim elasticsearch.yml
cluster.name: ning_cluster
node.name: ning_cluster_node-4
node.roles: [data]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.167
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
vim elasticsearch.yml
cluster.name: ning_cluster
node.name: ning_cluster_node-5
node.roles: [data]
path.data: /usr/local/elasticsearch-8.11.1/data
path.logs: /usr/local/elasticsearch-8.11.1/logs
bootstrap.memory_lock: true
network.host: 192.168.31.154
http.port: 9200
transport.port: 9300
xpack.security.enabled: false
discovery.seed_hosts: ["192.168.31.215:9300", "192.168.31.8:9300","192.168.31.9:9300", "192.168.31.167:9300","192.168.31.154:9300"]
cluster.initial_master_nodes: ["ning_cluster_node-1"]
#前台进程
./bin/elasticsearch
#后台启动 守护进程
./bin/elasticsearch -d
#推荐方式(保存进程号 不占用窗口,并且方便杀进程):
./bin/elasticsearch -d -p pid
ps -ef|grep elastic
直接浏览器输入:
http://192.168.31.8:9200/
出现以上内容则说明启动成功。
提示:所有节点都需要执行上述命令
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.11.1-linux-x86_64.tar.gz
tar -zxvf kibana-8.11.1-linux-x86_64.tar.gz
server.port: 5601
server.host: "192.168.31.9"
elasticsearch.hosts: ["192.168.31.215:9200", "192.168.31.8:9200","192.168.31.9:9200", "192.168.31.167:9200","192.168.31.154:9200"]
chown -R elastic:elastic /usr/local/kibana-8.11.1
./bin/kibana
浏览器直接访问:http://192.168.31.9:5601/
https://github.com/mobz/elasticsearch-head
#添加
hostname:'*',
#ES配置文件中设置允许跨域
vim elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
进入 elasticsearch-head 解压目录,执行命令
npm install
执行命令:
npm run start
浏览器直接输入:http://localhost:9100
不同版本对 Security 的支持不同,对于 ES 6.8 及之前版本,需要手动安装 x-pack,对于7.X以上版本 X-Pack?已经内置,所以不需要额外的操作。
不同环境对集群安全的策略等级要求不同,主要区别在于你是开发环境还是生产集群环境。ES提供了三个不同等级的安全策略:最低安全等级、基本安全等级、基本安全 + HTTPS
就实际而言,在处于 ES 学习 或者本地开发模式下,是可以关闭 Security 功能的,因为如果是以学习为目的,不存在所谓的数据安全问题,因为数据即便被删除也是没关系的。而如果在学习或开发模式下也开启安全策略,意味着你需要频繁的跟密码较劲,实属没必要。
vim vim elasticsearch.yml
xpack.security.enabled: true
# kill -9 [pid]
./bin/elasticsearch -d -p pid
提示:单节点环境下,能启动成功,集群环境的安全策略最低要求配置成基本安全等级模式,所以这里是启动不了的,过不了集群的安全检查,会直接报错
./bin/elasticsearch-setup-passwords interactive
提示:单节点环境下,可以按照这个步骤,集群环境下,需要完成Basic security(基本安全等级)配置后才能创建
提示:单节点环境下,可以按照这个步骤,集群环境下,需要完成Basic security(基本安全等级)配置后才能配置Kibana账号信息
最低安全配置仅适用于单节点服务,而不符合集群的最低安全要求。如果集群有多个节点,那么您必须在节点之间配置 TLS。如果您不启用 TLS,无法启动生产集群。
传输层依赖双向 TLS 对节点进行加密和认证。正确应用 TLS 可确保恶意节点无法加入集群并与其他节点交换数据。虽然在 HTTP 层实现用户名和密码身份验证对于保护本地集群很有用,但节点之间的通信安全需要 TLS。
Transport 协议是 Elasticsearch 节点用于相互通信的协议的名称。此名称特定于 Elasticsearch,用于区分传输端口(默认 9300)和 HTTP 端口(默认 9200)。节点使用传输端口相互通信,REST 客户端使用 HTTP 端口与 Elasticsearch 通信。
# 开启ssl访问请求头配置(head访问需要)
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
#配置SSL证书
xpack.security.transport.ssl.enabled: true
#设置验证模式为:certificate
xpack.security.transport.ssl.verification_mode: certificate
#设置证书路径
xpack.security.transport.ssl.key: certs/elastic-certificates.key
xpack.security.transport.ssl.certificate: certs/elastic-certificates.crt
xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
提示:
1、删除各个es节点$ELASTICSEARCH_HOME/config目录下的elasticsearch.keystore文件
2、清空各个es节点$ELASTICSEARCH_HOME/ 下的data和log目录
./bin/elasticsearch-certutil ca --pem --out ca.zip --days 36500 -s
#解压ca.zip
unzip ca.zip
# 颁发证书
./bin/elasticsearch-certutil cert --ca-cert ca/ca.crt --ca-key ca/ca.key --pem --name elastic-certificates --out elastic-certificates.zip --days 36500 -s
#每个节点的config文件夹下,新建一个certs目录
mkdir certs
#拷贝文件到节点的cert目录下
#解压证书文件
unzip elastic-certificates.zip
#拷贝到certs文件夹下
cp ca/* elastic-certificates/* config/certs
# 拷贝给其他机器
scp config/certs/* elastic@node1:/usr/local/elasticsearch-8.11.1/config/certs/
scp config/certs/* elastic@node2:/usr/local/elasticsearch-8.11.1/config/certs/
scp config/certs/* elastic@node3:/usr/local/elasticsearch-8.11.1/config/certs/
scp config/certs/* elastic@node4:/usr/local/elasticsearch-8.11.1/config/certs/
bin/elasticsearch-setup-passwords interactive
elastic xiaoning
apm_system xiaoning
kibana_system xiaoning
logstash_system xiaoning
beats_system xiaoning
remote_monitoring_user xiaoning
# 配置账号密码
vim kibana.yml
elasticsearch.username: "kibana_system"
elasticsearch.password: "xiaoning"
在生产环境中,如果没有基于HTTPS上启用 TLS,那么部分安全功能会无法使用,比如Token和API密钥。
官方文档参考:
启用 HTTPS 必须要配置集群 Security,即基础集群安全策略。
./bin/elasticsearch-certutil http
提示:
此命令会生成一个 .zip文件,其中包含用于 Elasticsearch 和 Kibana 的证书和密钥。每个文件夹都包含一个 README.txt 解释如何使用这些文件。
elastic-stack-ca.p12这是您为集群生成 的文件的绝对路径
您可以输入年、月或日的有效期。例如,输入 90D90 天.
每个证书都有自己的私钥,并针对特定的主机名或 IP 地址颁发.
使用生成节点证书时使用的相同节点名称.
这些主机名将作为 DNS 名称添加到证书的主题备用名称 (SAN) 字段中。
列出用于通过 HTTPS 连接到集群的每个主机名和变体
到此,证书生成完成,可以看到生成的证书名称
unzip elasticsearch-ssl-http.zip
#启用 HTTPS
xpack.security.http.ssl.enabled: true
#指定 http.p12 安全证书的位置
xpack.security.http.ssl.keystore.path: http.p12
#拷贝到本机
cp elasticsearch/http.p12 config/
# 拷贝给其他机器
scp elasticsearch/http.p12 elastic@node1:/usr/local/elasticsearch-8.11.1/config/
scp elasticsearch/http.p12 elastic@node2:/usr/local/elasticsearch-8.11.1/config/
scp elasticsearch/http.p12 elastic@node3:/usr/local/elasticsearch-8.11.1/config/
scp elasticsearch/http.p12 elastic@node4:/usr/local/elasticsearch-8.11.1/config/
#每个节点都需要执行,每个节点的密码可以设置的并不一样,生产环境可以做好密码记录,这里我为了方便,就设置一样了
./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
输入密码:xiaoning
scp kibana/elasticsearch-ca.pem elastic@node2:/usr/local/kibana-8.11.1/config
vim kibana.yml
elasticsearch.ssl.certificateAuthorities:[config/elasticsearch-ca.pem]
elasticsearch.hosts: ["https://192.168.31.215:9200", "https://192.168.31.8:9200","https://192.168.31.9:9200", "https://192.168.31.167:9200","https://192.168.31.154:9200"]
以上之后,kibana 与Elasticsearch之间的SSL加密通道传输就完成了。
好了,本次分享就到这里,如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!