创建或更新角色 API编辑

在原生领域添加和更新角色。

请求编辑

POST /_security/role/<name>

PUT /_security/role/<name>

先决条件编辑

  • 要使用此 API,您必须至少拥有 manage_security 集群权限。

描述编辑

角色管理 API 通常是管理角色的首选方法,而不是使用 基于文件的角色管理。创建或更新角色 API 无法更新在角色文件中定义的角色。

路径参数编辑

name
(字符串) 角色的名称。

请求正文编辑

以下参数可以在 PUT 或 POST 请求的正文中指定,并与添加角色有关

applications

(列表) 应用程序权限条目的列表。

application (必需)
(字符串) 此条目适用的应用程序的名称
privileges
(列表) 字符串列表,其中每个元素都是应用程序权限或操作的名称。
resources
(列表) 权限应用于的资源列表。
cluster
(列表) 集群权限列表。这些权限定义了拥有此角色的用户能够执行的集群级别操作。
global
(对象) 定义全局权限的对象。全局权限是集群权限的一种形式,它与请求相关。目前,对全局权限的支持仅限于应用程序权限的管理。此字段是可选的。
indices

(列表) 索引权限条目的列表。

field_security
(对象) 角色所有者具有读取权限的文档字段。有关更多信息,请参阅 设置字段和文档级别安全性
names (必需)
(列表) 此条目中权限适用的索引(或索引名称模式)列表。
privileges(必需)
(列表) 角色所有者在指定索引上拥有的索引级别权限。
query
定义角色所有者具有读取权限的文档的搜索查询。指定索引中的文档必须与该查询匹配,才能被角色所有者访问。
metadata
(对象) 可选的元数据。在 metadata 对象中,以 _ 开头的键保留供系统使用。
run_as
(列表) 此角色所有者可以模拟的用户列表。有关更多信息,请参阅 代表其他用户提交请求
remote_indices

(列表) 远程索引权限条目的列表。

远程索引对 使用基于 API 密钥的模型配置的远程集群 有效。它们对使用 基于证书的模型 配置的远程集群没有影响。

clusters (必需)
(列表) 此条目中权限适用的集群别名列表。
field_security
(对象) 角色所有者具有读取权限的文档字段。有关更多信息,请参阅 设置字段和文档级别安全性
names (必需)
(列表) 远程集群(使用 clusters 指定)上此条目中权限适用的索引(或索引名称模式)列表。
privileges(必需)
(列表) 角色所有者在指定索引上拥有的索引级别权限。
query
定义角色所有者具有读取权限的文档的搜索查询。指定索引中的文档必须与该查询匹配,才能被角色所有者访问。

有关更多信息,请参阅 定义角色

示例编辑

以下示例添加了一个名为 my_admin_role 的角色

POST /_security/role/my_admin_role
{
  "cluster": ["all"],
  "indices": [
    {
      "names": [ "index1", "index2" ],
      "privileges": ["all"],
      "field_security" : { // optional
        "grant" : [ "title", "body" ]
      },
      "query": "{\"match\": {\"title\": \"foo\"}}" // optional
    }
  ],
  "applications": [
    {
      "application": "myapp",
      "privileges": [ "admin", "read" ],
      "resources": [ "*" ]
    }
  ],
  "run_as": [ "other_user" ], // optional
  "metadata" : { // optional
    "version" : 1
  }
}

成功的调用将返回一个 JSON 结构,显示角色是否已创建或更新。

{
  "role": {
    "created": true 
  }
}

当更新现有角色时,created 设置为 false。

以下示例配置了一个可以在 JDBC 中运行 SQL 的角色

POST /_security/role/cli_or_drivers_minimal
{
  "cluster": ["cluster:monitor/main"],
  "indices": [
    {
      "names": ["test"],
      "privileges": ["read", "indices:admin/get"]
    }
  ]
}

以下示例配置了一个在远程集群上具有远程索引权限的角色

POST /_security/role/role_with_remote_indices
{
  "remote_indices": [
    {
      "clusters": [ "my_remote" ], 
      "names": ["logs*"], 
      "privileges": ["read", "read_cross_cluster", "view_index_metadata"] 
    }
  ]
}

远程索引权限适用于别名为 my_remote 的远程集群。

为远程集群(my_remote)上与模式 logs* 匹配的索引授予权限。

my_remote 上的 logs* 授予的实际 索引权限