创建或更新应用程序权限 API

编辑

创建或更新应用程序权限 API

编辑

添加或更新应用程序权限

请求

编辑

POST /_security/privilege

PUT /_security/privilege

先决条件

编辑

要使用此 API,您必须具有以下任一权限:

  • manage_security 集群权限(或更高的权限,例如 all);
  • 请求中引用的应用程序的“管理应用程序权限”全局权限

描述

编辑

此 API 创建或更新权限。要删除权限,请使用删除应用程序权限 API

有关详细信息,请参阅应用程序权限

要检查用户的应用程序权限,请使用具有权限 API

请求体

编辑

请求体是一个 JSON 对象,其中字段名称是应用程序名称,每个字段的值是一个对象。此内部对象中的字段是权限名称,每个值是一个包含以下字段的 JSON 对象:

actions
(字符串数组)此权限授予的操作名称列表。此字段必须存在,并且不能是空数组。
metadata
(对象)可选的元数据。在 metadata 对象中,以 _ 开头的键保留供系统使用。

验证

编辑
应用程序名称

应用程序名称由前缀和一个可选的后缀组成,它们符合以下规则:

  • 前缀必须以小写 ASCII 字母开头
  • 前缀必须仅包含 ASCII 字母或数字
  • 前缀的长度必须至少为 3 个字符
  • 如果后缀存在,则必须以 -_ 开头
  • 后缀不能包含以下任何字符:\/*?"<>|,*
  • 名称的任何部分都不能包含空格。
权限名称
权限名称必须以小写 ASCII 字母开头,并且必须仅包含 ASCII 字母和数字以及字符 _-.
操作名称
操作名称可以包含任意数量的可打印 ASCII 字符,并且必须包含以下字符中的至少一个:/*:

响应体

编辑

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

示例

编辑

要添加单个权限,请向 /_security/privilege/ 端点提交 PUT 或 POST 请求。例如

resp = client.security.put_privileges(
    privileges={
        "myapp": {
            "read": {
                "actions": [
                    "data:read/*",
                    "action:login"
                ],
                "metadata": {
                    "description": "Read access to myapp"
                }
            }
        }
    },
)
print(resp)
const response = await client.security.putPrivileges({
  privileges: {
    myapp: {
      read: {
        actions: ["data:read/*", "action:login"],
        metadata: {
          description: "Read access to myapp",
        },
      },
    },
  },
});
console.log(response);
PUT /_security/privilege
{
  "myapp": {
    "read": {
      "actions": [ 
        "data:read/*" , 
        "action:login" ],
        "metadata": { 
          "description": "Read access to myapp"
        }
      }
    }
}

这些字符串在 "myapp" 应用程序中具有意义。Elasticsearch 不会为它们分配任何含义。

此处使用通配符 (*) 意味着此权限授予对所有以 data:read/ 开头的操作的访问权限。Elasticsearch 不会为这些操作分配任何含义。但是,如果请求包含诸如 data:read/usersdata:read/settings 之类的应用程序权限,则具有权限 API会遵守通配符的使用并返回 true

metadata 对象是可选的。

{
  "myapp": {
    "read": {
      "created": true 
    }
  }
}

更新现有权限时,created 设置为 false。

要添加多个权限,请向 /_security/privilege/ 端点提交 POST 请求。例如

resp = client.security.put_privileges(
    privileges={
        "app01": {
            "read": {
                "actions": [
                    "action:login",
                    "data:read/*"
                ]
            },
            "write": {
                "actions": [
                    "action:login",
                    "data:write/*"
                ]
            }
        },
        "app02": {
            "all": {
                "actions": [
                    "*"
                ]
            }
        }
    },
)
print(resp)
const response = await client.security.putPrivileges({
  privileges: {
    app01: {
      read: {
        actions: ["action:login", "data:read/*"],
      },
      write: {
        actions: ["action:login", "data:write/*"],
      },
    },
    app02: {
      all: {
        actions: ["*"],
      },
    },
  },
});
console.log(response);
PUT /_security/privilege
{
  "app01": {
    "read": {
      "actions": [ "action:login", "data:read/*" ]
    },
    "write": {
      "actions": [ "action:login", "data:write/*" ]
    }
  },
  "app02": {
    "all": {
      "actions": [ "*" ]
    }
  }
}

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

{
  "app02": {
    "all": {
      "created": true
    }
  },
  "app01": {
    "read": {
      "created": true
    },
    "write": {
      "created": true
    }
  }
}