ELK6.7.2集成Search Guard6实现安全认证及权限管理

基于公司需要搭建一套ELK日志管理系统,发现ELK安装后,ElasticSearch和kibana都是可以直接通过无密码访问的,这对于生产环境是及其不安全的,公司内部人员,没有权限划分,也是十分的不方便。而ELK的安全认证工具有很多,例如x-pack、shield等都是官方推荐的,但是要收钱,在免费的工具中,选择了Search Guard。本文主要讲ELK与Search Guard的集成,ELK的搭建不做说明。

版本说明:

ElasticSearch:6.7.2

kibana:6.7.2

logstash:6.7.2

Search Guard6-6.7.2 官网下载地址:https://docs.search-guard.com/6.x-25/search-guard-versions

ELK的三大组件以及Search Guard的版本最好是一样的,否则可能会出现兼容性等问题。

1、离线生成Search Guard证书

(1)下载离线TSL工具

官网下载地址:https://search.maven.org/search?q=g:com.floragunn%20AND%20a:search-guard-tlstool&core=gav

下载版本:search-guard-tlstool-1.6.tar.gz

(2)上传下载的压缩文件至服务器,我是放在/app目录下的

(3)修改配置文件

解压文件到指定目录  # tar -zxvf  search-guard-tlstool-1.6.tar.gz -C /app/search-guard-tlstool

编辑example.yml文件  # vim /app/search-guard-tlstool/config/example.yml

根CA.

要为所有证书配置根CA,请将以下行添加到配置文件中:

ca:
   root:
      dn: CN=root.ca.example.com,OU=CA,O=Example Com\, Inc.,DC=example,DC=com
      keysize: 2048
      pkPassword: root-ca-password 
      validityDays: 3650
      file: root-ca.pem

中级CA.

除了根CA之外,您还可以选择指定中间CA. 如果配置了中间CA,则中间CA将对节点,管理员和客户端证书进行签名。如果您确实要使用中间CA,请从配置中删除以下部分。然后由根CA直接签署证书。

ca:
   intermediate:
      dn: CN=signing.ca.example.com,OU=CA,O=Example Com\, Inc.,DC=example,DC=com
      keysize: 2048
      validityDays: 3650  
      pkPassword: intermediate-ca-password
      file: intermediate-ca.pem

节点和客户端证书

全局和默认设置

默认设置适用于所有生成的证书和配置片段。此处的所有值都是可选的。

defaults:
  validityDays: 3650
  pkPassword: auto
  generatedPasswordLength: 12
  nodesDn:
    - "CN=*.example.com,OU=Ops,O=Example Com\\, Inc.,DC=example,DC=com"
  nodeOid: "1.2.3.4.5.5"
  httpsEnabled: true
  reuseTransportCertificatesForHttp: false

节点证书

要生成节点证书,请在以下部分中添加节点名称,专有名称,主机名和/或IP地址nodes

nodes:
  - name: es-cluster.node1.com
    dn: CN=es-cluster.node1.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
    dns: es-cluster.node1.com
    ip: 192.168.2.100(对应的真实ip)
  - name: es-cluster.node2.com
    dn: CN=es-cluster.node2.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
    dns: es-cluster.node2.com
    ip: 192.168.2.101(对应的真实ip)
  - name: es-cluster.node3.com
    dn: CN=es-cluster.node3.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
    dns: es-cluster.node3.com
    ip: 192.168.2.102(对应的真实ip)

管理员和客户证书

要生成管理员和客户端证书,请将以下行添加到配置文件中:

clients:
  - name: spock
    dn: CN=spock.example.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
  - name: kirk
    dn: CN=kirk.example.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
    admin: true

(4)生成证书

[root@elk-es1 /]# cd /app/search-guard-tlstool/
[root@elk-es1 search-guard-tlstool]# tools/sgtlstool.sh -c config/example.yml -ca -crt

从中读取配置../config/tlsconfig.yml并一次生成配置的根和中间CA以及配置的节点,管理员和客户端证书。生成的文件将被写入out

[root@elk-es1 search-guard-tlstool]# cd tools/
[root@elk-es1 tools]# ll
total 20

drwxr-xr-x. 2 root root  4096 Jul  4 10:39 out
-rwxr-xr-x. 1  501 games  153 Dec 30  2018 sgtlsdiag.bat
-rwxr-xr-x. 1  501 games  339 Dec 30  2018 sgtlsdiag.sh
-rwxr-xr-x. 1  501 games  148 Dec 30  2018 sgtlstool.bat
-rwxr-xr-x. 1  501 games  334 Dec 30  2018 sgtlstool.sh

2、安装Search Guard

安装search guard插件是在已安装elasticsearch的前提下。

在线安装search guard插件

bin/elasticsearch-plugin install -b com.floragunn:search-guard-6:<version>

离线安装search guard插件

bin/elasticsearch-plugin install -b file:///path/to/search-guard-6-<version>.zip

(1)本文使用的是离线安装

[root@localhost /]# cd /app/elasticsearch-6.7.2
[root@localhost elasticsearch-6.7.2]# ./bin/elasticsearch-plugin install -b file:///app/search-guard-6-6.7.2-25.1.zip

安装Search Guard时,您将看到以下警告消息。

-> Downloading file:///app/search-guard-6-6.7.2-25.1.zip
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.io.FilePermission /proc/sys/net/core/somaxconn read
* java.lang.RuntimePermission accessClassInPackage.com.sun.jndi.ldap
* java.lang.RuntimePermission accessClassInPackage.sun.misc
* java.lang.RuntimePermission accessClassInPackage.sun.nio.ch
* java.lang.RuntimePermission accessClassInPackage.sun.security.x509
* java.lang.RuntimePermission accessDeclaredMembers
* java.lang.RuntimePermission accessUserInformation
* java.lang.RuntimePermission createClassLoader
* java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission setContextClassLoader
* java.lang.RuntimePermission shutdownHooks
* java.lang.reflect.ReflectPermission suppressAccessChecks
* java.net.NetPermission getNetworkInformation
* java.net.NetPermission getProxySelector
* java.net.SocketPermission * connect,accept,resolve
* java.security.SecurityPermission getProperty.ssl.KeyManagerFactory.algorithm
* java.security.SecurityPermission insertProvider.BC
* java.security.SecurityPermission org.apache.xml.security.register
* java.security.SecurityPermission putProviderProperty.BC
* java.security.SecurityPermission setProperty.ocsp.enable
* java.util.PropertyPermission * read,write
* java.util.PropertyPermission org.apache.xml.security.ignoreLineBreaks 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-6

(2)将生成的证书复制到es的config中

[root@elk-es1 /]# cp -ar /app/search-guard-tlstool/tools/out/ /app/elasticsearch-6.7.2/config/out

(3)在elasticsearch.yml中添加TLS配置

[root@elk-es1 config]# cd out
[root@elk-es1 out]# ll
total 96
-rw-r--r--. 1 root root  473 Jul  4 10:39 client-certificates.readme
-rw-r--r--. 1 root root 1446 Jul  3 18:25 es-cluster.node1.com_elasticsearch_config_snippet.yml
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node1.com_http.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node1.com_http.pem
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node1.com.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node1.com.pem
-rw-r--r--. 1 root root 1446 Jul  4 09:18 es-cluster.node2.com_elasticsearch_config_snippet.yml
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node2.com_http.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node2.com_http.pem
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node2.com.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node2.com.pem
-rw-r--r--. 1 root root 1446 Jul  3 18:25 es-cluster.node3.com_elasticsearch_config_snippet.yml
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node3.com_http.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node3.com_http.pem
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node3.com.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node3.com.pem
-rw-r--r--. 1 root root 1801 Jul  3 18:25 intermediate-ca.key
-rw-r--r--. 1 root root 1558 Jul  3 18:25 intermediate-ca.pem
-rw-r--r--. 1 root root 1801 Jul  3 18:25 kirk.key
-rw-r--r--. 1 root root 3144 Jul  3 18:25 kirk.pem
-rw-r--r--. 1 root root 1801 Jul  3 18:25 root-ca.key
-rw-r--r--. 1 root root 1371 Jul  3 18:25 root-ca.pem
-rw-r--r--. 1 root root 1801 Jul  3 18:25 spock.key
-rw-r--r--. 1 root root 3144 Jul  3 18:25 spock.pem

将上面三个标红文件的信息,分别添加到对应的es节点的elasticsearch.yml文件中(以下是es-cluster.node1.com的配置)

searchguard.ssl.transport.pemcert_filepath: out/es-cluster.node1.com.pem
searchguard.ssl.transport.pemkey_filepath: out/es-cluster.node1.com.key
searchguard.ssl.transport.pemkey_password: xxxxxxxxxx(填入自己生成的密码)
searchguard.ssl.transport.pemtrustedcas_filepath: out/root-ca.pem
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.transport.resolve_hostname: false
searchguard.ssl.http.enabled: true
searchguard.ssl.http.pemcert_filepath: out/es-cluster.node1.com_http.pem
searchguard.ssl.http.pemkey_filepath: out/es-cluster.node1.com_http.key
searchguard.ssl.http.pemkey_password: xxxxxxxxxx(填入自己生成的密码)
searchguard.ssl.http.pemtrustedcas_filepath: out/root-ca.pem
searchguard.nodes_dn:
- CN=es-cluster.node1.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
- CN=es-cluster.node2.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
- CN=es-cluster.node3.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
searchguard.authcz.admin_dn:
- CN=kirk.example.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
- CN=spock.example.com,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
xpack.security.enabled: false    #禁用x-pack插件
searchguard.restapi.roles_enabled: ["sg_all_access"]   #要使用REST管理API,请配置应具有API访问权限的Search Guard角色。以下条目授予对该角色的API的完全访问权限SGS_ALL_ACCESS
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization,X-Requested-With,Content-Length,Content-Type"
#searchguard.disabled: true   #禁用searchguard

3、启动elasticsearch

注意:es不能用root用户启动。

  • 这是出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入的脚本并且执行,为了系统安全考虑, 
  • 建议创建一个单独的用户用来运行ElasticSearch
  • 创建elsearch用户组及elsearch用户

       groupadd elsearch
       useradd elsearch -g elsearch -p elasticsearch

  • 更改elasticsearch文件夹及内部文件的所属用户及组为elsearch:elsearch

       cd /app
       chown -R elsearch:elsearch  elasticsearch-6.7.2

  • 切换到elsearch用户再启动

        su elsearch cd elasticsearch-6.7.2/bin
        ./elasticsearch -d

4、初始化Search Guard

[root@elk-es1 /]# cd /app/elasticsearch-6.7.2/plugins/search-guard-6/tools/
[root@elk-es1 tools]# chmod 744 sgadmin.sh
[root@elk-es1 tools]# ./sgadmin.sh -cd ../sgconfig/ -icl -nhnv -cacert ../../../config/out/root-ca.pem -cert ../../../config/out/kirk.pem -key ../../../config/out/kirk.key -keypass xxxxxxxxxxx

kirk的密码在out目录的client-certificates.readme文件中

Search Guard Admin v6
Will connect to localhost:9300 ... done
Elasticsearch Version: 6.7.2
Search Guard Version: 6.7.2-25.1
Connected as CN=sgadmin
Contacting elasticsearch cluster 'elasticsearch' and wait for YELLOW clusterstate ...
Clustername: master-slave
Clusterstate: GREEN
Number of nodes: 3
Number of data nodes: 3
searchguard index already exists, so we do not need to create one.
Populate config from /usr/elasticsearch-6.7.2/plugins/search-guard-6/sgconfig
Will update 'sg/config' with ../sgconfig/sg_config.yml 
   SUCC: Configuration for 'config' created or updated
Will update 'sg/roles' with ../sgconfig/sg_roles.yml 
   SUCC: Configuration for 'roles' created or updated
Will update 'sg/rolesmapping' with ../sgconfig/sg_roles_mapping.yml 
   SUCC: Configuration for 'rolesmapping' created or updated
Will update 'sg/internalusers' with ../sgconfig/sg_internal_users.yml 
   SUCC: Configuration for 'internalusers' created or updated
Will update 'sg/actiongroups' with ../sgconfig/sg_action_groups.yml 
   SUCC: Configuration for 'actiongroups' created or updated
Done with success

打开浏览器验证是否生效https://admin:admin@192.168.2.100:9200

5、Search Guard与kibana的集成

(1)安装search-guard-kibana-plugin插件

在线安装:bin/kibana-plugin install https://path/to/search-guard-kibana-plugin-<version>.zip

离线安装:bin/kibana-plugin install file:///path/to/search-guard-kibana-plugin-<version>.zip

本文采用离线安装

[root@localhost /]# cd /app/kibana-6.7.2-linux-x86_64/
[root@localhost kibana-6.7.2-linux-x86_64]# bin/kibana-plugin install file:///app/search-guard-kibana-plugin-6.7.2-18.4.zip 

安装插件后,Kibana将运行优化过程。根据您的系统,这可能需要几分钟。这是每个已安装插件所需的Kibana内部进程,不能跳过。Kibana 优化过程不稳定,问题通常与Search Guard无关。

通过设置为进程提供更多内存,可以解决大多数问题NODE_OPTIONS="--max-old-space-size=8192"

(2)配置kibana.yml

elasticsearch.username: “admin”    #配置用户名
elasticsearch.password: “admin”    #配置密码
elasticsearch.url: “https://192.168.2.100:9200”    #配置url
elasticsearch.ssl.verificationMode: none    #关闭证书验证
xpack.security.enabled: false     #关闭x-apck插件

xpack.reporting.enabled: false
searchguard.basicauth.enabled: true
searchguard.cookie.secure: false
searchguard.cookie.name: "searchguard_authentication"
searchguard.cookie.password: "searchguard_cookie_default_password"
searchguard.session.keepalive: true

(3)启动kibana,访问http://192.168.2.100:5601,输入用户名admin,密码admin,即可进入。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值