ES2.4.0之Search Guard2.4.0.12安装与配置

一、介绍

Search Guard是一个开源的安全插件,用于Elasticsearch和整个搜索提供加密、认证、授权和审计日志的ELK堆栈多租户和遵从性特性。官网地址为:https://search-guard.com/

二、所需安装包下载

search-guard-2-2.4.0.12.zip   下载地址:https://search.maven.org/remotecontent?filepath=com/floragunn/search-guard-2/2.4.0.12/search-guard-2-2.4.0.12.zip

search-guard-ssl-2.4.0.21.zip下载地址:https://search.maven.org/remotecontent?filepath=com/floragunn/search-guard-ssl/2.4.0.21/search-guard-ssl-2.4.0.21.zip

search-guard-ssl-2.4.x.zip   下载地址:https://github.com/floragunncom/search-guard-ssl/tree/2.4.x

三、开始安装

1、前提你得有一个ES单节点或者集群

2、上传所需要的包到ES所在的服务器,插件安装:进入elasticsearch目录执行以下命令,所有节点都执行

bin/plugin install -b file:home/elasticsearch/search-guard-2-2.4.0.12.zip

bin/plugin install -b file:home/elasticsearch/search-guard-ssl-2.4.0.21.zip

注:当ES版本大于2.2时,安装过程中可能会有WARNING提示,这个不影响使用

进入到ES的plugins目录下查看安装完成

3、生成证书文件

选择任意节点解压:unzip search-guard-ssl-2.4.x.zip

3-1、切换到search guard ssl 源码目录,进入example-pki-scripts文件夹,里面有3个脚本

cd search-guard-ssl-2.4.x/example-pki-scripts

gen_client_node_cert.sh  创建客户端证

gen_node_cert.sh           创建节点证书

gen_root_ca.sh               创建根证书

3-2、进入example-pki-scripts/etc目录,里面是证书生成时的一些配置文件,可根据需要修改相应的信息

root-ca.conf            根证书配置

signing-ca.conf        签名证书配置

其中自定义的信息如下:

0.domainComponent       = "www.test.com”    域名

1.domainComponent       = "www.test.com"    域名

organizationName        = "Test"            组织名称

organizationalUnitName  = "Test Root CA"        组织单位名称

commonName              = "Test Root CA"        通用名称

以上信息随便填写,只要保证生成证书时跟证书、签名证书中的信息一致即可

3-3、生成证书

返回到example-pki-scripts目录下,修改example.sh文件:

修改其中所有的密码“changeit”,可通过如下命令批量替换

:%s/changeit/123456/g

然后再修改为:

参数说明:

./gen_root_ca.sh capass 123456

第一个参数为CA_PASS,即CA密码(根证书密码)

第二个参数为TS_PASS,即TS密码(truststore,信任证书密码)

./gen_node_cert.sh 0 123456 capass

第一个参数为node编号,生成证书后的文件名为node-0*

第二个参数为KS_PASS(keystore文件密码)

第三个参数为CA_PASS

./gen_client_node_cert.sh test123456 capass

第一个参数为客户端节点名称,生成证书后的文件名为test*

第二个参数为KS_PASS

第三个参数为CA_PASS

3-4、运行example.sh文件,会在当前目录下生成各种证书文件

sh example.sh

生成之前:

生成成功后:

4、将相关证书文件拷贝到es的config目录

cp node-0-keystore.jks  truststore.jks /es目录/config/

复制这三个节点到其他ES节点的config目录下,用scp或者其他方式你随意。

scp node-0-keystore.jks truststore.jks remote_username@remote_ip:/es目录/config

5、修改elasticsearch配置 

# 配置ssl
 searchguard.ssl.transport.enabled: true
 searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks
 searchguard.ssl.transport.keystore_password: 123456
 searchguard.ssl.transport.truststore_filepath: truststore.jks
 searchguard.ssl.transport.truststore_password: 123456
 # 设置不校验hostname
 searchguard.ssl.transport.enforce_hostname_verification: false
 searchguard.ssl.transport.resolve_hostname: false
 #配置restful为https访问,此处为了方便测试,暂时不配置
 searchguard.ssl.http.enabled: false
 searchguard.ssl.http.keystore_filepath: node-0-keystore.jks
 searchguard.ssl.http.keystore_password: 123456
 searchguard.ssl.http.truststore_filepath: truststore.jks
 searchguard.ssl.http.truststore_password: 123456
 searchguard.allow_all_from_loopback: true
 # 配置节点识别证书DN
 searchguard.nodes_dn:
   - CN=node-0.example.com,OU=SSL,O=Test,L=Test, C=DE
   - CN=node-*.example.com,OU=SSL,O=Test,L=Test, C=DE
# 配置管理员证书DN
# 这里注意,下面的配置一定要和签的客户端证书一致,否则不能插入配置
 searchguard.authcz.admin_dn:
   - CN=test,OU=client,O=client,L=Test, C=DE

重启所有ES节点

6、将配置写入运行中的ES,在任意一个节点中执行就行了

cd /es目录/plugins/search-guard-2/tools

sh sgadmin.sh -icl -cn 集群名称 -cd ../sgconfig -ks ../../../config/test-keystore.jks -kspass 123456 -ts ../../../config/truststore.jks -tspass 123456 -nhnv -h 节点ip -p 节点tcp端口号

-h:指的是elasticsearch的elasticsearch.yml配置文件中 network.host 设置的值

如上图显示成功写入配置

 

通过浏览器访问任意节点如图:默认账号密码为admin,admin

四、search guard 配置文件介绍

search-guard中的用户权限管理

相关配置文件的介绍

searchguard 主要有5个配置文件在plugins/search-guard-2/sgconfig 下:

1、sg_config.yml:主配置文件不需要做改动。

2、sg_internal_users.yml:本地用户文件,定义用户密码以及对应的权限。

3、sg_roles.yml:权限配置文件

4、sg_roles_mapping.yml:定义用户的映射关系

5、sg_action_groups.yml:定义权限

 

修改内置用户密码,然后再运行一次search guard 配置写入命令

1.则先用plugins/search-guard-2/tools/hash.sh生成hash字符串,生成密码:

cd /usr/share/elasticsearch/plugins/search-guard-2/tools/hash.sh -p 123456

如果提示没有操作权限,则必须先把hash.sh文件的权限开放

chmod -R 777 plugins/search-guard-2/tools/hash.sh

获得哈希生成后的密码

2.将字符串复制到sg_internal_users.yml文件的对应用户密码位置,在密码下面记得写入原密码的提示,难保你那天忘记了

vim plugins/search-guard-2/sgconfig/sg_internal_users.yml

3.添加用户权限

vim elasticsearch/plugins/search-guard-2/sgconfig/sg_roles_mapping.yml

在39行处的sg_all_access添加你新增的用户名,就获得所有权限了

4.重新写入配置

cd elasticsearch/plugins/search-guard-2/tools/

执行:

sh sgadmin.sh -icl -cn 集群名称 -cd ../sgconfig -ks ../../../config/kirk-keystore.jks -kspass changeit -ts ../../../config/truststore.jks -tspass changeit -nhnv -h节点ip -p节点tcp端口号

再次访问就可以使用ceshi用户了,只要修改search guard就需要重新加载配置。

五、Java API中使用search-guard

加入依赖:

<dependency>
    <groupId>com.floragunn</groupId>
    <artifactId>search-guard-ssl</artifactId>
    <version>2.4.0.21</version>
</dependency>

代码:

@Bean
public TransportClient initClient() throws UnknownHostException {


Settings settings = Settings.builder()
        .put("path.home", ".")
        .put("cluster.name", "elasticsea")
        .put(SSLConfigConstants.SEARCHGUARD_SSL_HTTP_ENABLED, true)
        .put(SSLConfigConstants.SEARCHGUARD_SSL_TRANSPORT_KEYSTORE_FILEPATH, "kirk-keystore.jks文件路径")
        .put(SSLConfigConstants.SEARCHGUARD_SSL_TRANSPORT_TRUSTSTORE_FILEPATH, "truststore.jks文件路径")
        .put(SSLConfigConstants.SEARCHGUARD_SSL_TRANSPORT_KEYSTORE_PASSWORD, "123456")
        .put(SSLConfigConstants.SEARCHGUARD_SSL_TRANSPORT_TRUSTSTORE_PASSWORD, "123456")
        .put("searchguard.ssl.transport.enforce_hostname_verification", false)
        .build();


TransportClient client = TransportClient
        .builder()
        .settings(settings)
        .addPlugin(SearchGuardSSLPlugin.class)
        .build();


String[] addresses = new String[]{"ip:port"};
    for (String add : addresses) {
        TransportAddress address = new InetSocketTransportAddress(InetAddress.getByName(add.split(":")[0]), Integer.parseInt(add.split(":")[1]));
        client.addTransportAddress(address);
    }
    return client;
}



@Bean
public ElasticsearchTemplate elasticsearchTemplate() throws Exception {
    return new ElasticsearchTemplate(initClient());
}

 

参考:

elasticsearch安装与使用(5)-- search guard安装与配置

ES 2.4.0下Search-guard安装配置

ElasticSearch2.3.4的search-guard的安装及配置讲解说明

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值