Я хочу создать ключи API наasticsearch через API POST _security / api_key, я могу создать их, но я хочу ограничить возможности поиска для сгенерированного ключа, что я не могу сделать.
По существу,чего я хочу добиться, так это того, что все мои записи имеют поле типа "username":"username1"
или другое, например "username":"username2"
, т. е. все записи будут иметь действительное значение для имя пользователя поле
Теперь я хочу создать ключ, в котором я указываю что-то вроде "username":"username2"
, которое затем добавляется к каждому поисковому запросу, выполненному с использованием этого ключа, в качестве примера AND, например, если этот ключ ищет (/ index_name / _search) для
{
"query": {
"match": {
"key_zz":"value_aa"
}
}
}
этот запрос фактически будет И для обоих из нижеприведенных (т.е. если запись с этой комбинацией существует "key_zz":"value_aa"
, но значение для имя пользователя не равно имя пользователя2 API не возвращает этот объект)
{
"query": {
"match": {
"key_zz":"value_aa"
}
}
}
AND
{
"query": {
"must": {
"match" : {
"username":"username2"
}
}
}
}
Я попытался создать ключ со всеми следующими комбинациями:
"name": "key-name",
"role_descriptors": {
"role_name": {
"indices": [
{
"names": [
"index_name"
],
"privileges": [
"read"
],
"query": {
"match": {
"username": "value_custom"
}
}
}
]
}
}
}
В поле запроса у меня естьперепробовал все следующие комбинации:
"query": {
"and": {
"username": "value_custom"
}
}
"query": {
"bool": {
"must": {
"match": {
"username": "value_custom"
}
}
}
}
"query": {
"bool": {
"must": {
"bool": {
"must": {
"match": {
"username": "value_custom"
}
}
}
}
}
}
Но ничего из вышеперечисленного не сработало.Кроме того, ранее тип отображения поля username был text , но затем я обновил его до ключевое слово
В двух словах, что япопытка достичь - это своего рода защита на уровне документа.Я знаю, что в ElasticSearch есть какая-то защита на уровне документов (https://www.elastic.co/guide/en/elastic-stack-overview/current/document-level-security.html), но в нашей архитектуре мы хотим добиться этого с помощью ключей API с ограниченными возможностями поиска. В настоящее время мы используем Algolia, и мы достигли этого, используя точную реализацию.описано выше. В документации ElasticSearch есть ссылки на то, как ограничить роль, но не на то, как ограничивать ключи API. Нужна помощь для достижения этого.
Кроме того, я использую ElasticSearch v7
Некоторые справочные ссылки:
- https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html
- https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-put-role.html