#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. К сожалению, здесь нет волшебства.