Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Защита Elastic Stack ›Авторизация пользователей

Безопасность на уровне полей

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

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

Следующее определение роли предоставляет доступ для чтения только к полям category, @timestamp и message во всех потоках данных и индексах events-*.

POST /_security/role/test_role1
{
  "indices": [
    {
      "names": [ "events-*" ],
      "privileges": [ "read" ],
      "field_security" : {
        "grant" : [ "category", "@timestamp", "message" ]
      }
    }
  ]
}

Доступ к следующим метаданным полям всегда разрешен: _id, _type, _parent, _routing, _timestamp, _ttl, _size и _index. Если вы укажете пустой список полей, доступны только эти метаданные.

Полное отсутствие поля fields отключает безопасность на уровне полей.

Вы также можете указать выражения для полей. Например, следующий пример предоставляет доступ для чтения ко всем полям, которые начинаются с префикса event_:

POST /_security/role/test_role2
{
  "indices" : [
    {
      "names" : [ "*" ],
      "privileges" : [ "read" ],
      "field_security" : {
        "grant" : [ "event_*" ]
      }
    }
  ]
}

Используйте обозначение точек, чтобы ссылаться на вложенные поля в более сложных документах. Например, предположим следующий документ:

{
  "customer": {
    "handle": "Jim",
    "email": "jim@mycompany.com",
    "phone": "555-555-5555"
  }
}

Следующее определение роли разрешает только чтение поля handle клиента:

POST /_security/role/test_role3
{
  "indices" : [
    {
      "names" : [ "*" ],
      "privileges" : [ "read" ],
      "field_security" : {
        "grant" : [ "customer.handle" ]
      }
    }
  ]
}

Здесь поддержка подстановочных знаков проявляется во всей красе. Например, используйте customer.*, чтобы разрешить только чтение данных customer:

POST /_security/role/test_role4
{
  "indices" : [
    {
      "names" : [ "*" ],
      "privileges" : [ "read" ],
      "field_security" : {
        "grant" : [ "customer.*" ]
      }
    }
  ]
}

Вы можете запретить доступ к полям с помощью следующего синтаксиса:

POST /_security/role/test_role5
{
  "indices" : [
    {
      "names" : [ "*" ],
      "privileges" : [ "read" ],
      "field_security" : {
        "grant" : [ "*"],
        "except": [ "customer.handle" ]
      }
    }
  ]
}

Применяются следующие правила:

  • Отсутствие field_security в роли эквивалентно * доступу.
  • Если разрешение явно предоставлено для некоторых полей, вы можете указать поля, доступ к которым запрещен. Запрещенные поля должны быть подмножеством полей, для которых были предоставлены разрешения.
  • Определение запрещенных и разрешенных полей подразумевает доступ ко всем разрешенным полям, за исключением тех, которые соответствуют шаблону в запрещенных полях.

Например:

POST /_security/role/test_role6
{
  "indices" : [
    {
      "names" : [ "*" ],
      "privileges" : [ "read" ],
      "field_security" : {
        "except": [ "customer.handle" ],
        "grant" : [ "customer.*" ]
      }
    }
  ]
}

В приведенном выше примере пользователи могут читать все поля с префиксом «customer.» за исключением «customer.handle».

Пустой массив для grant (например, "grant" : []) означает, что доступ к каким-либо полям не предоставлен.

Когда у пользователя есть несколько ролей, которые указывают разрешения на уровне полей, полученные разрешения на уровне полей для каждого потока данных или индекса являются объединением индивидуальных разрешений ролей. Например, если эти две роли объединены:

POST /_security/role/test_role7
{
  "indices" : [
    {
      "names" : [ "*" ],
      "privileges" : [ "read" ],
      "field_security" : {
        "grant": [ "a.*" ],
        "except" : [ "a.b*" ]
      }
    }
  ]
}

POST /_security/role/test_role8
{
  "indices" : [
    {
      "names" : [ "*" ],
      "privileges" : [ "read" ],
      "field_security" : {
        "grant": [ "a.b*" ],
        "except" : [ "a.b.c*" ]
      }
    }
  ]
}

Полученное разрешение равно:

{
  // role 1 + role 2
  ...
  "indices" : [
    {
      "names" : [ "*" ],
      "privileges" : [ "read" ],
      "field_security" : {
        "grant": [ "a.*" ],
        "except" : [ "a.b.c*" ]
      }
    }
  ]
}

Безопасность на уровне полей не должна настраиваться для полей alias. Чтобы защитить конкретное поле, необходимо использовать его имя поля напрямую.

Для получения дополнительной информации см. Настройка безопасности на уровне полей и документов.

© 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/7.17/field-level-security.html

Spec-Zone.ru

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