赞
踩
集群的安全管理对于生产环境来说不可或缺,接下来我们来看看最基础集群安全配置是如何设置的。
基于elasticsearch7.13.0
官方文档:
Secure the Elastic Stack > configure security for the Elastic Stack > set up minimal security for Elasticsearch
Secure the Elastic Stack > configure security for the Elastic Stack > set up basic security for Elasticsearch
注意:以下所有步骤已经验证过真实可行,如果发现你的结果与我示例的不一致,请细心检查是否有忽略步骤或者操作错误
为了方便大家理解,并且能够脱离第三方文档独立进行集群安全的配置,以下配置步骤完全依赖官方文档,且会给出官方文档对应步骤,后续可直接参考官方文档进行配置。
1、首先我们需要开启集群安全,这个配置需要在 Secure the Elastic Stack » Configure security for the Elastic Stack » Set up minimal security for Elasticsearch中找到
如果只需要开启最小化的安全配置的话,配置这两项即可
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
接下来就只需要执行以下指令指定密码
./bin/elasticsearch-setup-passwords interactive
但是按照Elastic认证考试和实际生产环境来说,为了保障更加安全的集群,我们需要通过证书的方式来配置,因此还需要添加ssl配置
这个配置可以在Secure the Elastic Stack > configure security for the Elastic Stack > set up basic security for Elasticsearch中找到
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
那么我们总共需要添加的配置就如下所示,我们需要在需要配置security的每个节点中添加如下配置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
注意这里识别的证书路径默认是在config下的,所以后续我们生成的证书是需要转移到config文件夹下
2、生成证书
打开Secure the Elastic Stack > configure security for the Elastic Stack > set up basic security for Elasticsearch
可以看到文档中已经说明了生成证书的步骤:
(1)在es安装目录下执行以下命令,生成授权证书
./bin/elasticsearch-certutil ca
这里执行后会要求输入文件名和密码,我这里选择不输入,直接enter
如果需要配置文件名和密码的可以输入
可以看到目录下多了一个.p12文件
(2)根据授权证书,生成节点证书,注意这里生成的这个节点证书elastic-certificates.p12才是我们需要的证书
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
(3)最后一步,如果是多节点集群,那么需要把这个证书复制到其他节点中,如果需要和其他集群绑定远程集群(使用跨集群搜索、跨集群复制等功能),那么其他集群中的每个节点也需要复制该证书
但是在复制之前,我们需要先将该证书转移到config目录下
cp elastic-certificates.p12 config/
这里的复制,我们可以通过scp指令来实现,我这里的需要配置两个集群,一个集群3节点,一个集群单节点,因此,我需要把这个证书复制到其他3个节点中的es的config文件夹下
scp elastic-certificates.p12 root@172.16.188.11:/var/local/elasticsearch/config
scp elastic-certificates.p12 root@172.16.188.12:/var/local/elasticsearch/config
scp elastic-certificates.p12 root@172.16.188.8:/var/local/elasticsearch/config
建立连接时会要求输入节点的root账号密码,直接输入即可
3、因为使用root账号远程拷贝的证书,因此还需要将证书赋权给elastic账号,否则启动es节点的时候会报错文件无权限,注意赋权前需要
# 切换至root账户
su
# 给elastic赋权
chown -R elastic:elastic /var/local/elasticsearch/config/elastic-certificates.p12
# 切换回elastic账户
su elastic
4、启动es节点
配置密码前我们需要先启动所有es节点,并且需要以后台进程的形式启动,这样我们才能在启动时输入指令
./bin/elasticsearch -d
启动后访问ip:9200会发现需要输入账户密码了,到这里以前的就成功了,下一步,我们来创建账户密码
5、生成账号密码
执行指令生成账户密码,注意这里以elastic账户来执行,这一步的指令可以在Set up minimal security for Elasticsearch文档中找到
./bin/elasticsearch-setup-passwords interactive
执行后会弹出是否继续的确认,输入y即可,然后会弹出为当前账户输入密码的提示,需要输入6次密码,确认6次,总共12次,中间注意不要输错,这里我输入的密码为elastic
生成账号密码的操作在一个集群中的任意一个节点执行过就可以了,因为security识别账号密码是以集群为单位的
6、重新访问9200,输入账户密码,正常显示节点信息了
并没有给同集群下的11节点配置过密码,但是使用elastic同样能够登记,也说明了同集群中是共享账号密码的
7、在kibana配置文件中设置es账户密码,也就是刚刚设置的账户密码(考试时无需设置,会帮你设置好)
elasticsearch.username: "elastic"
elasticsearch.password: "elastic"
8、启动kibana,输入账号密码,正常登陆
9、在另一个集群中也如上述步骤生成账号密码
集群安全的配置看上去步骤多,但实际多配置几遍,自己总结下配置步骤,结合官方文档,无需背下配置,相信你自己,会轻松掌握这个知识点的!
1、如果知道原密码
可以通过更新密码接口,更改用户密码
文档:REST APIs » Security APIs » Change passwords API
Set up a cluster for high availability » Back up a cluster » Restore a cluster’s security configuration
POST /_security/user/jacknich/_password
{
“password” : “new-password”
}
2、不知道原密码,暴力重置
关闭es,删除data/nodes文件夹
然后重新启动,重新生成用户密码
3、不知道原密码,通过管理员修改
(1)添加一个超级管理员,然后用这个管理员来修改elastic的密码
# 生成超级管理员root
./bin/elasticsearch-users useradd root -p 123456 -r superuser
(2)在kinaba中配置
elasticsearch.username: root
elasticsearch.password: 123456
(3)然后用root登陆kibana
(4)修改elastic密码
POST /_security/user/elastic/_password
{
“password” : “new-password”
}
如果你在kibana中开启了会员试用且超过30天了,可以通过以下方法延期:
1、生产环境的话需要付费开通会员
2、自己的本地环境,或者不关心数据的测试环境,可直接删除data/nodes文件夹恢复30天试用
es的权限控制是以角色用户的模式运行的,即将权限绑定到角色上,权限包括该角色对集群可进行哪些操作、可操作哪些索引、可对索引进行哪些操作(增删改查等)、可操作索引中哪些字段、不能操作哪些字段(该维度需要开启白金会员或者30天试用)。然后将角色分配到用户,这样用户就拥有了一系列权限。包括可以登陆kibana的权限
角色用户权限是建立在开启security的前提下的,我们可以通过kibana可视化配置,也可以通过api配置,下面我们以kibana配置举例
进入Stack Management,在security模块点击进入Roles(注意:如果你没有开启security是看不到这个模块的)
以下我们以一个实例来举例:
· 创建一个用户benjamin5,密码123456,邮箱55555@sina.com
· 他可以登陆kibana
· 拥有创建索引的权利,可以查看索引但不能删除这些索引。
· 只能查看product索引,但不允许查看product索引中的admin_field字段
创建角色
使用*来表示所有
创建用户
注意这里添加了一个kibana_admin角色,用于给该用户赋予能够登陆kibana的权限,旧版本中使用kibana_user,7.13版本kibana_user依然可用,但是会标黄警告
我们推出登陆,使用benjamin5账号来登陆
插入索引
PUT product/_bulk
{"index":{}}
{"name": "phone", "admin_field": "you can't see!"}
{"index":{}}
{"name": "phone", "admin_field": "can't see!"}
{"index":{}}
{"name": "fruit", "admin_field": "password"}
{"index":{}}
{"name": "fruit", "admin_field": "you can't see!"}
执行会发现报错,提示我们要创建索引的话需要如下索引权限
auto_configure,create_index,manage,all
那么我们就按照他的提示,再修改一下之前配置的角色的权限即可
这里需要注意根据提示来看,要再配置auto_configure,create_index,manage,all这些权限,但实际我们已经配置了create权限,create_index是不用配置的,因为我们要求只能查看和新增,那么manage权限肯定不能配置,all权限就更不能配置了。
所以实际上我们只需要再配置一个auto_configure权限即可。kibana中的提示是按照从小到大的关系给出的,所以我们在配置时,可以先从提示的前面一两个权限添加,然后测试是否可行。
添加后再执行发现成功了
查看索引
GET product/_doc/_search
结果符合预期
然后我们再尝试删除索引,发现报错,提示权限不足
DELETE product
针对角色权限的配置,更多的是需要自己动手实践、摸索,这样才能真正理解、熟悉。
【针对ES知识点有疑惑的地方,可以留言告诉我】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。