zoukankan      html  css  js  c++  java
  • ElasticSearch 集群安全

    公号:码农充电站pro
    主页:https://codeshellme.github.io

    在安装完 ES 后,ES 默认是没有任何安全防护的。

    ES 的安全管理主要包括以下内容:

    这里有一些免费的安全方案:

    • 设置 Nginx 方向代理。
    • 安装免费的安全插件,比如:
    • X-Pack 的 Basic 版:可参考这里

    1,身份认证

    ES 中提供的认证叫做 Realms,有以下几种方式,可分为两类:

    • 内部的:不需要与 ES 外部方通信。
      • file(免费):用户名和密码保存在 ES 索引中。
      • native(免费):用户名和密码保存在 ES 索引中。
    • 外部的:需要与 ES 外部组件通信。

    2,用户鉴权

    用户鉴权通过定义一个角色,并分配一组权限;然后将角色分配给用户,使得用户拥有这些权限。

    ES 中的权限有不同的级别,包括集群级别(30 多种)和索引级别(不到 20 种)。

    ES 中提供了很多内置角色(不到 30 种)可供使用。

    ES 中提供了很多关于用户与角色的 API:

    3,启动 ES 安全功能

    下面演示如何使用 ES 的安全功能。

    启动 ES 并通过 xpack.security.enabled 参数打开安全功能:

    binelasticsearch -E node.name=node0 -E cluster.name=mycluster -E path.data=node0_data -E http.port=9200 -E xpack.security.enabled=true
    

    使用 elasticsearch-setup-passwords 命令启用 ES内置用户及初始 6 位密码(需要手动输入,比如是 111111):

    binelasticsearch-setup-passwords interactive
    

    该命令会启用下面这些用户:

    • elastic:超级用户。
    • kibana:用于 ES 与 Kibana 之间的通信。
    • kibana_system:用于 ES 与 Kibana 之间的通信。
    • apm_system
    • logstash_system
    • beats_system
    • remote_monitoring_user

    启用 ES 的安全功能后,访问 ES 就需要输入用户名和密码:

    在这里插入图片描述

    也可以通过 curl 命令(并指定用户)来访问 ES:

    curl -u elastic 'localhost:9200'
    

    更多内容可参考这里

    4,启动 Kibana 安全功能

    打开 Kibana 的配置文件 kibana.yml,写入下面内容:

    elasticsearch.username: "kibana_system"  # 用户名
    elasticsearch.password: "111111"         # 密码
    

    然后使用 binkibana 命令启动 Kibana。

    访问 Kibana 也需要用户和密码(这里使用的是超级用户):

    在这里插入图片描述

    5,使用 Kibana 创建角色和用户

    下面演示如何使用 Kibana 创建角色和用户。登录 Kibana 之后进行如下操作:

    在这里插入图片描述

    点击 Stack Management 后进入下面页面:

    在这里插入图片描述

    5.1,创建角色

    点击 Create role 创建角色:

    在这里插入图片描述

    创建角色需要填写如下内容:

    • 角色名称
    • 角色对哪些索引有权限及索引的权限级别
    • 添加一个 Kibana 权限
    • 最后创建角色

    在这里插入图片描述

    经过上面的操作,创建的角色名为 test_role,该角色对 test_index 索引有只读权限;如果进行超越范围的操作,将发生错误。

    5.2,创建用户

    进入到创建用户的界面,点击 Create user 创建用户:

    在这里插入图片描述

    填写用户名和密码,并将角色 test_role 赋予该用户。

    在这里插入图片描述

    5.3,使用用户

    使用新创建的用户登录 Kibana:

    在这里插入图片描述

    该用户只对 test_index 索引有只读权限;如果进行超越范围的操作,将发生错误。

    6,传输加密

    传输加密指的是在数据的传输过程中,对数据进行加密(可防止数据被抓包)。

    传输加密分为集群内加密和集群间加密:

    • 集群内加密指的是 ES 集群内部各节点之间的数据传输时的加密。
      • 通过 TLS 协议完成。
    • 集群间加密指的是外部客户访问 ES 时,数据传输的加密。
      • 通过 HTTPS 协议完成。

    更多的内容可参考这里

    6.1,集群内部传输加密

    在 ES 中可以使用 TLS 协议对数据进行加密,需要进行以下步骤:

    • 创建 CA
    • 为 ES 节点创建证书和私钥
    • 配置证书
    1,创建 CA 证书

    使用如下命令创建 CA:

    binelasticsearch-certutil ca
    

    成功后,可以看到当前文件夹下多了一个文件:

    elastic-stack-ca.p12
    
    2,生成证书和私钥

    使用如下命令为 ES 中的节点生成证书和私钥

    binelasticsearch-certutil cert --ca elastic-stack-ca.p12
    

    成功后,可以看到当前文件夹下多了一个文件:

    elastic-certificates.p12
    
    3,配置证书

    将创建好的证书 elastic-certificates.p12 放在 config/certs 目录下。

    4,启动集群
    # 启动第一个节点
    binelasticsearch 
    -E node.name=node0 
    -E cluster.name=mycluster
    -E path.data=node0_data 
    -E http.port=9200 
    -E xpack.security.enabled=true 
    -E xpack.security.transport.ssl.enabled=true 
    -E xpack.security.transport.ssl.verification_mode=certificate 
    -E xpack.security.transport.ssl.keystore.path=certselastic-certificates.p12 
    -E xpack.security.transport.ssl.truststore.path=certselastic-certificates.p12
    
    # 启动第二个节点
    binelasticsearch 
    -E node.name=node1 
    -E cluster.name=mycluster 
    -E path.data=node1_data 
    -E http.port=9201 
    -E xpack.security.enabled=true 
    -E xpack.security.transport.ssl.enabled=true 
    -E xpack.security.transport.ssl.verification_mode=certificate 
    -E xpack.security.transport.ssl.keystore.path=certselastic-certificates.p12 
    -E xpack.security.transport.ssl.truststore.path=certselastic-certificates.p12
    

    不提供证书的节点将无法加入集群:

    binelasticsearch 
    -E node.name=node2 
    -E cluster.name=mycluster 
    -E path.data=node2_data 
    -E http.port=9202 
    -E xpack.security.enabled=true 
    -E xpack.security.transport.ssl.enabled=true 
    -E xpack.security.transport.ssl.verification_mode=certificate
    # 加入失败
    

    也可以将配置写在配置文件 elasticsearch.yml 中,如下:

    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
    xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
    

    6.2,集群外部传输加密

    通过配置如下三个参数,使得 ES 支持 HTTPS:

    xpack.security.http.ssl.enabled: true
    xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
    xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
    

    在命令行启动:

    binelasticsearch 
    -E node.name=node0 
    -E cluster.name=mycluster
    -E path.data=node0_data 
    -E http.port=9200 
    -E xpack.security.enabled=true 
    -E xpack.security.transport.ssl.enabled=true 
    -E xpack.security.transport.ssl.verification_mode=certificate 
    -E xpack.security.transport.ssl.keystore.path=certselastic-certificates.p12 
    -E xpack.security.transport.ssl.truststore.path=certselastic-certificates.p12
    -E xpack.security.http.ssl.enabled=true 
    -E xpack.security.http.ssl.keystore.path=certselastic-certificates.p12 
    -E xpack.security.http.ssl.truststore.path=certselastic-certificates.p12
    

    启动成功后,可以通过 HTTPS 协议访问 ES:

    https://localhost:5601/
    

    6.3,配置 Kibana 链接 ES HTTPS

    1,为 Kibana 生成 pem 文件

    首先用 openssl 为 kibana 生成 pem:

    openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -out elastic-ca.pem
    

    成功后会生成如下文件:

    elastic-ca.pem
    

    将该文件放在 configcerts 目录下。

    2,配置 kibana.yml

    在 Kibana 的配置文件 kibana.yml 中配置如下参数:

    elasticsearch.hosts: ["https://localhost:9200"]
    elasticsearch.ssl.certificateAuthorities: ["C:\elasticsearch-7.10.1\config\certs\elastic-ca.pem"]
    elasticsearch.ssl.verificationMode: certificate
    
    3,运行 Kibana
    binkibana
    

    6.4,配置 Kibana 支持 HTTPS

    1,为 Kibana 生成 pem
    bin/elasticsearch-certutil ca --pem
    

    上面命令执行成功后会生成如下 zip 文件:

    elastic-stack-ca.zip
    

    将该文件解压,会有两个文件:

    ca.crt
    ca.key
    

    将这两个文件放到 Kibana 的配置文件目录 configcerts

    2,配置 kibana.yml

    在 Kibana 的配置文件 kibana.yml 中配置如下参数:

    server.ssl.enabled: true
    server.ssl.certificate: config\certs\ca.crt
    server.ssl.key: config\certs\ca.key
    
    3,运行 Kibana
    binkibana
    

    启动成功后,可以通过 HTTPS 协议访问 Kibana:

    https://localhost:5601/
    

    (本节完。)


    推荐阅读:

    ElasticSearch 搜索模板与建议

    ElasticSearch 聚合分析

    ElasticSearch 中的 Mapping

    ElasticSearch 数据建模

    ElasticSearch 分布式集群


    欢迎关注作者公众号,获取更多技术干货。

    码农充电站pro

  • 相关阅读:
    PowerDesigner与Eclipse同步开发
    postdrop: create file maildrop/xxx: Permission denied
    mysql导出数据mysqldump用法
    mysql 存储过程中 limit之后使用分页变量,传入分页参数. 类似于微博游标分批次获取信息;问号参数类似于c#的string.format;问号占位符
    mysql 获取本周一的日期,本周日的日期
    mysql 游标 ,嵌套游标
    asp.net调用mysql 存储过程 带 out 返回值,返回刚插入数据库中的自增的ID,LAST_INSERT_ID() 的使用
    跨服务器,跨数据库,多表联合查询 / 如何用sql语句来查询表中哪些记录是重复的
    asp.net 使用mysql数据库,OUT parameter返回值为null的bug
    mysql 类型转换 cast 将 float 转换为 decimal
  • 原文地址:https://www.cnblogs.com/codeshell/p/14467692.html
Copyright © 2011-2022 走看看