У меня есть следующая структура в индексе эластичного поиска answers
{"can_view": ["F1", "F2", "F3"],"firstname": "John","lastname": "Black"}
{"can_view": ["F1", "F2"],"firstname": "Jack","lastname": "Grey"}
{"can_view": ["F2", "F3"],"firstname": "Adam","lastname": "Brown"}
У меня установлена XPack Security для эластичного поиска.У меня в системе три пользователя: F1
, F2
, F3
.
Я добавил роль для защиты документов с помощью этого запроса.
POST /_xpack/security/role/alias_read
{
"indices" : [
{
"names": [ "answers" ],
"privileges": [ "read" ],
"query": {
"template": {
"source": {
"match": {
"can_view": "{{_user.username}}"
}
}
}
}
}
]
}
I 'мы присвоили эту роль alias_read
пользователям F1, F2 и F3.
Теперь, если я вошел в систему как пользователь F1
, я могу видеть только эти документы
{"can_view": ["F1", "F2", "F3"],"firstname": "John","lastname": "Black"}
{"can_view": ["F1", "F2"],"firstname": "Jack","lastname": "Grey"}
Если я вошел в систему как F2
пользователь, я могу видеть только те документы
{"can_view": ["F1", "F2"],"firstname": "Jack","lastname": "Grey"}
{"can_view": ["F2", "F3"],"name": "Adam","value": "Brown"}
Это работает просто идеально и правильно.
Теперь вопросесли есть способ сделать подобную защиту, но для конкретных значений полей (не для целых документов и не для целых полей).
Например.
У меня есть следующая структурав индексеasticsearch answers
{"firstname": {"can_view": ["F1", "F2", "F3"], "value": "John"} ,"lastname": {"can_view": ["F1"], "value":"Black"} }
{"firstname": {"can_view": ["F3"], "value": "Jack"} ,"lastname": {"can_view": ["F2"], "value":"Grey"} }
{"firstname": {"can_view": ["F3", "F1"], "value": "Adam"} ,"lastname": {"can_view": ["F2", "F3"], "value":"Brown"} }
Я пытаюсь получить следующее: если я вошел в систему как пользователь F1
, я смогу видеть только те результаты:
{"firstname": {"can_view": ["F1", "F2", "F3"], "value": "John"} ,"lastname": {"can_view": ["F1"], "value":"Black"} }
{"firstname": {"can_view": ["F3", "F1"], "value": "Adam"}}
Если я вошел в систему как пользователь F2
, я смогу видеть только те результаты:
{"firstname": {"can_view": ["F1", "F2", "F3"], "value": "John"}}
{"lastname": {"can_view": ["F2"], "value":"Grey"} }
{"lastname": {"can_view": ["F2", "F3"], "value":"Brown"} }
Так что я бы хотел ограничить конкретный valдля конкретных пользователей.Есть ли способ сделать это вasticsearch, используя xpack или какой-нибудь другой пакет безопасности?Используете роли или что-то еще?
Версии, которые я использую:
asticsearch 6.5.1
kibana 6.5.1
X-Pack