Защитить значения полей вasticsearch - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть следующая структура в индексе эластичного поиска 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

...