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

编程入门 行业动态 更新时间:2024-10-26 12:21:56

ELK6.7.2集成Search Guard6实现<a href=https://www.elefans.com/category/jswz/34/1769801.html style=安全认证及权限管理"/>

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 官网下载地址:.x-25/search-guard-versions

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

1、离线生成Search Guard证书

(1)下载离线TSL工具

官网下载地址:=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,OU=CA,O=Example Com\, Inc.,DC=example,DC=comkeysize: 2048pkPassword: root-ca-password validityDays: 3650file: root-ca.pem

中级CA.

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

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

节点和客户端证书

全局和默认设置

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

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

节点证书

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

nodes:- name: es-cluster.node1dn: CN=es-cluster.node1,OU=Ops,O=Example Com\, Inc.,DC=example,DC=comdns: es-cluster.node1ip: 192.168.2.100(对应的真实ip)- name: es-cluster.node2dn: CN=es-cluster.node2,OU=Ops,O=Example Com\, Inc.,DC=example,DC=comdns: es-cluster.node2ip: 192.168.2.101(对应的真实ip)- name: es-cluster.node3dn: CN=es-cluster.node3,OU=Ops,O=Example Com\, Inc.,DC=example,DC=comdns: es-cluster.node3ip: 192.168.2.102(对应的真实ip)

管理员和客户证书

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

clients:- name: spockdn: CN=spock.example,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com- name: kirkdn: CN=kirk.example,OU=Ops,O=Example Com\, Inc.,DC=example,DC=comadmin: 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.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.NetPermission getNetworkInformation
* java.NetPermission getProxySelector
* java.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 .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_elasticsearch_config_snippet.yml
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node1_http.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node1_http.pem
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node1.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node1.pem
-rw-r--r--. 1 root root 1446 Jul  4 09:18 es-cluster.node2_elasticsearch_config_snippet.yml
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node2_http.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node2_http.pem
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node2.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node2.pem
-rw-r--r--. 1 root root 1446 Jul  3 18:25 es-cluster.node3_elasticsearch_config_snippet.yml
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node3_http.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node3_http.pem
-rw-r--r--. 1 root root 1801 Jul  3 18:25 es-cluster.node3.key
-rw-r--r--. 1 root root 3217 Jul  3 18:25 es-cluster.node3.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的配置)

searchguard.ssl.transport.pemcert_filepath: out/es-cluster.node1.pem
searchguard.ssl.transport.pemkey_filepath: out/es-cluster.node1.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_http.pem
searchguard.ssl.http.pemkey_filepath: out/es-cluster.node1_http.key
searchguard.ssl.http.pemkey_password: xxxxxxxxxx(填入自己生成的密码)
searchguard.ssl.http.pemtrustedcas_filepath: out/root-ca.pem
searchguard.nodes_dn:
- CN=es-cluster.node1,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
- CN=es-cluster.node2,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
- CN=es-cluster.node3,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
searchguard.authcz.admin_dn:
- CN=kirk.example,OU=Ops,O=Example Com\, Inc.,DC=example,DC=com
- CN=spock.example,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,即可进入。

 

更多推荐

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

本文发布于:2024-02-12 08:36:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1686993.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:安全认证   权限   Search

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!