• 基于open_distro的ES文档访问控制


    前言

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

    文档级别安全控制

    在一些场景下,除了集群和索引级别的权限控制,我们希望控制的粒度更细一些,希望不同的用户只能看到自己有权限访问的文档,而不是一个索引中的所有文档,open distro 提供了document level 的访问控制,我们可以在创建角色时,指定dls属性来实现。

    配置方式

    文档级别(document level)的权限控制,是在创建角色(role)时在dls中指定的,因此也有三种方式来配置:

    • 通过配置文件初始化

      在ES_HOME/plugins/opendistro_security/securityconfig/roles.yml 中设置

    • 通过kibana的图形话界面配置

      在kibana ->Security 模块 -> Roles -> Index Permissions -> Document Level Security Query中配置

    • 通过REST API 配置

      配置文件初始化和kibana图形话界面的配置方式,不方面在开发中进行脚本管理和现场实施。REST API方式很好的解决了这些问题。

    REST API 设置步骤

    • 创建具有文档权限的角色

      PUT _opendistro/_security/api/roles/public_data
      {
        "cluster_permissions": [
          "*"
        ],
        "index_permissions": [{
          "index_patterns": [
            "pub*"
          ],
          "dls": "{"term": { "public": true}}",
          "allowed_actions": [
            "read"
          ]
        }]
      }
      
    • 创建用户,并给用户赋予该角色

      PUT /_opendistro/_security/api/internalusers/public_user
      {
        "password":"123456"
      }
      
      PUT /_opendistro/_security/api/rolesmapping/public_data
      {
        "users":["public_user"]
      }
      

      public_user 用户就只能查看pub开头的索引,且文档中public 属性为true的字段

    注意事项

    • 所有能在_search 的query中使用的语法均能在dls中使用,但是需要做字符转义,如:双引号转换为反斜线加双引号,且dls不建议写太复杂

    • 对于文档中没有 public 属性的文档,那么用户看不到该文档

    • 文档级权限之间的关系是or的关系,比如public_data_2角色只能查看name为wangzhen的文档,public_data角色只能查看public 为true的文档,用户public_user 拥有public_data和public_data_2两个角色,那么public_user能查看public为true的文档或者name为wangzhen的文档。

    • 如果public_data_3角色没有设置dls,而public_data设置了dls,那么拥有这两个角色的用户只能查看dls设置的文档(和xpack的默认表现不一致)

  • 相关阅读:
    DUBBO+Zookeeper在Centos7中本地搭建及小案例
    【后台测试】手把手教你jmeter压测
    Netdata 是一款 Linux 性能实时监测工具
    Spring Boot(5) 集成Hibernate 日志配置
    FSTConfiguration 高性能序列化框架FST
    java BeanUtils.copyProperties
    Transformer-view java实体 转换视图 Lists.transform
    shell 命令学习
    Immutable集合
    Lists.transform的使用
  • 原文地址:https://www.cnblogs.com/wangzhen3798/p/13513788.html
Copyright © 2020-2023  润新知