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

Определение ролей

Роль определяется следующей JSON-структурой:

{
  "run_as": [ ... ], 
  "cluster": [ ... ], 
  "global": { ... }, 
  "indices": [ ... ], 
  "applications": [ ... ] 

}

Список имён пользователей, от имени которых владельцы этой роли могут выступать.

Список привилегий кластера. Эти привилегии определяют действия на уровне кластера, которые пользователи с этой ролью могут выполнять. Этот параметр необязателен (отсутствие cluster привилегий фактически означает отсутствие разрешений на уровне кластера).

Объект, определяющий глобальные привилегии. Глобальная привилегия — это тип привилегии кластера, чувствительный к запросу. Стандартная привилегия кластера принимает решения об авторизации, основываясь только на выполняемом действии. Глобальная привилегия также учитывает параметры, включённые в запрос. Поддержка глобальных привилегий в настоящее время ограничена управлением привилегиями приложений. Этот параметр необязателен.

Список записей разрешений на индексы. Этот параметр необязателен (отсутствие indices привилегий фактически означает отсутствие разрешений на уровне индекса).

Список записей привилегий приложения. Этот параметр необязателен.

Имена ролей должны содержать от 1 до 1024 символов. Они могут содержать алфавитно-цифровые символы (a-z, A-Z, 0-9), пробелы, знаки препинания и печатные символы в блоке Basic Latin (ASCII). Пробелы в начале или конце не допускаются.

Разрешения на индексы

Ниже описана структура записи разрешений на индексы:

{
  "names": [ ... ], 
  "privileges": [ ... ], 
  "field_security" : { ... }, 
  "query": "..." 
  "allow_restricted_indices": false 
}

Список потоков данных, индексов и алиасов, к которым применяются разрешения в данной записи. Поддерживаются подстановочные знаки (*).

Разрешения на уровне индекса, которыми владельцы роли обладают для соответствующих потоков данных и индексов, указанных в параметре names.

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

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

Запрещённые индексы — это специальная категория индексов, используемых для хранения конфигурационных данных. Обычно привилегии на запрещённые индексы должны предоставляться только системным ролям. Настройка этого флага крайне нежелательна, так как она может предоставить права суперпользователя. Однако если для административных целей вам необходимо создать роль с правами на запрещённые индексы, необходимо установить значение этого поля в true (значение по умолчанию — false), а затем поле names будет охватывать и запрещённые индексы.

Параметр names принимает подстановочные знаки и регулярные выражения, которые могут относиться к нескольким потокам данных, индексам и алиасам.

  • Подстановочные знаки (по умолчанию) — простая подстановка, где * — плейсхолдер для нуля или более символов, ? — плейсхолдер для одного символа, а \ может использоваться в качестве символа экранирования.
  • Регулярные выражения — более мощный синтаксис для соответствия более сложным шаблонам. Это регулярное выражение основано на синтаксисе автомата регулярных выражений Lucene. Для включения этого синтаксиса он должен быть заключён в пару обратных слэшей (/). Любой шаблон, начинающийся с / и не заканчивающийся на /, считается некорректным.

Примеры регулярных выражений.

"foo-bar":               # match the literal `foo-bar`
"foo-*":                 # match anything beginning with "foo-"
"logstash-201?-*":       # ? matches any one character
"/.*-201[0-9]-.*/":      # use a regex to match anything containing 2010-2019
"/foo":                  # syntax error - missing final /

Глобальные привилегии

Ниже описана структура записи глобальных привилегий:

{
  "application": {
    "manage": {    
        "applications": [ ... ] 
    }
  }
}

Поддерживается только одна глобальная привилегия — возможность управления привилегиями приложений.

Список имён приложений, которые можно управлять. Этот список поддерживает подстановочные знаки (например, "myapp-*") и регулярные выражения (например, "/app[0-9]*/").

Привилегии приложений

Ниже описана структура записи привилегий приложения:

{
  "application": "my_app", 
  "privileges": [ ... ],   
  "resources": [ ... ]     
}

Имя приложения.

Список имён привилегий приложения, которые нужно предоставить этой роли.

Ресурсы, к которым применяются эти привилегии. Они обрабатываются так же, как шаблон имени индекса в параметре indices разрешений. Эти ресурсы не имеют особого значения для функций безопасности Elasticsearch.

Подробные сведения о правилах проверки этих полей см. в API добавления привилегий приложения.

Роль может ссылаться на привилегии приложений, которые не существуют — то есть они ещё не были определены с помощью API добавления привилегий приложения (или были определены, но затем были удалены). В этом случае привилегия не оказывает никакого действия и не предоставляет никаких действий в API проверки наличия привилегий.

Пример

Следующий фрагмент показывает пример определения роли clicks_admin:

POST /_security/role/clicks_admin
{
  "run_as": [ "clicks_watcher_1" ],
  "cluster": [ "monitor" ],
  "indices": [
    {
      "names": [ "events-*" ],
      "privileges": [ "read" ],
      "field_security" : {
        "grant" : [ "category", "@timestamp", "message" ]
      },
      "query": "{\"match\": {\"category\": \"click\"}}"
    }
  ]
}

Основываясь на вышеуказанном определении, пользователи, обладающие ролью clicks_admin, могут:

  • Притворяться пользователем clicks_watcher_1 и выполнять запросы от его имени.
  • Мониторить кластер Elasticsearch
  • Читать данные из всех индексов с префиксом events-
  • В рамках этих индексов, читать только события категории click
  • В рамках этих документов, читать только поля category, @timestamp и message.

Для получения полного списка доступных привилегий кластера и индексов

Существует два доступных механизма для определения ролей: использование API управления ролями или в локальных файлах на узлах Elasticsearch. Также можно реализовать пользовательские поставщики ролей. Если вам необходимо интегрироваться с другой системой для получения ролей пользователей, можно создать плагин пользовательского поставщика ролей. Более подробную информацию см. в разделе Настройка ролей и авторизации.

Пользовательский интерфейс управления ролями

Вы можете легко управлять пользователями и ролями в Kibana. Для управления ролями войдите в Kibana и перейдите в Управление / Безопасность / Роли.

API управления ролями

API управления ролями позволяют динамически добавлять, обновлять, удалять и получать роли. Когда вы используете API для управления ролями в среде native, роли хранятся во внутреннем индексе Elasticsearch. Дополнительную информацию и примеры см. в разделе API управления ролями.

Управление ролями в файлах

Помимо API управления ролями, роли также могут быть определены в локальном файле roles.yml, расположенном в ES_PATH_CONF. Это файл YAML, где каждая запись определения роли имеет соответствующее имя.

Если одно и то же имя роли используется в файле roles.yml и через API управления ролями, роль, определённая в файле, будет использоваться.

Хотя API управления ролями является предпочтительным механизмом для определения ролей, использование файла roles.yml становится полезным, если вы хотите определить фиксированные роли, которые никто (кроме администратора с физическим доступом к узлам Elasticsearch) не сможет изменить. Обратите внимание, что файл roles.yml предоставляется как минимальная административная функция и не предназначен для определения ролей для всех случаев использования.

Вы не можете просматривать, редактировать или удалять роли, определённые в файле roles.yml, используя пользовательский интерфейс управления ролями или API управления ролями.

Файл roles.yml управляется локально узлом, а не глобально кластером. Это означает, что при работе с типичным кластером из нескольких узлов необходимо внести те же изменения на каждом узле кластера.

Более безопасным подходом было бы внести изменения на одном из узлов и распространить/скопировать изменения roles.yml на все остальные узлы кластера (либо вручную, либо с помощью системы управления конфигурацией, такой как Puppet или Chef).

Следующий фрагмент демонстрирует пример конфигурации файла roles.yml:

click_admins:
  run_as: [ 'clicks_watcher_1' ]
  cluster: [ 'monitor' ]
  indices:
    - names: [ 'events-*' ]
      privileges: [ 'read' ]
      field_security:
        grant: ['category', '@timestamp', 'message' ]
      query: '{"match": {"category": "click"}}'

Elasticsearch непрерывно отслеживает файл roles.yml и автоматически подхватывает и применяет любые изменения в нём.

© 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/defining-roles.html

Spec-Zone.ru

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