浏览文章
文章信息
当前直接使用ElasticSearch以及通过Kibana访问时,没有做任何限制,没有做用户和权限的控制,安全性上有一定风险,因此通过ES提供的X-PACK来实现这一需求。同样是基于ES5.5版本。官网简介如下:X-Pack是一种Elastic Stack扩展,可将安全性,警报,监控,报告和图形功能捆绑到一个易于安装的软件包中。 虽然X-Pack组件可以无缝协同工作,但您可以轻松地启用或禁用要使用的功能。可见,本文所述的相关功能只是这个扩展包的一小部分功能。
- ElasticSearch安装X-Pack,通过执行ES_HOME下的bin/elasticsearch-plugin install 命令安装,注意要使用启动es的用户,不要用root用户,集群中的每一个节点都需要执行:
bin/elasticsearch-plugin install x-pack官网还介绍了其他的安装方式,点这里。安装完成后,重启ES,启动日志中能看到x-pack:
通过浏览器,再次访问时,会弹出提示输入用户名密码,输入默认的用户名/密码:elastic/changeme,即可。- Kibanna安装X-Pack,和es安装类似,通过执行KIBANA_HOME下的bin/kibana-plugin install 命令安装,也有其他安装方式。
- 用户管理
x-pack提供了标准的rest api用于个用户、角色、权限等管理。详见。
(1)查看所有用户:curl -XGET -u elastic 'localhost:9200/_xpack/security/user',结果如下:{ "elastic": { "username": "elastic", "roles": ["superuser"], "full_name": null, "email": null, "metadata": { "_reserved": true }, "enabled": true }, "kibana": { "username": "kibana", "roles": ["kibana_system"], "full_name": null, "email": null, "metadata": { "_reserved": true }, "enabled": true }, "logstash_system": { "username": "logstash_system", "roles": ["logstash_system"], "full_name": null, "email": null, "metadata": { "_reserved": true }, "enabled": true } }可见,有三个默认用户,分别对应elastic,kibana,logstash三个系统,用户拥有不同的角色组。
(2)查看某一用户:curl -XGET -u elastic 'localhost:9200/_xpack/security/user/elastic'
(3)删除某一用户:curl -XDELETE -u elastic 'localhost:9200/_xpack/security/user/userName'
(4)创建用户:见5- 角色管理
(1)查看所有角色:curl -XGET -u elastic 'localhost:9200/_xpack/security/role'
(2)查看某一角色:curl -XGET -u elastic 'localhost:9200/_xpack/security/role/superuser'
(3)删除某一角色:curl -XDELETE -u elastic 'localhost:9200/_xpack/security/role/roleName'
(4)创建角色:见5- 添加自己的用户
创建用户需要指定其拥有的权限,可以使用系统默认的角色,也可以自己创建角色,如下:curl -XPOST -u elastic 'localhost:9200/_xpack/security/role/testRole' -H "Content-Type: application/json" -d '{"cluster":["all"],"indices":[{"names":["*"],"privileges":["all"]}]}'然后:
curl -XPOST -u elastic 'localhost:9200/_xpack/security/user/testUser' -H "Content-Type: application/json" -d '{ "password" : "test", "full_name" : "test user", "email" : "test@test", "roles" : [ "testRole" ], "metadata" : { "intelligence" : 7 } }'testUser是创建的用户名。用户名必须至少为1个字符且不得超过30个字符。 第一个字符必须是字母(a-z或A-Z)或下划线(_)。 后续字符可以是字母,下划线(_),数字(0-9)或以下任何符号@, - ,。 或$。
其中password和roles是必填字段,其余三个可选。
创建结果如下,如果用户已存在,则会更新,结果中的created为false。{ "user": { "created" : true } }
注意:上文提到的三个默认用户,是系统保留用户,不允许创建或修改,它们默认的角色亦是如此。
- 在代码中使用es用户管理
如果对es开启了用户管理,而代码服务没有使用用户,会报如下错:
Invocation of init method failed; nested exception is NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{dBISQCNcS4qAzYgKerYURA}{localhost}{localhost:9300}]]
需要在代码中指定用户。
首先引入依赖包:<dependencies> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>x-pack-transport</artifactId> <version>5.5.0</version> </dependency></dependencies>
代码示例如下:import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient; ... TransportClient client = new PreBuiltXPackTransportClient(Settings.builder() .put("cluster.name", "myClusterName") .put("xpack.security.user", "userName:password") ... .build()) .addTransportAddress(new InetSocketTransportAddress("localhost", 9300)) .addTransportAddress(new InetSocketTransportAddress("localhost", 9301));
详见官网。
本文只列了一些基础的功能,具体参见官网。