1、Search Guard 简介html
Search Guard 是 Elasticsearch 的安全插件。它为后端系统(如LDAP或Kerberos)提供身份验证和受权,并向Elasticsearch添加审核日志记录和文档/字段级安全性。java
Search Guard 全部基本安全功能都是免费的,而且内置在Search Guard中。 Search Guard 支持OpenSSL并与Kibana和logstash配合使用。node
基本安全功能包括:git
2、安装Search Guard插件github
对于Search Guard 5 只须要安装一个插件,即 Search Guard 。SSL层与主插件捆绑在一块儿。后端
在Elasticsearch的安装目录执行:浏览器
bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.0.0-9 安全
在安装Search Guard时将看到如下警告消息,对于某些ES版本,您须要经过按“y”主动确认它:服务器
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessClassInPackage.sun.misc * java.lang.RuntimePermission accessDeclaredMembers * java.lang.RuntimePermission getClassLoader * java.lang.RuntimePermission loadLibrary.* * java.lang.RuntimePermission setContextClassLoader * java.lang.RuntimePermission shutdownHooks * java.lang.reflect.ReflectPermission suppressAccessChecks * java.security.SecurityPermission getProperty.ssl.KeyManagerFactory.algorithm * java.util.PropertyPermission java.security.krb5.conf write * java.util.PropertyPermission javax.security.auth.useSubjectCredsOnly write * javax.security.auth.AuthPermission doAs * javax.security.auth.AuthPermission modifyPrivateCredentials * javax.security.auth.kerberos.ServicePermission * accept See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html for descriptions of what these permissions allow and the associated risks.
当看到 Installed search-guard-5 时,说明安装成功,在Elasticsearch的安装目录plugin能够看到 search-guard-5 目录被建立。架构
3、配置TLS/SSL
1.生成密钥库和信任库
要使SSL正常工做,您必须拥有一个密钥库和一个包含每一个节点上全部必需的证书和密钥的信任库。Search Guard 提供了两种方法生成证书,若是了解TLS或者已经有PKI基础架构,能够本身生成所需的证书。
1)TLS生成服务,填写相关信息即可将相关信息发送到我的邮箱中。连接地址为:https://floragunn.com/tls-certificate-generator/
2)PKI 实例脚本,要求必须安装OpenSSL且版本至少为1.0.1k。脚本将生成包含生成的根证书的信任库文件。 信任库文件能够在全部节点上使用。
下载解压5.0.0版本的 search-guard-ssl ,在example-pki-scripts目录中即为相对应的脚本。经过执行 example.sh 将自动生成证书。若是因为任何缘由须要从新执行脚本,在同一目录中执行./clean.sh,便可自动删除全部生成的文件。
官方提供的脚本固定CA证书以及节点证书的密码分别为:capass、changeit,我的修改官方脚本将密码改成40位、20位的随机字符串,并将密码写入到Readme.txt中,脚本下载地址:example-pki-scripts.tar.gz
2.复制密钥库和信任库文件
在每一个节点上,将keystore.jks和truststore.jks文件放在运行Elasticsearch的用户可读的目录中,这里放在了Elasticsearch的配置文件目录中。而且给予Elasticsearch用户读取文件权限。keystore.jks在每一个节点上是特定的。
三、配置插件
中止Elasticsearch节点,并在Elasticsearch的配置文件中添加
searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks searchguard.ssl.transport.keystore_password: e15fdd1f936e972f59c9 searchguard.ssl.transport.truststore_filepath: truststore.jks searchguard.ssl.transport.truststore_password: 4461255a948bd9777b44 searchguard.ssl.transport.enforce_hostname_verification: false
推荐每一个Elasticsearch节点使用不一样的密钥库文件(node-0-keystore.jks)。此时节点之间的流量是TLS加密的。以上密码是由脚本自动生成,务必要修改成本身的密码。
注意:每一个节点的密钥库文件不一样,密码也不相同,可是信任库文件相同,密码也相同。
四、配置HTTPS
加密经过REST-API的http流量,添加以下配置:
searchguard.ssl.http.enabled: true searchguard.ssl.http.keystore_filepath: node-0-keystore.jks searchguard.ssl.http.keystore_password: e15fdd1f936e972f59c9 searchguard.ssl.http.truststore_filepath: truststore.jks searchguard.ssl.http.truststore_password: 4461255a948bd9777b44
此时Elasticsearch将再也不接受http请求。
五、导入 Root CA
为了使您的浏览器信任咱们生成的证书,您须要导入 Root CA,而且对于某些浏览器或操做系统,还要信任此证书。双击root-ca.crt便可安装证书。
使用https访问节点以下图所示:
六、客户端身份验证(可选)
HTTPS一般只验证服务器标识,Search-Guard-SSL也提供了仅接受来自可信客户端的HTTPS链接。
在 elasticsearch.yml 配置文件中添加以下配置,开启客户端认证:
searchguard.ssl.http.clientauth_mode: REQUIRE
从新启动节点后,请再次尝试经过浏览器进行链接。你能够看到相似“基于证书的身份验证失败”或者“ERR_CONNECTION_CLOSED”的报错信息。
这意味着SG SSL要求您的浏览器标识本身。因为到目前为止,尚未为此目的安装任何证书,因此SG SSL拒绝链接。
和导入Root CA相同,须要安装让ES节点信任的证书,脚本 example.sh 也为咱们生成了此类证书,证书的名称为kirk、spock,使用与节点证书相同的Root CA证书生成,而且生成了不一样合适证书提供给不一样的浏览器和操做系统。
导入证书后再次访问ES节点,浏览器会询问咱们须要选择的证书。
4、配置管理证书
Search Guard的几乎全部配置设置都保存在Elasticsearch自己中,而且能够在运行时使用sgadmin命令行工具进行更改。使用sgadmin工具将配置设置加载到Search Guard索引中。 sgadmin经过客户端SSL证书将其自身标识为SG安全的Elasticsearch集群。称之为管理员证书。
务必将证书的DN配置到 elasticsearch.yml 中
searchguard.authcz.admin_dn:
- CN=sgadmin,OU=client,O=client,L=test,C=DE
能够配置多个管理证书。
sgadmin工具在 $ES_HOME/plugins/search-guard-5/tools 目录,并赋予工具执行权限 chmod +x tools/*.sh ,此时能够在任意节点执行脚本,配置将被推送到节点,并根据分片复制到其余节点。
sgadmin基本参数须要指定key和truststore,以及相应密码和配置文件目录。能够经过 -cn 选项指定集群名称,或者使用 -icl 忽略集群名称。
cd $ES_HOME/plugins/search-guard-5/ tools/sgadmin.sh -ts /etc/elasticsearch/truststore.jks -tspass 4461255a948bd9777b44 -ks sgconfig/sgadmin-keystore.jks -kspass d98a49bf3242b6873377 -cd sgconfig/ -icl -nhnv -h 10.10.51.240
此时访问ES节点是就要求输入帐号密码,默认帐号密码在 sgconfig/sg_internal_users.yml 中,能够经过工具 tools/hash.sh 设置密码。
更多sgadmin工具命令能够查看:https://github.com/floragunncom/search-guard-docs/blob/master/sgadmin.md
查看客户端身份验证信息,红框中即是证书的DN信息:
至此,已经成功在Elasticsearch5上安装Search Guard 5。