基于open_distro的ES用户管理(认证)

欧阳狐若
2023-12-01

基于open_distro的ES用户管理(认证)

背景

open distro for elasticsearch 是由亚马逊AWS支持的基于Apache License,Version 2.0协议的100%开源的Elasticsearch发行版。与Elastic公司官方的Elasticsearch版本最大的区别是:剔除了基于elastic协议发布的xpack插件,增加了开源插件。新增插件功能包括安全、告警、索引生命周期管理、性能分析、SQL等企业级功能。简单理解就是集成了开源版xpack插件的elasticsearch。

用户认证

和xpack一样open distro也提供了security插件,实现加密通信、用户登陆认证、操作授权、文档和字段级别访问控制、日志审计等企业级安全功能。opendisro_security插件也支持有internaldatabase、Active Directory, LDAP,OpenID Connect 等多种后台认证服务组成的认证链。默认采用internaldatabase方式实现用户管理,内部的用户数据、权限数据、角色数据存储在ES集群的.opendistro_security索引中,和xpack的native realms 类似。系统默认初始化的用户有:

  • admin 超级管理员
  • readall 只读帐号
  • logstash logstash连接es时的后台帐号
  • kibanaserver kibana连接es时的后台帐号
  • kibanaro kibana只读帐号,不能修改kibana可视化面板
  • snapshotrestore 快照备份恢复帐号

用户管理的方式

opendisro_security插件默认支持三种用户管理方式:配置文件、kibana图形化界面、API命令

  • 配置文件

    • 应用场景:适合Elasticsearch安装后初始化用户数据,不适合后续业务管理。

    • 操作方法:

      • 第一步,在ES_HOME/plugins/opendistro_security/securityconfig/中编辑internal_users.yml、roles_maping.yml、roles.yml 文件中的用户、角色和权限数据

      • 第二步,启动Elasticsearch服务

      • 第三步,运行plugins/opendistro_security/tools/securityadmin.sh 脚本将数据更新到.opendistro_security 索引中

  • kibana图形化界面

    • 应用场景: 适合生产环境运维人员做人员管理
    • 操作方法:
      • 第一步, 安装并启动opendistrroforelasticsearch-kibana 版本的kibana
      • 第二步, 在 security 模块添加用户和角色
  • API 命令

    • 应用场景: 以上两种方式做用户管理时,不方便项目管理,不能用git等版本管理追踪到项目的全量和增量脚本,API 方式很好的弥补了这个问题.

常用的用户管理API

  • 查看用户

    GET _opendistro/_security/api/internalusers
    
  • 新建用户

    PUT _opendistro/_security/api/internalusers/wangzhen
    {
      "password":"6789@jkl",
      "backend_roles":[],
      "attributes":{
        "age":18
      }
    }
    
    #响应
    {
      "status" : "CREATED",
      "message" : "'wangzhen' created."
    }
    
  • 修改用户

    官方推荐的PATCH 方法修改用户并不能成功,并报错

    PATCH _opendistro/_security/api/internalusers/wangzhen
    {
      "op":"replace",
      "path":"/backend_roles",
      "value":["admin"]
    }  
    

    应该使用和新建用户一样的方法,且可以更新密码:

    PUT _opendistro/_security/api/internalusers/wangzhen
    {
      "password":"6789@jkl",
      "backend_roles":["admin"],
      "attributes":{
        "age":18
      }
    }
    
    #响应
    {
      "status" : "OK",
      "message" : "'wangzhen' updated."
    }
    
  • 删除用户

    DELETE /_opendistro/_security/api/internalusers/wangzhen
    
    #响应
    {
      "status" : "OK",
      "message" : "'wangzhen' deleted."
    }
 类似资料: