zoukankan      html  css  js  c++  java
  • 基于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的默认表现不一致)

  • 相关阅读:
    JVM调优总结(八)-典型配置举例2
    JVM调优总结(七)-典型配置举例1
    ajax---异步请求对象的属性和方法
    ajax----发送异步请求的步骤
    ajax---获取XMLHttpReuquest 对象
    ajax--参数默认值问题
    ajax--参数映射方式实现阴影效果
    ajax-简单参数方法实现阴影效果
    ajax之阴影效果实现(对象函数方法)
    ajax对象方法的使用
  • 原文地址:https://www.cnblogs.com/wangzhen3798/p/13513788.html
Copyright © 2011-2022 走看看