(转)Elasticsearch search-guard 插件部署

我以前写了ELK+shield的部署文档,因为shield是商业收费的,不少人都推崇开源项目search-guard来作ELK的安全组件,准确来讲是elasticsearch的安全组件。search-guard的部署很简单,可是开始着手弄,彻底不了解的状况下仍是会踩一些坑,加上网上对新版本使用介绍少,因此我决定写一遍search-guard的部署文档。 
search-guard插件包含两部分,search-guard-ssl和search-guard-2两个插件(官网提供了一个特殊的包,包含了search-guard和elasticsearch的一个压缩包,里面东西齐全,可是有点乱,还有windows的执行文件,因此我仍是一步步安装插件)。 
咱们先安装search-guard-ssl。按照如下步骤安装:
php

  • 安装search-guard-ssl插件java

    切换到elasticsearch的目录(通常是/usr/share/elasticsearch) 
    命令安装插件:
    node

sudo bin/plugin install com.floragunn/search-guard-ssl/2.3.4.16
  • 1
  • 1
注意版本,这里elasticsearch的版本就是2.3.4,它是要跟search-guard的版本进行对应的。
  • 克隆search-guard-ssl项目,生成相关证书git

    克隆项目命令:github

sudo git clone https://github.com/floragunncom/search-guard-ssl.git
  • 1
  • 1

通常来讲建立数字证书流程以下: 
建立证书流程: 
1.建立ROOT CA(根证书/CA认证机构) 
2.应用服务器建立CSR(证书签名请求文件),同时会建立好本身的密钥对(公钥和私钥) 
3.将CSR发送到CA认证机构 
4.CA机构将返回一个数字签名证书
windows

首先切换到刚刚克隆的search-guard-ssl的项目目录下 
修改etc目录下的配置文件 
example-pki-scripts/etc/root-ca.conf 
example-pki-scripts/etc/signing-ca.conf 
根据本身状况改成公司相关信息等 
利用脚本,写入密码,生成根证书
安全

sudo ./gen_root_ca.sh paswd paswd
  • 1
  • 1

search-guard-ssl 还提供了如下脚本 
gen_node_cert.sh 
能够修改为本身的信息,生成相应服务器证书,里面包含了上述生成数字证书的过程。 
gen_client_node_cert.sh 
同理生成客户端数字证书。这里记住-dname参数后面的信息,后面认证客户端,就靠这个。 
修改完脚本,就能够执行脚本,就会生成相关证书了。 
- 配置ssl 
将生成的证书,keystore.jks 和 truststore.jks复制到/etc/elasticsearch目录下,而后配置elasticsearch.yml添加配置 
searchguard.ssl.transport.enabled: true 
searchguard.ssl.transport.keystore_filepath: example-keystore.jks 
searchguard.ssl.transport.keystore_password: paswd 
searchguard.ssl.transport.truststore_filepath: truststore.jks 
searchguard.ssl.transport.truststore_password: paswd 
searchguard.ssl.transport.enforce_hostname_verification: false 
searchguard.ssl.transport.resolve_hostname: false
bash

http配置,这里我只是为了测试方便,配置完,应该设置为true

searchguard.ssl.http.enabled: false 
searchguard.ssl.http.keystore_filepath: example-keystore.jks 
searchguard.ssl.http.keystore_password: paswd 
searchguard.ssl.http.truststore_filepath: truststore.jks 
searchguard.ssl.http.truststore_password: paswd
服务器

searchguard.allow_all_from_loopback: trueelasticsearch

这里注意,下面的配置必定要和签的客户端证书一致,不然不能插入配置

searchguard.authcz.admin_dn: 
- CN=example, OU=client, O=client, L=Test, C=DE

安装search-guard-2插件

  • 安装插件
sudo bin/plugin install -b com.floragunn/search-guard-2/2.3.4.4
  • 1
  • 1

这里一样,版本注意与elasticsearch对应。

  • 修改配置并插入

切换目录到/usr/share/elasticsearch/plugins/search-guard-2/ 
修改该目录下的sgconfig目下的配置文件 
这里和shield相似,修改用户,角色,角色映射几个配置文件便可。

注意,这里用户密码,能够经过plugins下的tools/hash.sh工具生成密码的hash加密文本

配置文件修改完成后,经过命令将配置插入到elasticsearh中,

sudo tools/sgadmin.sh -cd sgconfig/ -ks sgconfig/example-keystore.jks -kspass paswd -ts sgconfig/truststore.jks -tspass paswd -nhnv
  • 1
  • 1

须要注意的是这时候elasticsearch的服务必须是运行状态。若是插入配置失败,检查配置文件,好比前面提到的,生成客户端证书的时候dname的参数 必须与配置文件中searchguard.authcz.admin_dn:下的认证列表进行对应。

接下来就是配置kibana和logstash的了。

注意: 
为了logstash经过ssl链接elasticsearch,须要将elasticsearch的证书导入到Java的cacerts中 
其中要求必须是 x509标准的证书

错误提示如:keytool 错误: java.lang.Exception: 所输入的不是 X.509 证书

这时候就须要把咱们的jks的证书作以下转换 
sudo keytool -export -alias example -file example.der -keystore example.jks 
sudo openssl x509 -inform der example.der -out example.pem 
sudo openssl x509 -outform der -in example.pem -out example.crt sudo keytool -importcert -file example.crt -alias example -keystore cacerts -storepass changeit

相关文章
相关标签/搜索