elasticsearch在默认安装后,没有提供任何安全保护。
在elasticsearch.yml配置了server.host=0.0.0.0导致公网可以访问es集群。
数据安全的基本需求:
1.身份认证,鉴定用户是否合法
2.用户鉴权,指定哪个用户可以访问哪个索引
3.传输加密
4.日志审计
解决方案:
1.设置nginx反向代理
2.x-pack
身份认证 | Authentication
1.认证体系的几种类型
- 提供用户名和密码
- 提供秘钥或 Kerberos 票据
2.在 ElasticSearch 中的认证服务被称为 Realms,提供了收费和免费两种不同形式的 Realms;
- 内置 Realms(免费):File / Native(用户名和密码保存在 ElasticSearch 的索引中);
- 外部 Realms(收费):LDAP / Active Directory / PKI / SAML / Kerberos;
3.用户鉴权 | RBAC
在 ElasticSearch 中,权限包括索引级,字段级,集群及。
Privilege 权限
Cluster Privileges 集群权限:all / monitor / manager / manage_index / manage_index_template / manage_rollup
Indices Privileges 索引权限:all / create / create_index / delete / delete_index / index / manage / read / write / view_index_metadata
![022bca8d2b2952328417ff8ed69534b8.png](https://i-blog.csdnimg.cn/blog_migrate/8a766c1a538bac007e2c02455eadac64.jpeg)
![581ee775b1012be9488440c159978b58.png](https://i-blog.csdnimg.cn/blog_migrate/0a9be31c98ca6aa0bce7c657ab2355e3.jpeg)
开启并配置x-pack的认证与鉴权
运行启动命令 | 开启 xpack
bin/elasticsearch -E node.name=node0 -E cluster.name=test -E path.data=node0_data -E http.port=9200 -E xpack.security.enabled=true
运行密码设定命令设置 ES 内置用户及其初始密码
bin/elasticsearch-setup-passwords interactive
当集群开启身份认证后配置kibana
访问集群 http://localhost:9200/_cat/nodes
输入用户名和密码就可以访问了;
Kibana Authentication | 举个栗子
设置 Kibana 的用户名及密码
修改配置文件 kibana.yml;
elasticsearch.username: "kibana"elasticsearch.password: "changeme"
启动 Kibana,使用用户 elastic 登录,密码 elastic
./bin/kibana
写入信用卡信息 | 数据准备
POST orders/_bulk{"index":{}}{"product" : "1","price" : 18,"payment" : "master","card" : "9876543210123456","name" : "jack"}{"index":{}}{"product" : "2","price" : 99,"payment" : "visa","card" : "1234567890123456","name" : "bob"}
在 Kibana 中 Settings / Security / Roles 中创建角色 read_orders
添加对索引 orders 的 read 权限;
Run as privileges 设置成 kibana_user;
Minimum privileges for all spaces 设置成 read;
在 Kibana 中 Settings / Security / Users 中创建用户 demo
Roles 设置成 read_orders;
退出用户 elastic
用新创建的 demo 用户登录
可以搜索索引 orders;
但是不可以删除;