Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›REST API ›API безопасности

API создания или обновления сопоставлений ролей

Создаёт и обновляет сопоставления ролей.

Запрос

POST /_security/role_mapping/<name>

PUT /_security/role_mapping/<name>

Предварительные условия

  • Для использования этого API у вас должна быть, как минимум, привилегия кластера manage_security.

Описание

Сопоставления ролей определяют, какие роли назначаются каждому пользователю. Каждое сопоставление имеет правила, определяющие пользователей, и список ролей, которые предоставляются этим пользователям.

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

Этот API не создаёт роли. Вместо этого он сопоставляет пользователей с существующими ролями. Роли могут быть созданы с помощью API создания или обновления ролей или файлов управления ролями.

Дополнительную информацию см. в разделе Сопоставление пользователей и групп с ролями.

Шаблоны ролей

Наиболее распространённое использование сопоставлений ролей — создание сопоставления от известного значения пользователя до фиксированного имени роли. Например, всем пользователям в группе cn=admin,dc=example,dc=com LDAP должна быть предоставлена роль superuser в Elasticsearch. Для этой цели используется поле roles.

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

Для успешного использования шаблонов ролей необходимо включить соответствующую функцию скриптинга. В противном случае все попытки создать сопоставление ролей с шаблонами ролей завершатся неудачей. См. Настройки разрешённых типов скриптов.

Все доступные поля пользователей в сопоставлении ролей rules также доступны в шаблонах ролей. Таким образом, можно назначить пользователю роль, отражающую его username, его groups или имя realm, с помощью которого он авторизовался.

По умолчанию шаблон оценивается для получения единственной строки, которая является именем роли, которая должна быть назначена пользователю. Если format шаблона установлен на "json", то ожидается, что шаблон сгенерирует строку JSON или массив строк JSON для имён ролей.

Параметры пути

name
(строка) Уникальное имя, идентифицирующее сопоставление ролей. Имя используется только в качестве идентификатора для облегчения взаимодействия через API; оно не влияет на поведение сопоставления никоим образом.

Тело запроса

В теле запроса PUT или POST можно указать следующие параметры, относящиеся к добавлению сопоставления ролей:

enabled
(обязательно, логическое значение) Сопоставления, в которых enabled установлено на false, игнорируются при выполнении сопоставления ролей.
metadata
(объект) Дополнительные метаданные, которые помогают определить, какие роли назначаются каждому пользователю. В объекте metadata ключи, начинающиеся с _, зарезервированы для использования системой.
roles
(список строк) Список имён ролей, которые предоставляются пользователям, соответствующим правилам сопоставления ролей. Должен быть указан ровно один из roles или role_templates.
role_templates
(список объектов) Список шаблонов Mustache, которые будут оценены для определения имён ролей, которые должны быть предоставлены пользователям, соответствующим правилам сопоставления ролей. Формат этих объектов определён ниже. Должен быть указан ровно один из roles или role_templates.
rules
(обязательно, объект) Правила, определяющие, какие пользователи должны соответствовать сопоставлению. Правило — это логическое условие, выраженное с помощью JSON DSL. См. Ресурсы сопоставления ролей.

Примеры

В следующем примере роли "пользователь" назначаются всем пользователям:

POST /_security/role_mapping/mapping1
{
  "roles": [ "user"],
  "enabled": true, 
  "rules": {
    "field" : { "username" : "*" }
  },
  "metadata" : { 
    "version" : 1
  }
}

Сопоставления, в которых enabled установлено на false, игнорируются при выполнении сопоставления ролей.

Метаданные необязательны.

Успешный вызов возвращает JSON-структуру, которая показывает, была ли создана или обновлена запись.

{
  "role_mapping" : {
    "created" : true 
  }
}

При обновлении существующего сопоставления created устанавливается в значение false.

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

POST /_security/role_mapping/mapping2
{
  "roles": [ "user", "admin" ],
  "enabled": true,
  "rules": {
     "field" : { "username" : [ "esadmin01", "esadmin02" ] }
  }
}

Следующий пример подбирает пользователей, авторизовавшихся в определённом домене:

POST /_security/role_mapping/mapping3
{
  "roles": [ "ldap-user" ],
  "enabled": true,
  "rules": {
    "field" : { "realm.name" : "ldap1" }
  }
}

Следующий пример подбирает любого пользователя, у которого либо имя пользователя равно esadmin, либо пользователь принадлежит к группе cn=admin,dc=example,dc=com:

POST /_security/role_mapping/mapping4
{
  "roles": [ "superuser" ],
  "enabled": true,
  "rules": {
    "any": [
      {
        "field": {
          "username": "esadmin"
        }
      },
      {
        "field": {
          "groups": "cn=admins,dc=example,dc=com"
        }
      }
    ]
  }
}

Приведённый выше пример полезен, когда имена групп в вашей системе управления идентификацией (например, Active Directory или SAML Identity Provider) не имеют взаимно однозначного соответствия с именами ролей в Elasticsearch. Сопоставление ролей служит связующим звеном между именем группы и именем роли.

Однако в редких случаях имена ваших групп могут точно совпадать с именами ролей Elasticsearch. Это может быть так, если ваш SAML Identity Provider имеет собственную функцию «сопоставления групп» и может быть настроен на предоставление имён ролей Elasticsearch в атрибутах пользователя SAML.

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

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

POST /_security/role_mapping/mapping5
{
  "role_templates": [
    {
      "template": { "source": "{{#tojson}}groups{{/tojson}}" }, 
      "format" : "json" 
    }
  ],
  "rules": {
    "field" : { "realm.name" : "saml1" }
  },
  "enabled": true
}

Функция Mustache tojson используется для преобразования списка имён групп в допустимый JSON-массив.

Поскольку шаблон генерирует JSON-массив, формат должен быть установлен на json.

Следующий пример подбирает пользователей в определённом поддереве LDAP:

POST /_security/role_mapping/mapping6
{
  "roles": [ "example-user" ],
  "enabled": true,
  "rules": {
    "field" : { "dn" : "*,ou=subtree,dc=example,dc=com" }
  }
}

Следующий пример подбирает пользователей в определённом поддереве LDAP в определённом домене:

POST /_security/role_mapping/mapping7
{
  "roles": [ "ldap-example-user" ],
  "enabled": true,
  "rules": {
    "all": [
      { "field" : { "dn" : "*,ou=subtree,dc=example,dc=com" } },
      { "field" : { "realm.name" : "ldap1" } }
    ]
  }
}

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

  • Полное имя соответствует шаблону *,ou=admin,dc=example,dc=com, или имя пользователя равно es-admin, или имя пользователя равно es-system
  • пользователь принадлежит к группе cn=people,dc=example,dc=com
  • у пользователя нет terminated_date
POST /_security/role_mapping/mapping8
{
  "roles": [ "superuser" ],
  "enabled": true,
  "rules": {
    "all": [
      {
        "any": [
          {
            "field": {
              "dn": "*,ou=admin,dc=example,dc=com"
            }
          },
          {
            "field": {
              "username": [ "es-admin", "es-system" ]
            }
          }
        ]
      },
      {
        "field": {
          "groups": "cn=people,dc=example,dc=com"
        }
      },
      {
        "except": {
          "field": {
            "metadata.terminated_date": null
          }
        }
      }
    ]
  }
}

Шаблонная роль может использоваться для автоматического сопоставления каждого пользователя с его собственной пользовательской ролью. Саму роль можно определить с помощью API ролей или с помощью пользовательского поставщика ролей.

В данном примере каждый пользователь, который авторизуется с помощью домена "cloud-saml", будет автоматически сопоставлен с двумя ролями — ролью "saml_user" и ролью, которая состоит из имени пользователя, опережаемого _user_. Например, пользователь nwong получит роли saml_user и _user_nwong.

POST /_security/role_mapping/mapping9
{
  "rules": { "field": { "realm.name": "cloud-saml" } },
  "role_templates": [
    { "template": { "source" : "saml_user" } }, 
    { "template": { "source" : "_user_{{username}}" } }
  ],
  "enabled": true
}

Поскольку невозможно указать как roles, так и role_templates в одном сопоставлении ролей, мы можем применить роль «фиксированного имени», используя шаблон без подстановок.

© 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/security-api-put-role-mapping.html

Spec-Zone.ru

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