Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Обеспечение безопасности Elastic Stack ›Авторизация пользователей

Безопасность на уровне документов

Безопасность на уровне документов ограничивает доступ пользователей к документам. В частности, она ограничивает доступ к документам из API для чтения документов.

Для включения безопасности на уровне документов используется запрос, определяющий, к каким документам имеет доступ каждая роль. Документ query ассоциируется с конкретным потоком данных, индексом или шаблоном подстановок (*) и работает совместно с привилегиями, указанными для потоков данных и индексов.

Указанный документ query:

  • Ожидает того же формата, что и в запросе поиска
  • Поддерживает шаблонизацию запроса роли, которая может получить доступ к данным текущего аутентифицированного пользователя
  • Принимает запросы в виде строковых значений или вложенных JSON-объектов
  • Поддерживает большинство функций языка запросов Elasticsearch (Query Domain Specific Language (DSL)), с некоторыми ограничениями для безопасности на уровне полей и документов

Полное отсутствие параметра query полностью отключает безопасность на уровне документов для соответствующей записи разрешений на индексы.

Следующее определение роли предоставляет чтение только документам, принадлежащим к категории click во всех потоках данных и индексах events-*:

resp = client.security.put_role(
    name="click_role",
    indices=[
        {
            "names": [
                "events-*"
            ],
            "privileges": [
                "read"
            ],
            "query": "{\"match\": {\"category\": \"click\"}}"
        }
    ],
)
print(resp)
const response = await client.security.putRole({
  name: "click_role",
  indices: [
    {
      names: ["events-*"],
      privileges: ["read"],
      query: '{"match": {"category": "click"}}',
    },
  ],
});
console.log(response);
POST /_security/role/click_role
{
  "indices": [
    {
      "names": [ "events-*" ],
      "privileges": [ "read" ],
      "query": "{\"match\": {\"category\": \"click\"}}"
    }
  ]
}

Вы можете записать тот же запрос с использованием вложенного синтаксиса JSON:

resp = client.security.put_role(
    name="click_role",
    indices=[
        {
            "names": [
                "events-*"
            ],
            "privileges": [
                "read"
            ],
            "query": {
                "match": {
                    "category": "click"
                }
            }
        }
    ],
)
print(resp)
const response = await client.security.putRole({
  name: "click_role",
  indices: [
    {
      names: ["events-*"],
      privileges: ["read"],
      query: {
        match: {
          category: "click",
        },
      },
    },
  ],
});
console.log(response);
POST _security/role/click_role
{
  "indices": [
    {
      "names": [ "events-*" ],
      "privileges": [ "read" ],
      "query": {
        "match": {
          "category": "click"
        }
      }
    }
  ]
}

Следующая роль предоставляет доступ к чтению только тем документам, у которых department_id равно 12:

resp = client.security.put_role(
    name="dept_role",
    indices=[
        {
            "names": [
                "*"
            ],
            "privileges": [
                "read"
            ],
            "query": {
                "term": {
                    "department_id": 12
                }
            }
        }
    ],
)
print(resp)
const response = await client.security.putRole({
  name: "dept_role",
  indices: [
    {
      names: ["*"],
      privileges: ["read"],
      query: {
        term: {
          department_id: 12,
        },
      },
    },
  ],
});
console.log(response);
POST /_security/role/dept_role
{
  "indices" : [
    {
      "names" : [ "*" ],
      "privileges" : [ "read" ],
      "query" : {
        "term" : { "department_id" : 12 }
      }
    }
  ]
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/document-level-security.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API