Сопоставление пользователей и групп с ролями
Сопоставление ролей поддерживается всеми доменами, кроме native и file.
Домены native и file напрямую назначают роли пользователям. Домены native используют API для управления пользователями. Домены file используют Управление ролями на основе файлов.
Вы можете сопоставить роли с помощью API сопоставления ролей (рекомендуется) или файла сопоставления ролей.
Домены PKI, LDAP, AD, Kerberos, OpenID Connect, JWT и SAML поддерживают API сопоставления ролей. Только домены PKI, LDAP и AD поддерживают файлы сопоставления ролей.
Домены PKI, LDAP, AD, Kerberos, OpenID Connect, JWT и SAML также поддерживают делегированную авторизацию. Вы можете либо сопоставить роли для домена, либо использовать делегированную авторизацию; одновременное использование обоих методов невозможно.
Для использования сопоставления ролей необходимо создать роли и правила сопоставления ролей. Правила сопоставления ролей могут основываться на имени домена, типе домена, имени пользователя, группах, других метаданных пользователя или их комбинациях.
При включенной анонимной авторизации роли анонимного пользователя назначаются и всем остальным пользователям.
Если правила сопоставления ролей созданы с помощью API и файла сопоставления ролей, эти правила объединяются. Один пользователь может обладать ролями, назначенными через API, и другими, назначенными на основе файла сопоставления ролей. Определение сопоставлений ролей можно выполнить через API или настроить их через файлы. Эти два источника сопоставления ролей объединяются в функциях безопасности Elasticsearch, поэтому одному пользователю могут быть назначены некоторые роли через API, а другие — через файлы.
Пользователи без назначенных ролей не будут авторизованы для каких-либо действий. Другими словами, они могут пройти проверку подлинности, но не иметь ролей. Отсутствие ролей означает отсутствие привилегий, а отсутствие привилегий — отсутствие авторизации для отправки запросов.
При назначении ролей пользователям с помощью сопоставления ролей эти роли должны существовать. Существует два источника ролей. Доступные роли должны быть добавлены с помощью API управления ролями или определены в файле ролей. Любой метод сопоставления ролей может использовать любой метод управления ролями. Например, при использовании API сопоставления ролей вы можете сопоставить пользователей с ролями, управляемыми через API, и с ролями, управляемыми через файлы (и наоборот для сопоставления ролей на основе файлов).
Использование API сопоставления ролей
Сопоставления ролей можно определить с помощью API добавления сопоставления ролей.
Использование файлов сопоставления ролей
Для использования сопоставлений ролей на основе файлов необходимо настроить сопоставления в файле YAML и скопировать его на каждый узел кластера. Для этого могут пригодиться инструменты, такие как Puppet или Chef.
По умолчанию файлы сопоставления ролей хранятся в ES_PATH_CONF/role_mapping.yml, где ES_PATH_CONF — это ES_HOME/config (установки zip/tar) или /etc/elasticsearch (установки пакетов). Чтобы указать другое расположение, необходимо настроить параметр files.role_mapping в настройках домена Active Directory, LDAP и PKI в elasticsearch.yml.
В файле сопоставления ролей роли безопасности являются ключами, а группы и пользователи — значениями. Сопоставления могут иметь отношение «многие ко многим». При сопоставлении ролей с группами роли пользователя в этой группе представляют собой комбинацию ролей, назначенных группе, и ролей, назначенных пользователю.
По умолчанию Elasticsearch проверяет файлы сопоставления ролей на наличие изменений каждые 5 секунд. Это поведение можно изменить, изменив параметр resource.reload.interval.high в файле elasticsearch.yml. Поскольку этот параметр является общим для Elasticsearch, изменение его значения может повлиять на другие расписания в системе.
Хотя API сопоставления ролей является предпочтительным способом управления сопоставлениями ролей, использование файла role_mapping.yml становится полезным в нескольких случаях:
- Если вы хотите определить фиксированные сопоставления ролей, которые никто (кроме администратора с физическим доступом к узлам Elasticsearch) не сможет изменить.
- Если администрирование кластера зависит от пользователей из внешних доменов, и этим пользователям необходимо назначение ролей, даже когда кластер находится в состоянии RED. Например, администратор, аутентифицирующийся через LDAP или PKI и получающий административную роль, чтобы выполнить корректирующие действия.
Однако следует отметить, что файл role_mapping.yml предоставляется как минимальная административная функция и не предназначен для определения ролей во всех возможных случаях.
Вы не можете просматривать, редактировать или удалять роли, определенные в файлах сопоставления ролей, с помощью API сопоставления ролей.
Подробные сведения по доменам
Домены Active Directory и LDAP
Для указания пользователей и групп в сопоставлениях ролей используются их уникальные имена (DN). DN — это строка, которая однозначно идентифицирует пользователя или группу, например "cn=John Doe,cn=contractors,dc=example,dc=com".
Функции безопасности Elasticsearch поддерживают только группы безопасности Active Directory. Вы не можете сопоставлять распределительные группы с ролями.
Например, в следующем фрагменте используется метод на основе файлов для сопоставления группы admins с ролью monitoring и сопоставления пользователя John Doe, группы users и группы admins с ролью user.
monitoring: - "cn=admins,dc=example,dc=com" user: - "cn=John Doe,cn=contractors,dc=example,dc=com" - "cn=users,dc=example,dc=com" - "cn=admins,dc=example,dc=com"
| Имя роли. | |
| Уникальное имя группы LDAP или группы безопасности Active Directory. | |
| Уникальное имя пользователя LDAP или Active Directory. |
Вы можете использовать API сопоставления ролей для определения эквивалентных сопоставлений следующим образом:
resp = client.security.put_role_mapping(
name="admins",
roles=[
"monitoring",
"user"
],
rules={
"field": {
"groups": "cn=admins,dc=example,dc=com"
}
},
enabled=True,
)
print(resp) const response = await client.security.putRoleMapping({
name: "admins",
roles: ["monitoring", "user"],
rules: {
field: {
groups: "cn=admins,dc=example,dc=com",
},
},
enabled: true,
});
console.log(response); PUT /_security/role_mapping/admins
{
"roles" : [ "monitoring", "user" ],
"rules" : { "field" : { "groups" : "cn=admins,dc=example,dc=com" } },
"enabled": true
} resp = client.security.put_role_mapping(
name="basic_users",
roles=[
"user"
],
rules={
"any": [
{
"field": {
"dn": "cn=John Doe,cn=contractors,dc=example,dc=com"
}
},
{
"field": {
"groups": "cn=users,dc=example,dc=com"
}
}
]
},
enabled=True,
)
print(resp) const response = await client.security.putRoleMapping({
name: "basic_users",
roles: ["user"],
rules: {
any: [
{
field: {
dn: "cn=John Doe,cn=contractors,dc=example,dc=com",
},
},
{
field: {
groups: "cn=users,dc=example,dc=com",
},
},
],
},
enabled: true,
});
console.log(response); PUT /_security/role_mapping/basic_users
{
"roles" : [ "user" ],
"rules" : { "any" : [
{ "field" : { "dn" : "cn=John Doe,cn=contractors,dc=example,dc=com" } },
{ "field" : { "groups" : "cn=users,dc=example,dc=com" } }
] },
"enabled": true
} Домены PKI
Домены PKI поддерживают сопоставление пользователей с ролями, но сопоставление групп недоступно, поскольку в домене PKI нет понятия группы.
Вот пример использования сопоставления на основе файла:
monitoring: - "cn=Admin,ou=example,o=com" user: - "cn=John Doe,ou=example,o=com"
Следующий пример создаёт эквивалентные сопоставления с помощью API:
resp = client.security.put_role_mapping(
name="admin_user",
roles=[
"monitoring"
],
rules={
"field": {
"dn": "cn=Admin,ou=example,o=com"
}
},
enabled=True,
)
print(resp) const response = await client.security.putRoleMapping({
name: "admin_user",
roles: ["monitoring"],
rules: {
field: {
dn: "cn=Admin,ou=example,o=com",
},
},
enabled: true,
});
console.log(response); PUT /_security/role_mapping/admin_user
{
"roles" : [ "monitoring" ],
"rules" : { "field" : { "dn" : "cn=Admin,ou=example,o=com" } },
"enabled": true
} resp = client.security.put_role_mapping(
name="basic_user",
roles=[
"user"
],
rules={
"field": {
"dn": "cn=John Doe,ou=example,o=com"
}
},
enabled=True,
)
print(resp) const response = await client.security.putRoleMapping({
name: "basic_user",
roles: ["user"],
rules: {
field: {
dn: "cn=John Doe,ou=example,o=com",
},
},
enabled: true,
});
console.log(response); PUT /_security/role_mapping/basic_user
{
"roles" : [ "user" ],
"rules" : { "field" : { "dn" : "cn=John Doe,ou=example,o=com" } },
"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/8.17/mapping-roles.html