Elasticsearch是一个实时分布式搜索和分析引擎。
Shield 时ES的安全插件,它可以拦截所有的向ES的请求,用户必须输入用户名和密码才能继续访问。
废话不多说,直接来干货:
1.安装Shield
shield官方网站 https://www.elastic.co/guide/en/shield/shield-1.3/getting-started.html
本文以es1.5.1版本安装,注意不同的es版本对应安装的shield命令不同
To install and run Shield:
- Run bin/plugin -i from ES_HOME to install the license plugin.
bin
/
plugin
-
i elasticsearch
/
license
/
latest
- Run bin/plugin -i to install the Shield plugin.
bin
/
plugin
-
i elasticsearch
/
shield
/
latest
2.用户配置
安装完成shield之后,需要配置对应角色的用户,shield预定义的用户角色有三个,
分别是:1.admin 可以操作任何的集群和索引的动作
2.power_user 可以监控集群和执行任何索引操作
3.user 可以在任何索引上执行读操作。
配置对应角色的用户命令是:
bin
/
shield
/
esusers useradd 用户名
-
r 角色
按回车会提示你输入密码
密码至少是6个字符或者数字长度
用户名密码配置成功之后可以在config/shield下面看到 users和users_roles文件
users中是用户名和密码,密码是加密过的
users_roles是你建立的用户所属的角色
3.Java API配置
这里以spring boot1.3.0.RELEASE版本做演示
对应的elasticsearch版本是 spring-boot-starter-data-elasticsearch 1.3.1.RELEASE,所以项目对应的shield版本也是1.3
官网对应的API是:
https://www.elastic.co/guide/en/shield/shield-1.3/_using_elasticsearch_java_clients_with_shield.html
智能会议系统中关于es的
TransportClient
配置代码是通过工厂模式,所以要适应spring-elasticsearch 的添加shield代码是:
Properties properties=new Properties();
properties.put("cluster.name",clusterName);
properties.put("shield.user", "admin:123456");
transportClientFactoryBean.setProperties(properties);
transportClientFactoryBean的shield
用户名密码和集群名称等等属性是通过properties配置,它自己内部会读取properties。
官方的针对
TransportClient
中加入shield的代码配置如下
TransportClient
client
=
new
TransportClient
(
ImmutableSettings
.
builder
()
.
put
(
"cluster.name"
,
"myClusterName"
)
.
put
(
"shield.user"
,
"transport_client_user:changeme"
))
.
addTransportAddress
(
new
InetSocketTransportAddress
(
"localhost"
,
9300
))
.
addTransportAddress
(
new
InetSocketTransportAddress
(
"localhost"
,
9301
));