ElasticSearch объясняет запрос, чтобы узнать, к каким полям осуществляется доступ

#elasticsearch #permissions #elasticsearch-dsl

#elasticsearch #разрешения #elasticsearch-dsl

Вопрос:

Я внедряю систему разрешений для эластичного поиска для наших специалистов по обработке данных (доступ через прокси-микросервис), чтобы запретить определенным пользователям запрашивать определенные поля.

Я просматривал документацию ES, чтобы найти, существует ли какая-либо функция с открытым исходным кодом, которая возвращает все поля, к которым осуществляется доступ через запрос, но безуспешно. Только XPACK предлагает решение, но, насколько я понимаю, оно не является открытым исходным кодом, и для нас это было бы безумно дорого. https://www.elastic.co/guide/en/elasticsearch/reference/current/field-level-security.html

Например.

 {
  "from" : 1,
  "size" : 2,
  "query" : {
    "bool" : {
      "filter" : [
        {
          "bool" : {
            "must" : [
              {
                "nested" : {
                  "query" : {
                    "bool" : {
                      "must" : [
                        {
                          "term" : {
                            "nestedField.nestedAbc.fieldNotSupposedToAccess" : {
                              "value" : 0.102908,
                              "boost" : 1.0
                            }
                          }
                        }
                      ],
                      "adjust_pure_negative" : true,
                      "boost" : 1.0
                    }
                  },
                  "path" : "nestedField.nestedAbc",
                  "ignore_unmapped" : false,
                  "score_mode" : "none",
                  "boost" : 1.0
                }
              }
            ],
            "adjust_pure_negative" : true,
            "boost" : 1.0
          }
        }
      ],
      "adjust_pure_negative" : true,
      "boost" : 1.0
    }
  },
  "_source" : {
    "includes" : [
      "_doc"
    ],
    "excludes" : [ ]
  },
   "function_score": {
      "script_score": {
        "script": {
          "lang": "painless",
          "source": """
            int total = 0;
            for (int i = 0; i < doc['goals'].length;   i) {
              total  = doc['goals'][i];
            }
            return total;
          """
        }
      }
    }
}
 

и я хотел бы, чтобы я получил список всех полей, подобных этому:

 ["nestedField.nestedAbc.fieldNotSupposedToAccess","_doc","goals"]
 

Есть идеи, кроме необходимости создавать сложный анализатор с нуля?

Комментарии:

1. Поскольку вы получаете доступ к ES через прокси-микросервис и не хотите использовать для этого XPack Security, вы могли бы реализовать эту фильтрацию полей в этом микросервисе

2. @Val этот пользовательский сложный анализатор с нуля — это именно то, чего я хотел бы избежать: D

3. Вы могли бы использовать фильтрацию источников с _source.excludes помощью «безопасности» бедного человека

4. Это исключило бы только возврат результата, но помешало бы им иметь WHERE fieldNotSupposedToAccess=4 , правильно?

5. К сожалению, здесь нет волшебства.