通过TransportClient这个接口,我们可以不启动节点就可以和es集群进行通信,它需要指定es集群中其中一台或多台机的ip地址和端口,例子如下:
- Client client = new TransportClient()
- .addTransportAddress(newInetSocketTransportAddress("host1", 9300))
- .addTransportAddress(newInetSocketTransportAddress("host2", 9300));
- client.close();
Client client = new TransportClient() .addTransportAddress(newInetSocketTransportAddress("host1", 9300)) .addTransportAddress(newInetSocketTransportAddress("host2", 9300)); client.close();
如果你需要更改集群名(默认是elasticsearch),需要如下设置:
- Settings settings =ImmutableSettings.settingsBuilder()
- .put("cluster.name","myClusterName").build();
- Client client = newTransportClient(settings);
Settings settings =ImmutableSettings.settingsBuilder() .put("cluster.name","myClusterName").build(); Client client = newTransportClient(settings);
你可以设置client.transport.sniff为true来使客户端去嗅探整个集群的状态,把集群中其它机器的ip地址加到客户端中,这样做的好处是一般你不用手动设置集群里所有集群的ip到连接客户端,它会自动帮你添加,并且自动发现新加入集群的机器。代码实例如下:
- Settings settings = ImmutableSettings.settingsBuilder()
- .put("client.transport.sniff", true).build();
- TransportClientclient = new TransportClient(settings);
Settings settings = ImmutableSettings.settingsBuilder() .put("client.transport.sniff", true).build(); TransportClientclient = new TransportClient(settings);
注意:当ES服务器监听使用内网服务器IP而访问使用外网IP时,不要使用client.transport.sniff为true,在自动发现时会使用内网IP进行通信,导致无法连接到ES服务器,而直接使用addTransportAddress方法进行指定ES服务器。
Elasticsearch 免费认证插件Search-guard的部署安装及策略配置
当前es正在被各大互联网公司大量的使用,但目前安全方面还没有一个很成熟的方案,大部门都没有做安全认证或基于自身场景自己开发,没有一个好的开源方案
es官方推出了shield认证,试用了一番,很是方便,功能强大,文档也较全面,但最大的问题是收费的,我相信中国很多公司都不愿去花钱使用,所以随后在github
中找到了search-guard项目,接下来我们一起来了解并部署此项目到我们的ES环境
ElasticSearch2.3.4的search-guard的安装及配置讲解说明
一、Search-guard的安装
安装search-guard-ssl和search-guard
1、进入到Elasticsearch的安装路径下,本文中以该路径为例子:/ultra/ES/elasticsearch-2.3.4。先安装search-guard-ssl,执行以下命令:
./bin/plugin install -b com.floragunn/search-guard-ssl/2.3.4.14
2、再安装search-guard,执行以下命令:
./bin/plugin install -b com.floragunn/search-guard-2/2.3.4.4
下载search-guard-ssl源码并生成证书
需要生成证书的话,需要保证服务器上的openssl的版本在1.0.1以上。如果版本未达到,请先升级。
1、先将search-gurad-ssl的最新源码下载下来。找一个存放search-gurad-ssl的目录,本文中以该路径为例子:/ultra/ES。
执行以下命令:
git clone https://github.com/floragunncom/search-guard-ssl.git
cd search-guard-ssl/example-pki-scripts
2、进到example-pki-scripts目录下,需要根据自己服务器的情况修改脚本中的配置。找到gen_node_cert.sh文件,将其中的CN、dns修改为服务器的hostname,ip修改为服务器的IP。
3、生成证书:
#生成文件
./example.sh
#管理员的证书
./gen_client_node_cert.sh admin changeit capass
4、证书上传到Elasticsearch中。
a)将example-pki-scripts下生成的truststore.jks、admin-keystore.jks拷贝到${ES_HOME}/plugins/search-guard-2/sgconfig目录下。
b)并且给/ultra/ES/elasticsearch-2.3.4/plugins/search-guard-2/tools/sgadmin.sh执行权限:
chmod +x plugins/search-guard-2/tools/sgadmin.sh
c)将example-pki-scripts下生成的truststore.jks文件复制到ES集群中各个节点的config目录下,且把生成的node-*-keystore.jks文件复制到各个节点的config目录下。
在Elasticsearch中添加search-guard和search-guard-ssl的配置项
找到/ultra/ES/elasticsearch-2.3.4/config/elasticsearch.yml文件,添加以下配置项:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
searchguard.authentication.authentication_backend.impl: com.floragunn.searchguard.authentication.backend.simple.SettingsBasedAuthenticationBackend searchguard.authentication.authorizer.impl: com.floragunn.searchguard.authorization.simple.SettingsBasedAuthorizator searchguard.authentication.http_authenticator.impl: com.floragunn.searchguard.authentication.http.basic.HTTPBasicAuthenticator searchguard.actionrequestfilter.names: ["none"] searchguard.actionrequestfilter.none.allowed_actions: [] searchguard.transport_auth.enabled: true marvel.agent.exporter.es.hosts: [ "http://admin:secret@localhost:9200"] searchguard.authentication.authorization.settingsdb.roles.admin: ["root"] searchguard.authentication.settingsdb.user.admin: secret security.manager.enabled: false searchguard.audit.type: internal_elasticsearch ##### 管理员账号配置 searchguard.authcz.admin_dn: - "CN=admin, OU=client, O=client, L=Test, C=DE" # Enable or disable node-to-node ssl encryption (default: true) searchguard.ssl.transport.enabled: true searchguard.ssl.transport.keystore_type: JKS ###节点下放的是node-*,这里就写哪个 searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks searchguard.ssl.transport.keystore_password: changeit searchguard.ssl.transport.truststore_type: JKS searchguard.ssl.transport.truststore_filepath: truststore.jks searchguard.ssl.transport.truststore_password: changeit searchguard.ssl.transport.enforce_hostname_verification: false searchguard.ssl.transport.resolve_hostname: false searchguard.ssl.transport.enable_openssl_if_available: false searchguard.ssl.transport.enabled_protocols: - "TLSv1" - "TLSv1.1" - "TLSv1.2" |
重启Elasticsearch然后初始化search-guard的配置项
1、启动Elasticsearch,进到/ultra/ES/elasticsearch-2.3.4/bin下:
sh elasticsearch –d
2、初始化search-guard,进到/ultra/ES/elasticsearch-2.3.4下(我的集群名字是pasm,节点ip是192.168.182.74,相关pass我都是默认的changeit,有更改的需要你们自行去修改命令):
plugins/search-guard-2/tools/sgadmin.sh -cn pasm -h 192.168.182.74 -cd plugins/search-guard-2/sgconfig -ts plugins/search-guard-2/sgconfig/truststore.jks -ks plugins/search-guard-2/sgconfig/admin-keystore.jks -kspass changeit -tspass changeit -nhnv
注意:如果修改了searchguard,则需要重新加载配置执行。
注意:search-guard配置的相关改动不需要重启elasticsearch,相关的配置实际上存储在searchguard 的indice下了。
二、HTTP和Java Api方式访问ElasticSearch
HTTP方式访问Elasticsearch
1、在浏览器上访问Elasticsearch,会直接出弹窗,输入用户名密码即可。
2、在服务器上使用curl的话需要加上参数–u adminName,如下图所示:
curl -u adminName:adminname-XGET "http://192.168.0.224:9200/blog/article/1?pretty"
Java API中使用search-guard
1、加入jar包
进到/ultra/ES/elasticsearch-2.3.4/plugins/search-guard-ssl目录下拷贝以下jar包加到CLASSPATH中。
search-guard-ssl-2.3.4.14.jar
netty-buffer-4.0.37.Final.jar
netty-codec-4.0.37.Final.jar
netty-common-4.0.37.Final.jar
netty-handler-4.0.37.Final.jar
netty-transport-4.0.37.Final.jar
2、修改setting
以下部分需要从ES节点的这个目录下复制出来放到工程中,并且修改为你实际的路径。
目录:/ultra/ES/elasticsearch-2.3.4/plugins/search-guard-2/sgconfig中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import java.net.InetAddress;
import java.net.InetSocketAddress;
import org.elasticsearch.action.admin.cluster.node.info.NodesInfoRequest;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import com.floragunn.searchguard.ssl.SearchGuardSSLPlugin;
Settings settings = Settings.settingsBuilder() .put( "path.home" , "." )
.put( "cluster.name" , "PASM" )
.put( "searchguard.ssl.transport.enabled" , true )
.put( "searchguard.ssl.transport.keystore_filepath" , "I:/Work/WorkSpace/ultrasearch/plugins/search-guard-2/sgconfig/admin-keystore.jks" )
.put( "searchguard.ssl.transport.truststore_filepath" , "I:/Work/WorkSpace/ultrasearch/plugins/search-guard-2/sgconfig/truststore.jks" )
.put( "searchguard.ssl.transport.enforce_hostname_verification" , false )
.build();
|
3、修改client
以下为你想要连接的ES节点的ip和port,请修改为你实际的。
1
2
3
4
5
6
7
|
TransportClient client = TransportClient.builder().settings(settings).addPlugin(SearchGuardSSLPlugin. class ).build();
TransportClient addTransportAddress = client.addTransportAddress( new InetSocketTransportAddress( new InetSocketAddress( "192.168.120.42" , 9300 )));
//do something with tc NodesInfoRequest nodesInfoRequest= new NodesInfoRequest();
nodesInfoRequest.putHeader( "sg.impersonate.as" , "worf" );
client.admin().cluster().nodesInfo( new NodesInfoRequest()).actionGet();
client.admin().cluster().nodesInfo(nodesInfoRequest).actionGet(); |
search-guard中的用户权限管理
相关配置文件的介绍
searchguard 主要有5个配置文件在/ultra/ES/elasticsearch-2.3.4/plugins/search-guard-2/sgconfig 下:
1、sg_config.yml:主配置文件不需要做改动。
2、sg_internal_users.yml:本地用户文件,定义用户密码以及对应的权限。例如:对于 ELK 我们需要一个 kibana 登录用户和一个 logstash 用户,如下所示:
1
2
3
4
5
6
7
8
9
|
kibana4: hash: $2a$12$xZOcnwYPYQ3zIadnlQIJ0eNhX1ngwMkTN.oMwkKxoGvDVPn4/6XtO
#password is: kirk
roles:
- kibana4
logstash: hash: $2a$12$xZOcnwYPYQ3zIadnlQIJ0eNhX1ngwMkTN.oMwkKxoGvDVPn4/6XtO
roles:
- logstash |
注意:用户的密码可用plugins/search-guard-2/tools/hash.sh生成。
3、sg_roles.yml:权限配置文件,以下为kibana4 和 logstash 的权限样例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#< sg_role_name >:
# cluster: # - '< permission >'
# indices: # '< indexname or alias>':
# '< type >':
# - '< permission >'
# _dls_: '< querydsl query>'
# _fls_: # - '< field >'
# - '< field >'
sg_kibana4: cluster:
- cluster:monitor/nodes/info
- cluster:monitor/health
indices:
'*':
'*':
- indices:admin/mappings/fields/get
- indices:admin/validate/query
- indices:data/read/search
- indices:data/read/msearch
- indices:admin/get
- indices:data/read/field_stats
'?kibana':
'*':
- indices:admin/exists
- indices:admin/mapping/put
- indices:admin/mappings/fields/get
- indices:admin/refresh
- indices:admin/validate/query
- indices:data/read/get
sg_logstash: cluster:
- indices:admin/template/get
- indices:admin/template/put
indices:
'logstash-*':
'*':
- WRITE
- indices:data/write/bulk
- indices:data/write/delete
- indices:data/write/update
- indices:data/read/search
- indices:data/read/scroll
- CREATE_INDEX
|
4、sg_roles_mapping.yml:定义用户的映射关系,添加 kibana 及 logstash 用户对应的映射如下:
1
2
3
4
5
6
7
8
|
sg_logstash: users:
- logstash
sg_kibana4: backendroles:
- kibana
users:
- kibana4
|
5、sg_action_groups.yml:定义权限。
相关推荐
es-head是一个针对Elasticsearch的可视化操作插件。它提供了一个便捷的操作工具,可以连接Elasticsearch搜索引擎,并提供可视化的操作页面,对Elasticsearch进行各种设置和数据检索功能的管理。 es-head 插件可以在...
Stack Overflow则利用Elasticsearch进行地理位置查询,并通过more-like-this接口查找相关的问题和答案;GitHub则使用Elasticsearch对大量的代码仓库进行搜索。这些应用案例都展示了Elasticsearch在全文搜索、结构化...
使用`/opt/es/essoftware/elasticsearch-2.3.4/bin/plugin install mobz/elasticsearch-head`命令安装,然后通过`http://cm3:9200/_plugin/head/`访问。 2. Marvel和Kibana是Elasticsearch的数据监控和可视化工具。...
Elasticsearch(简称ES)是一款强大的开源搜索引擎,广泛应用于数据检索、分析和管理。作为分布式、RESTful风格的搜索和数据分析引擎,Elasticsearch能够提供实时、高可用性以及可扩展的搜索功能。在进行日常的数据...
(狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...
`start` 用于启动Elasticsearch,这里使用 `su` 命令切换到指定的Elasticsearch用户(例如 `es-admin`),然后进入Elasticsearch的安装目录并执行 `bin/elasticsearch` 文件以后台模式启动服务。`stop` 通过查找并杀...
2. **下载安装包**:这里的"es安装包"即为Elasticsearch的安装文件,通常是一个zip或tar.gz格式的压缩包。你需要从官方网站或者镜像站点下载对应版本的安装包,确保与你的系统兼容。 3. **解压安装**:下载完成后,...
使用Multi-Elasticsearch-Head,管理员或开发者可以轻松地查看和对比不同集群的状态、性能指标以及数据分布,这对于分布式系统监控和故障排查特别有用。它通常提供了一种直观的方式来查看索引结构、执行查询语句、...
在使用Spring Data Elasticsearch框架时,可能会遇到一个常见的问题,即版本兼容性问题。Spring Data Elasticsearch 5.4.0设计时可能并未考虑到与Elasticsearch 5.4.1的完全兼容,导致在升级Elasticsearch到5.4.1后...
Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene构建,提供了分布式、RESTful风格的搜索和分析引擎服务。在中文环境下,为了实现精确的分词和搜索,我们需要安装适合版本的分词插件,如“elastic...
flink-es7:为了使用Elasticsearch连接器,使用构建自动化工具(如Maven或SBT)的两个项目和带有SQL
ElasticSearch简称es,es是一个开源的高扩展的分布式全文搜索引擎,它可以近乎实时的存储、检索数据,本身的扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也是用Java开发并使用Lucene作为核心来实现...
- **服务安装**:使用`elasticsearch-service.bat`将Elasticsearch安装为Windows服务,便于后台自动启动和管理。 - **安全考虑**:Elasticsearch默认是不安全的,建议在生产环境中启用安全性插件,并配置用户认证和...
注意,Elasticsearch默认使用9200端口,如果该端口已被占用,需要修改配置文件`config/elasticsearch.yml`。 **Kibana 8.11.3** Kibana是Elasticsearch的数据可视化工具,用于创建仪表板、图表和数据视图。8.11.3...
根据提供的文件信息,我们可以推断出本篇文章将围绕Elasticsearch 6.2.2版本进行详细介绍,包括其下载方式、主要功能特性以及在实际应用中的常见用途。 ### Elasticsearch简介 Elasticsearch是一款基于Lucene的...
十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统。 什么是elasticsearch Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索...
Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene库构建,被广泛用于大数据分析、日志聚合、实时搜索和索引等场景。官方提供的测试数据集是检验Elasticsearch功能、性能和稳定性的关键资源,可以帮助...
JAVA使用ElasticSearch查询in和not in的实现方式 Elasticsearch是一个基于Lucene的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。它是用Java开发的,并作为Apache许可条款下的开放...
**Elasticsearch Python 使用文档** Elasticsearch 是一个开源的分布式全文搜索引擎,它提供了一个分布式、多用户能力的全文搜索引擎,基于 Lucene 库。Python 客户端库 Elasticsearch-py 则允许开发者轻松地与 ...
这个压缩包包含了针对Windows和Linux操作系统的安装包,便于在不同环境下部署和使用Elasticsearch。此外,它还提供了多个插件的源码,如IK分词器、Pinyin插件和HanLP自然语言处理库,这些插件为Elasticsearch增加了...