Search-guard在ELK Stack日志分析系统中的应用

简介: 打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.

这里写图片描述
打开微信扫一扫,关注微信公众号【数据与算法联盟】

转载请注明出处: http://blog.csdn.net/gamer_gyt
博主微博: http://weibo.com/234654758
Github: https://github.com/thinkgamer


写在前边的话

         在之前的一篇文章中介绍了Shield在Elk Stack中的权限保护,但由于Shield是收费的,所以就有人给出了免费的解决方案——Search-guard


简单说明

        search-guard是elastcisearch的一款插件,提供加密,身份验证和授权,基于search guard SSL,另外提供可插入的身份验证/授权模块,search-guard是shield的替代品,可免费提供所有的基本安全功能,其功能特性:

  • 基于用户和角色的权限控制
  • 支持SSL和TLS方式安全认证
  • 支持LDAP认证

环境说明

Ubuntu 16.04
Elasticsearch 2.4.1
Logstash 2.4.0
Kibana 4.6.1


部署

Elasticsearch配置search-guard

进入elasticsearch的根目录

安装search-guard-ssl

bin/plugin install -b com.floragunn/search-guard-ssl/2.4.1.16

这里我们需要配置密钥和证书
依旧是在es 的根目录

git clone https://github.com/floragunncom/search-guard-ssl.git
cd searchguard_ssl/example-pki-scripts

执行

./example.sh

会默认生成证书
当然这里我们可以执行clean.sh删除安装的东西
拷贝相应的文件到指定目录,后续会有需要

cp node-0-keystore.jks ../../config
cp truststore.jks ../../config

编辑ec根目录下的config/elasticsearch.yml,加入

searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks
searchguard.ssl.transport.keystore_password: changeit
searchguard.ssl.transport.truststore_filepath: truststore.jks
searchguard.ssl.transport.truststore_password: changeit
searchguard.ssl.transport.enforce_hostname_verification: false

web访问:http://192.168.1.193:9200/ 会看到如下信息

{
  "name" : "M-Twins",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "X6U0RRiaQ4ucBXokFj30Yw",
  "version" : {
    "number" : "2.4.1",
    "build_hash" : "c67dc32e24162035d18d6fe1e952c4cbcbe79d16",
    "build_timestamp" : "2016-09-27T18:57:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.2"
  },
  "tagline" : "You Know, for Search"
}

web访问 http://192.168.1.193:9200/_searchguard/sslinfo?pretty

{
  "principal" : null,
  "peer_certificates" : "0",
  "ssl_protocol" : null,
  "ssl_cipher" : null,
  "ssl_openssl_available" : false,
  "ssl_openssl_version" : -1,
  "ssl_openssl_version_string" : null,
  "ssl_openssl_non_available_cause" : "java.lang.ClassNotFoundException: org.apache.tomcat.jni.SSL",
  "ssl_provider_http" : null,
  "ssl_provider_transport_server" : "JDK",
  "ssl_provider_transport_client" : "JDK"
}

在config/elasticsearch.yml配置文件中加入

#configure https
searchguard.ssl.http.enabled: true
searchguard.ssl.http.keystore_filepath: node-0-keystore.jks
searchguard.ssl.http.keystore_password: changeit
searchguard.ssl.http.truststore_filepath: truststore.jks
searchguard.ssl.http.truststore_password: changeit

https://192.168.1.193:9200/ (会提示证书错误)

{
  "name" : "Zero",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "X6U0RRiaQ4ucBXokFj30Yw",
  "version" : {
    "number" : "2.4.1",
    "build_hash" : "c67dc32e24162035d18d6fe1e952c4cbcbe79d16",
    "build_timestamp" : "2016-09-27T18:57:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.2"
  },
  "tagline" : "You Know, for Search"
}

https://192.168.1.193:9200/_searchguard/sslinfo?pretty (会提示证书错误)

{
  "principal" : null,
  "peer_certificates" : "0",
  "ssl_protocol" : "TLSv1.2",
  "ssl_cipher" : "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
  "ssl_openssl_available" : false,
  "ssl_openssl_version" : -1,
  "ssl_openssl_version_string" : null,
  "ssl_openssl_non_available_cause" : "java.lang.ClassNotFoundException: org.apache.tomcat.jni.SSL",
  "ssl_provider_http" : "JDK",
  "ssl_provider_transport_server" : "JDK",
  "ssl_provider_transport_client" : "JDK"
}

配置客户认证

searchguard.ssl.http.clientauth_mode: REQUIRE

出现web不能访问的情况,由于该配置是可选的,所以暂时不配置

这里需要解释一下:
默认执行的./example.sh 是以kiri为用户名的,这个我们可以通过vim example.sh可以看的出来,在elasticsearch.yml中的**.passwordd可以自己设置

安装search-guard

bin/plugin install -b com.floragunn/search-guard-2/2.4.1.7

安装之后不做任何设置再次重启elasticsearch,web访问会出现以下状况:

Search Guard not initialized (SG11)

这是提示我们没有进行初始化
编辑config/elasticsearch.yml,加入以下两行

searchguard.authcz.admin_dn:
  - CN=kirk,OU=client,O=client,L=test, C=DE   #由于我们是采用的默认的example.sh进行密钥生成的
  - cn=admin,ou=Test,ou=ou,dc=company,dc=com

此时需要重新启动elasticsearch,因为需要把我们新更改的elasticsearch.yml加载进来,否则在初始化的时候会报错
复制 kirk-keystore.jks和truststore.jks到 plugins/search-guard-2/tools目录下,然后执行初始化命令

./sgadmin.sh -ts truststore.jks -ks kirk-keystore.jks -cd ../sgconfig -icl

然后重启启动elasticsearch,web访问会提示你输入账号和密码

这里写图片描述


Logstash配置search-guard

依旧采用rsyslog的例子,机器配置rsyslog.conf,最后两行加入

*.* @@localhost:5000
*.* @localhost:5000

重启rsyslog服务
在logstash目录下编辑一个新文件rsyslog.conf,内容如下:

input {
  tcp{
    port => 5000
    type => syslog
  }
  udp{
    port => 5000
    type => syslog
  }
}
output {
  stdout {
    codec=> rubydebug
  }
  elasticsearch {
    hosts => ["localhost:9200"]
    ssl => true
    ssl_certificate_verification => true
    truststore => "/opt/elk/elasticsearch-2.4.1/config/truststore.jks"
    truststore_password => changeit
    user => logstash
    password => logstash
  }
}

这里的logstash用户在 elasticsearch安装目录下的plugin/seach-guard-2/sgconfig/sg_roles.yml中
这里我们说一下sgconfig这几个文件:
Search-guard的动态配置

  • sg_config.yml:配置验证器和授权后端
  • sg_roles.yml:定义角色和相关的权限
  • sg_roles_mapping.yml:将后端角色,主机和用户映射到角色
  • sg_internal_users.yml:用户和散列密码(使用hasher.sh哈希)
  • sg_action_groups.yml:组权限在一起

接着我们设置logstash用户的权限,我们可以在sg_roles.yml中方看到logstash用户具有的权限

sg_logstash:
  cluster:
    - indices:admin/template/get
    - indices:admin/template/put
  indices:
    'logstash-*':
      '*':
        - CRUD
        - CREATE_INDEX
    '*beat*':
      '*':
        - CRUD
        - CREATE_INDEX

启动配置文件,测试登录,elasticsearch便可以接收到rsyslog发送过来的日志


Kibana配置

编辑kibana.yml

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "https://localhost:9200"
elasticsearch.username: "kibanaserver"
elasticsearch.password: "kibanaserver"
elasticsearch.ssl.ca: /opt/elk/elasticsearch-2.4.1/search-guard-ssl/example-pki-scripts/kirk-signed.pem
elasticsearch.ssl.verify: false

启动kibana服务,web访问,便会提示你输入密码
这里写图片描述
验证器配置:

验证器配置:
Vim  plugins/search-guard-2/sgconfig/sg_config.yml
searchguard:
  dynamic:
    http:
     ...
    authc:
      kibana_auth_domain: 
        enabled: true
        order: 1
        http_authenticator:
          type: basic
          challenge: true
        authentication_backend:
          type: internal
    authz:
      ...

其他的自定义角色和角色对应的权限请参考官网资料对sgconfig文件夹的几个文件进行配置即可

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
1116 122
基于docker搭建监控系统&日志收集
|
SQL 人工智能 监控
SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施
本文将分享我们在构建 SLS SQL Copilot 过程中的工程实践,展示如何基于阿里云 SLS 打造一套完整的 LLM 应用数据基础设施。
3645 126
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
1045 1
|
消息中间件 Java Kafka
搭建ELK日志收集,保姆级教程
本文介绍了分布式日志采集的背景及ELK与Kafka的整合应用。传统多服务器环境下,日志查询效率低下,因此需要集中化日志管理。ELK(Elasticsearch、Logstash、Kibana)应运而生,但单独使用ELK在性能上存在瓶颈,故结合Kafka实现高效的日志采集与处理。文章还详细讲解了基于Docker Compose构建ELK+Kafka环境的方法、验证步骤,以及如何在Spring Boot项目中整合ELK+Kafka,并通过Logback配置实现日志的采集与展示。
1556 64
搭建ELK日志收集,保姆级教程
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
1367 2
|
存储 消息中间件 缓存
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
855 1
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
监控 安全 Linux
AWK在网络安全中的高效应用:从日志分析到威胁狩猎
本文深入探讨AWK在网络安全中的高效应用,涵盖日志分析、威胁狩猎及应急响应等场景。通过实战技巧,助力安全工程师将日志分析效率提升3倍以上,构建轻量级监控方案。文章详解AWK核心语法与网络安全专用技巧,如时间范围分析、多条件过滤和数据脱敏,并提供性能优化与工具集成方案。掌握AWK,让安全工作事半功倍!
625 0
|
存储 JSON Go
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
489 10