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 ));