具有权限的用户配置文件 API

编辑

具有权限的用户配置文件 API

编辑

用户配置文件功能仅供 Kibana 以及 Elastic 的可观测性、企业搜索和 Elastic Security 解决方案使用。个人用户和外部应用程序不应直接调用此 API。Elastic 保留在未来版本中更改或删除此功能的权利,恕不另行通知。

确定与指定用户配置文件 ID 关联的用户是否拥有所有请求的权限。

请求

编辑

GET /_security/profile/_has_privileges

POST /_security/profile/_has_privileges

先决条件

编辑

要使用此 API,您必须至少具有 read_security 集群权限(或更大的权限,如 manage_user_profilemanage_security)。

描述

编辑

此 API 使用 激活用户配置文件 返回的配置文件 ID 来标识要检查其权限的用户。它类似于具有权限 API,但与它不同的是,此 API 检查其他用户的权限,而不是调用它的用户的权限。

请参阅 安全权限,以获取可以在此 API 中指定的权限列表。

成功调用会返回具有 所有 请求权限的配置文件 ID 的子集列表。

请求体

编辑
uids
(列表) 配置文件 ID 的列表。将检查与配置文件关联的用户的权限。
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
(列表) 具有 所有 请求权限的用户的请求配置文件 ID 的子集。
errors

(对象) 在满足请求时遇到的错误。 如果没有错误,则此字段不存在。 它包括不具有所有请求权限的用户的配置文件 ID。

errors 中对象的属性
count
(数字) 错误总数
details
(对象) 详细错误报告,其中键是配置文件 ID,值是确切的错误。

示例

编辑

以下示例检查与指定配置文件关联的两个用户是否具有所有请求的集群、索引和应用程序权限

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"
      }
    }
  }
}