API профиля пользователя «Имеет ли привилегии»
Функция профиля пользователя предназначена только для использования Kibana и решений Elastic Observability, Enterprise Search и Elastic Security. Пользователи и внешние приложения не должны вызывать этот API напрямую. Elastic оставляет за собой право изменять или удалять эту функцию в будущих выпусках без предварительного уведомления.
Определяет, имеют ли пользователи, связанные с указанными идентификаторами профилей пользователей, все запрошенные привилегии.
Запрос
GET /_security/profile/_has_privileges
POST /_security/profile/_has_privileges
Предварительные условия
Для использования этого API у вас должна быть по крайней мере read_security привилегия кластера (или более высокая привилегия, например, manage_user_profile или manage_security).
Описание
Этот API использует идентификаторы профилей, возвращаемые API активации профиля пользователя, для идентификации пользователей, для которых необходимо проверить привилегии. Он похож на API «Имеет ли привилегии», но в отличие от него этот API проверяет привилегии других пользователей, а не пользователя, его вызывающего.
См. Привилегии безопасности для списка привилегий, которые могут быть указаны в этом API.
Успешный вызов возвращает подмножество списка идентификаторов профилей, которые обладают всеми запрошенными привилегиями.
Тело запроса
-
uids - (список) Список идентификаторов профилей. Привилегии проверяются для пользователей, связанных с профилями.
-
privileges -
Объект, содержащий все проверяемые привилегии.
-
cluster - (список) Список привилегий кластера, которые необходимо проверить.
-
index -
-
names - (список) Список индексов.
-
allow_restricted_indices - (Булево) Это необходимо установить в
true(по умолчаниюfalse), если используются подстановочные знаки или регулярные выражения для шаблонов, охватывающих ограниченные индексы. Неявно, ограниченные индексы не соответствуют шаблонам индексов, так как ограниченные индексы обычно имеют ограниченные привилегии, и их включение в тесты шаблонов сделает большинство таких тестовfalse. Если ограниченные индексы явно включены в списокnames, привилегии будут проверяться в отношении их независимо от значенияallow_restricted_indices. -
privileges - (список) Список привилегий, которые необходимо проверить для указанных индексов.
-
-
application -
-
application - (строка) Название приложения.
-
privileges - (список) Список привилегий, которые необходимо проверить для указанных ресурсов. Может быть либо именами привилегий приложения, либо именами действий, предоставляемых этими привилегиями.
-
resources - (список) Список имен ресурсов, в отношении которых необходимо проверить привилегии.
-
-
Обратите внимание, что раздел privileges выше идентичен телу запроса другого API «Имеет ли привилегии».
Тело ответа
Успешный вызов API профиля пользователя «Имеет ли привилегии» возвращает JSON-структуру, содержащую два поля:
-
has_privilege_uids - (список) Подмножество запрошенных идентификаторов профилей пользователей, которые обладают всеми запрошенными привилегиями.
-
errors -
(объект) Ошибки, возникшие при выполнении запроса. Это поле отсутствует, если ошибки нет. Оно не включает идентификаторы профилей пользователей, которые не обладают всеми запрошенными привилегиями.
Свойства объектов в
errors-
count - (число) Общее количество ошибок
-
details - (объект) Подробный отчет об ошибках, в котором ключами являются идентификаторы профилей, а значениями — точные ошибки.
-
Примеры
В следующем примере проверяется, обладают ли два пользователя, связанные с указанными профилями, всем набором запрошенных привилегий кластера, индекса и приложения:
resp = client.security.has_privileges_user_profile(
uids=[
"u_LQPnxDxEjIH0GOUoFkZr5Y57YUwSkL9Joiq-g4OCbPc_0",
"u_rzRnxDgEHIH0GOUoFkZr5Y27YUwSk19Joiq=g4OCxxB_1",
"u_does-not-exist_0"
],
privileges={
"cluster": [
"monitor",
"create_snapshot",
"manage_ml"
],
"index": [
{
"names": [
"suppliers",
"products"
],
"privileges": [
"create_doc"
]
},
{
"names": [
"inventory"
],
"privileges": [
"read",
"write"
]
}
],
"application": [
{
"application": "inventory_manager",
"privileges": [
"read",
"data:write/inventory"
],
"resources": [
"product/1852563"
]
}
]
},
)
print(resp) const response = await client.security.hasPrivilegesUserProfile({
uids: [
"u_LQPnxDxEjIH0GOUoFkZr5Y57YUwSkL9Joiq-g4OCbPc_0",
"u_rzRnxDgEHIH0GOUoFkZr5Y27YUwSk19Joiq=g4OCxxB_1",
"u_does-not-exist_0",
],
privileges: {
cluster: ["monitor", "create_snapshot", "manage_ml"],
index: [
{
names: ["suppliers", "products"],
privileges: ["create_doc"],
},
{
names: ["inventory"],
privileges: ["read", "write"],
},
],
application: [
{
application: "inventory_manager",
privileges: ["read", "data:write/inventory"],
resources: ["product/1852563"],
},
],
},
});
console.log(response); POST /_security/profile/_has_privileges
{
"uids": [
"u_LQPnxDxEjIH0GOUoFkZr5Y57YUwSkL9Joiq-g4OCbPc_0",
"u_rzRnxDgEHIH0GOUoFkZr5Y27YUwSk19Joiq=g4OCxxB_1",
"u_does-not-exist_0"
],
"privileges": {
"cluster": [ "monitor", "create_snapshot", "manage_ml" ],
"index" : [
{
"names": [ "suppliers", "products" ],
"privileges": [ "create_doc"]
},
{
"names": [ "inventory" ],
"privileges" : [ "read", "write" ]
}
],
"application": [
{
"application": "inventory_manager",
"privileges" : [ "read", "data:write/inventory" ],
"resources" : [ "product/1852563" ]
}
]
}
} Следующий пример вывода показывает, что только один из трех пользователей обладает всеми привилегиями, а один из них не найден:
{
"has_privilege_uids": ["u_rzRnxDgEHIH0GOUoFkZr5Y27YUwSk19Joiq=g4OCxxB_1"],
"errors": {
"count": 1,
"details": {
"u_does-not-exist_0": {
"type": "resource_not_found_exception",
"reason": "profile document not found"
}
}
}
}
© 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/security-api-has-privileges-user-profile.html