管理 ES 集群:管集群身份认证与用户鉴权

数据泄露

  • 5700 万用户数据泄漏
  • 1.08 亿条投注信息泄漏

    原因分析

  • ES 在默认安装后,不提供任何形式的安全防护
  • 错误的配置信息导致公网可以访问 ES 集群
    • elasticsearch.yml 文件中, server.host被错误的配置为 0.0.0.0

数据安全性的基本需求

  • 身份认证
    • 鉴定用户是否合法
  • 用户鉴权
    • 指定哪个用户可以访问哪个索引
  • 传输加密
  • 日志审计

一些免费的方案

Anthentication - 身份认证

  • 认证体系的几种类型
    • 提供用户名和密码
    • 提供秘钥或 Kerberos 票据
  • Realms : X-Pack 中的认证服务
    • 内置 Realms (免费)
      • File / Native (用户名密码保存在 Elasticsearch)
    • 外部 Realms (收费)
      • LDAP / Active Directory / PKI / SAML / Kerberos

RBAC - 用户鉴权

  • 什么是 RBAC:Role Based Access Control, 定义一个角色,并分配一组权限。权限包括索引 级,字段级,集群级的不同的操作。然后通过将角色分配给用户,使得用户拥有这些权限
    • User:The authenticated User
    • Role:A named set of permissions
    • Permission – A set of one or more privileges against a secured resource
    • Privilege – A named group of 1 or more actions that user may execute against a secured resource

Privilege

  • Cluster Privileges
    • all / monitor / manager / manage_index / manage_index_template / manage_rollup
  • Indices Privileges
    • all / create / create_index / delete / delete_index / index / manage / read /writeview_index_metadata

创建内置的用户和角色

  • 内置的角色与用户
    用户 角色
    elastic Supper User
    kibana The user that is used by Kibana to connect and communicate with Elasticsearch.
    logstash_system The user that is used by Logstash when storing monitoring information in Elasticsearch.
    beats_system The user that the different Beats use when storing monitoring information in Elasticsearch.
    apm_system The user that the APM server uses when storing monitoring information in Elasticsearch.
    Remote_monitoring_user The user that is used by Metricbeat when collecting and storing monitoring information in Elasticsearch.

使用 Security API 创建用户

POST /_security/user/lsk
{
      "password": "password",
      "roles": ["admin"],
      "full_name": "Crazy Zard",
      "email":"541306829@qq.com",
      "metadata": {
        "intelligence":7
      }
}

开启并配置 X-Pack 的认证与鉴权

  • 修改配置文件,打开认证于授权
    • bin/elasticsearch -E node.name=node0 -E cluster.name=geektime -E path.data=node0_data -E http.port=9200 -E xpack.security.enabled=true - E xpack.security.transport.ssl.enabled=true
  • 创建默认的用户和分组
    • bin/elasticsearch-password interactive
    • 使用docker时并进入到容器中 elasticsearch-setup-passwords interactive
  • 当集群开启身份认证之后,配置 Kibana
  • Demo
    • 创建一个Role,配置为某个索引只读权限 、创建一个用户,把用户加入Role

配置 Kibana

  • 修改 kibana.yml
    • elasticsearch.username: “kibana”
    • elasticsearch.password: “changeme”

创建 Role

创建用户

本作品采用《CC 协议》,转载必须注明作者和本文链接

快乐就是解决一个又一个的问题!

CrazyZard
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!