ELK-学习笔记–elasticsearch-7.x使用xpack进行安全认证

发布时间: 5年前 (2020-02-04)浏览: 1448评论: 0

 原文地址: http://www.eryajf.net/3500.html

2019年5月21日,Elastic官方发布消息: Elastic Stack 新版本6.8.0 和7.1.0的核心安全功能现免费提供。
这意味着用户现在能够对网络流量进行加密、创建和管理用户、定义能够保护索引和集群级别访问权限的角色,并且使用 Spaces 为 Kibana提供全面保护。 免费提供的核心安全功能如下:

1)TLS 功能。 可对通信进行加密;
2)文件和原生 Realm。 可用于创建和管理用户;
3)基于角色的访问控制。 可用于控制用户对集群 API 和索引的访问权限;
通过针对 Kibana Spaces 的安全功能,还可允许在Kibana 中实现多租户。

1、x-pack演变

1,5.X版本之前:没有x-pack,是独立的:security安全,watch查看,alert警告等独立单元。
2,5.X版本:对原本的安全,警告,监视,图形和报告做了一个封装,形成了x-pack。
3,6.3 版本之前:需要额外安装。
4,6.3版本及之后:已经集成在一起发布,无需额外安装,基础安全属于付费黄金版内容。 7 .1版本:基础安全免费。

2、安全部分免费之前,大家怎么保证基础安全?

场景一:全部“裸奔”,相信这在国内占据了非常大的比重。
内网部署,不对外提供服务。或者ES作为业务基础支撑,不公网开放9200等常用端口,开放的是业务的服务端口。
可能暴露问题:公司或团队内部开放9200、5601端口,基本head插件、kibana都能连接,极易导致线上索引或数据可能被误删。

场景二:加了简单防护。
一般使用Nginx身份认证+防火墙策略控制。

场景三:整合使用了第三方安全认证方案。
比如:SearchGuard、ReadonlyREST。

场景四:付费购买了Elastic-Xpack黄金版或白金版服务。
一般是银行等土豪大客户,对安全、预警、机器学习等付费功能需求迫切,如:宁波银行付费购买白金服务。

以上内容摘自:https://blog.csdn.net/laoyang360/article/details/90554761

既然新版本的es已经提供了基础的用户认证,那么多一层总比没有要强,因此接下来就实际配置一下单机版的elk和集群版的认证,两个稍微有一些不同,因此区分对待。

因为主要体现在es与kibana的认证,因此这里就只展现这两者的配置,其他logstash方面的,后续再完善。

3,单机版elk认证

本次实验elk全系版本都是基于7.4.0进行。

安装过程略过,直接来到配置阶段。

1,配置es。

  1. $ cat elasticsearch.yml


  2. cluster.name: eryajf-search

  3. node.name: es-node1

  4. path.data: /data/elasticsearch7/data

  5. path.logs: /data/elasticsearch7/log

  6. network.host: 0.0.0.0

  7. http.port: 9200

  8. xpack.security.enabled: true # 这条配置表示开启xpack认证机制

  9. xpack.security.transport.ssl.enabled: true

  10. cluster.initial_master_nodes: ["es-node1"]

  • xpack.security.enabled:表示开启xpack认证机制。

  • xpack.security.transport.ssl.enabled:这条如果不配,es将起不来,会报如下错误:Transport SSL must be enabled if security is enabled on a [basic] license. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security by setting [xpack.security.enabled] to [false]

配置完成,记得创建配置中涉及到的目录并授权,然后启动es。启动成功之后,再次访问es,就需要基于用户来访问了,可用如下两种方式:

  1. curl -XGET -u elastic 'localhost:9200/_xpack/security/user?pretty'


  2. curl 127.0.0.1:9200 -u elastic

两种方式都是在回车之后就可得到数据。

2,为内置账号添加密码

ES中内置了几个管理其他集成组件的账号即:apm_system, beats_system, elastic, kibana, logstash_system, remote_monitoring_user,使用之前,首先需要添加一下密码。

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

然后给每个用户设置对应的密码即可。

3,配置kibana连接。

开启了安全认证之后,kibana连接es以及访问es都需要认证。

变更kibana的配置,一共有两种方法,一种明文的,一种密文的。

1,明文配置

server.port: 5601server.host: "0.0.0.0"server.name: "es-node1"elasticsearch.hosts: ["http://192.168.3.42:9200"]kibana.index: ".kibana"i18n.locale: "zh-CN"elasticsearch.username: "kibana"elasticsearch.password: "kibana_passwd"xpack.reporting.encryptionKey: "a_random_string"xpack.security.encryptionKey: "something_at_least_32_characters"
  • elasticsearch.username:连接es的用户名。

  • elasticsearch.password:连接es的密码。

  • xpack.reporting.encryptionKey:如果不添加这条配置,将会报错 Generating a random key for xpack.reporting.encryptionKey. To prevent pending reports from failing on restart, please set xpack.reporting.encryptionKey in kibana.yml

  • xpack.security.encryptionKey:如果不配置这条,将会报错 Generating a random key for xpack.security.encryptionKey. To prevent sessions from being invalidated on restart, please set xpack.security.encryptionKey in kibana.yml

2,密文配置

当然肯定推荐使用这种密文的方式进行认证,认证之前,需要首先将用户名密码保存到内置的ketstore里。

/usr/share/kibana/bin/kibana-keystore --allow-root create/usr/share/kibana/bin/kibana-keystore --allow-root add elasticsearch.username/usr/share/kibana/bin/kibana-keystore --allow-root add elasticsearch.password

原封不动执行如上三条命令,用户名的时候输入kibana,密码写入对应密码,接着调整kibana的配置:

server.port: 5601server.host: "0.0.0.0"server.name: "es-node1"elasticsearch.hosts: ["http://192.168.3.42:9200"]kibana.index: ".kibana"i18n.locale: "zh-CN"xpack.reporting.encryptionKey: "a_random_string"xpack.security.encryptionKey: "something_at_least_32_characters"

然后重启kibana即可访问,访问的时候使用elastic的用户密码登入,将是全局管理权限,如果需要创建kibana的只读用户,则可以通过管理–用户–新建用户,对用户进行角色授权即可。

3,logstash配置认证。

打开自定义的logstash的配置文件logstash.conf,在output中增加elasticsearch的用户名和密码

  1. [root@ELK1 ~]# vim /home/elk/logstash-7.2.1/config/logstash.conf


  2. input {

  3.  beats {

  4.    port => 5044

  5.  }

  6. }


  7. output {

  8.  stdout {

  9.    codec => rubydebug

  10.  }

  11.  elasticsearch {

  12.    hosts => ["192.168.3.42:9200"]

  13.    user => "elastic"

  14.    password => "123456"

  15.  }

  16. }

4,集群配置。

在我配置过程中,发现集群认证需要首先配置秘钥才行,否则在给内置用户创建秘钥的时候将会报错。

1,证书。

如下操作在其中一个node节点执行即可,生成完证书传到集群其他节点即可。

/usr/share/elasticsearch/bin/elasticsearch-certutil ca/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

两条命令均一路回车即可,不需要给秘钥再添加密码。

证书创建完成之后,默认在es的数据目录,这里统一放到etc下:

  1. $ ls elastic-*

  2. elastic-certificates.p12  elastic-stack-ca.p12


  3. mv elastic-* /etc/elasticsearch/

  4. chown elasticsearch.elasticsearch elastic*

同样,将如上命令生成的两个证书文件拷贝到另外两台机器作为通信依据。

2,配置。

三台机器配置文件如下:

node-1

  1. cluster.name: eryajf-elk

  2. node.name: es-node1

  3. path.data: /data/elasticsearch7/data

  4. path.logs: /data/elasticsearch7/log

  5. network.host: 0.0.0.0

  6. http.port: 9200

  7. transport.tcp.port: 9300


  8. discovery.seed_hosts: ["192.168.3.3:9300","192.168.3.4:9300","192.168.3.5:9300"]

  9. cluster.initial_master_nodes: ["192.168.3.3:9300","192.168.3.4:9300","192.168.3.5:9300"]


  10. xpack.security.enabled: true

  11. xpack.security.transport.ssl.enabled: true

  12. xpack.security.transport.ssl.verification_mode: certificate

  13. xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12

  14. xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12

node-2

  1. cluster.name: eryajf-elk

  2. node.name: es-node2

  3. path.data: /data/elasticsearch7/data

  4. path.logs: /data/elasticsearch7/log

  5. network.host: 0.0.0.0

  6. http.port: 9200

  7. transport.tcp.port: 9300


  8. discovery.seed_hosts: ["192.168.3.3:9300","192.168.3.4:9300","192.168.3.5:9300"]

  9. cluster.initial_master_nodes: ["192.168.3.3:9300","192.168.3.4:9300","192.168.3.5:9300"]


  10. xpack.security.enabled: true

  11. xpack.security.transport.ssl.enabled: true

  12. xpack.security.transport.ssl.verification_mode: certificate

  13. xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12

  14. xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12

node-3

  1. cluster.name: eryajf-elk

  2. node.name: es-node3

  3. path.data: /data/elasticsearch7/data

  4. path.logs: /data/elasticsearch7/log

  5. network.host: 0.0.0.0

  6. http.port: 9200

  7. transport.tcp.port: 9300


  8. discovery.seed_hosts: ["192.168.3.3:9300","192.168.3.4:9300","192.168.3.5:9300"]

  9. cluster.initial_master_nodes: ["192.168.3.3:9300","192.168.3.4:9300","192.168.3.5:9300"]


  10. xpack.security.enabled: true

  11. xpack.security.transport.ssl.enabled: true

  12. xpack.security.transport.ssl.verification_mode: certificate

  13. xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12

  14. xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12

如上配置无误,则可以启动es。

然后剩下的步骤与单机部署的就差不多了,给内置用户添加密码,然后kibana认证。

其中kibana通过密文认证之后,配置如下:

server.port: 5601server.host: "0.0.0.0"server.name: "es-node3"elasticsearch.hosts: ["http://192.168.3.3:9208"]kibana.index: ".kibana"i18n.locale: "zh-CN"



标签:

上一篇: Elasticsearch 7.2 安装方法 及常见错误以及详细配置介绍(配置文件详细说明)
下一篇: JConsole连接远程linux服务器配置

相关文章暂无相关
评论列表暂无评论
发表评论
验证码

«   2024年4月   »
1234567
891011121314
15161718192021
22232425262728
2930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接
    • RainbowSoft Studio Z-Blog
    • 订阅本站的 RSS 2.0 新闻聚合
    ︿
    Top