ElasticSearch5.x基于SearchGuard的账号密码权限管控
ElasticSearch生产集群做了证书认证,数据需要共享了怎么办?怎样安全的数据共享?
单纯的使用证书对外开放是不现实的,在最开始搭建生产集群的时候能能够预留出来十几个client证书用于认证已经很了不起了,那如果有几百个接入体,每个接入体都需要特色化的权限,而不是单纯的读组和写组。
这样就需要最基础的账密认证方式,并且能够实现权限的管控。
基于这个目标,我们需要做的是单独拿出来一台client角色的客户端,解除该client角色的$ElasticSearch_HOME/config/elasticsearch.yml下的
searchguard.ssl.http.enabled=false
配置更改为false,代表禁用该节点的http_ssl功能,意味着可以使用简单的http账号密码来进行数据的访问。
访问需要使用ElasticSearch的低阶APIhttps://www.elastic.co/guide/en/elasticsearch/client/java-rest/5.4/_basic_authentication.html
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("user", "password"));
RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
})
.build();
实现简单的权限管控,建议可以通过业务数据库进行一层封装留痕记录和管控,底层使用SearchGuard提供的sgconfig下的yml文件来实现用户组的管理和用户的基础操控。