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
}
} | Сопоставления, в которых | |
| Метаданные необязательны. |
Успешный вызов возвращает JSON-структуру, которая показывает, была ли создана или обновлена запись.
{
"role_mapping" : {
"created" : true
}
} | При обновлении существующего сопоставления |
В следующем примере роли "пользователь" и "администратор" назначаются конкретным пользователям:
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 | |
| Поскольку шаблон генерирует 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
} | Поскольку невозможно указать как |
© 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