定义角色
编辑定义角色
编辑一个角色由以下 JSON 结构定义
{ "run_as": [ ... ], "cluster": [ ... ], "global": { ... }, "indices": [ ... ], "applications": [ ... ], "remote_indices": [ ... ], "remote_cluster": [ ... ], "metadata": { ... }, "description": "..." }
此角色的所有者可以模拟的用户名的列表。 |
|
集群权限的列表。这些权限定义了拥有此角色的用户可以执行的集群级操作。此字段是可选的(缺少 |
|
定义全局权限的对象。全局权限是一种请求敏感的集群权限形式。标准的集群权限仅基于正在执行的操作进行授权决策。全局权限还会考虑请求中包含的参数。目前,对全局权限的支持仅限于管理应用程序权限。此字段是可选的。 |
|
索引权限条目的列表。此字段是可选的(缺少 |
|
应用程序权限条目的列表。此字段是可选的。 |
|
用于使用基于 API 密钥的模型配置的远程集群的索引权限条目的列表。此字段是可选的(缺少 |
|
用于使用基于 API 密钥的模型配置的远程集群的集群权限条目的列表。此字段是可选的(缺少 |
|
与角色关联的元数据字段,例如 |
|
带有角色描述文本的字符串值。它的最大长度为 |
角色名称必须至少为 1 个字符,且不超过 507 个字符。它们可以包含字母数字字符(a-z
、A-Z
、0-9
)、空格、标点符号以及 基本拉丁语(ASCII)块中的可打印符号。不允许前导或尾随空格。
索引权限
编辑以下描述索引权限条目的结构
{ "names": [ ... ], "privileges": [ ... ], "field_security" : { ... }, "query": "...", "allow_restricted_indices": false }
此条目中的权限适用的数据流、索引和别名的列表。支持通配符( |
|
角色所有者在 |
|
角色所有者拥有读取访问权限的文档字段的规范。有关详细信息,请参阅设置字段和文档级安全性。 |
|
定义角色所有者具有读取访问权限的文档的搜索查询。关联数据流和索引中的文档必须与此查询匹配,才能被角色所有者访问。 |
|
受限索引是一类特殊的索引,它们在内部用于存储配置数据,不应直接访问。通常,只有内部系统角色才应授予对受限索引的权限。 强烈不建议切换此标志,因为它可能会有效地授予对关键数据的无限制操作,从而使整个系统不稳定或泄漏敏感信息。 但是,如果出于管理目的,您需要创建一个具有涵盖受限索引的权限的角色,则必须将此字段设置为 |
names
参数接受通配符和正则表达式,它们可以引用多个数据流、索引和别名。
- 通配符(默认)- 简单的通配符匹配,其中
*
是零个或多个字符的占位符,?
是单个字符的占位符,\
可用作转义字符。 - 正则表达式 - 一种更强大的语法,用于匹配更复杂的模式。此正则表达式基于 Lucene 的 regexp 自动机语法。要启用此语法,必须将其包裹在一对正斜杠 (
/
) 中。任何以/
开头且不以/
结尾的模式都被认为是格式错误的。
正则表达式示例。
"foo-bar": # match the literal `foo-bar` "foo-*": # match anything beginning with "foo-" "logstash-201?-*": # ? matches any one character "/.*-201[0-9]-.*/": # use a regex to match anything containing 2010-2019 "/foo": # syntax error - missing final /
全局权限
编辑以下描述全局权限条目的结构
应用程序权限
编辑以下描述应用程序权限条目的结构
应用程序的名称。 |
|
要授予此角色的应用程序权限的名称列表。 |
|
这些权限适用的资源。它们以与 |
有关这些字段的验证规则的详细信息,请参阅添加应用程序权限 API。
角色可以引用不存在的应用程序权限 - 也就是说,它们尚未通过添加应用程序权限 API 定义(或者它们已定义,但此后已被删除)。在这种情况下,该权限无效,并且不会在拥有权限 API 中授予任何操作。
远程索引权限
编辑对于使用基于 API 密钥的模型配置的远程集群,远程索引权限可用于指定匹配远程集群的所需索引权限。最终有效的索引权限将是远程索引权限和跨集群 API 密钥的索引权限的交集。
远程索引对使用基于 API 密钥的模型配置的远程集群有效。它们对使用基于证书的模型配置的远程集群无效。
与索引权限条目相比,远程索引权限条目具有一个额外的强制 clusters
字段。否则,两者的结构相同。以下描述远程索引权限条目的结构
{ "clusters": [ ... ], "names": [ ... ], "privileges": [ ... ], "field_security" : { ... }, "query": "...", "allow_restricted_indices": false }
此条目中的权限适用的数据流、索引和别名的列表。支持通配符( |
|
角色所有者在 |
|
角色所有者拥有读取访问权限的文档字段的规范。有关详细信息,请参阅设置字段和文档级安全性。 |
|
定义角色所有者具有读取访问权限的文档的搜索查询。关联数据流和索引中的文档必须与此查询匹配,才能被角色所有者访问。 |
|
受限索引是一类特殊的索引,它们在内部用于存储配置数据,不应直接访问。通常,只有内部系统角色才应授予对受限索引的权限。 强烈不建议切换此标志,因为它可能会有效地授予对关键数据的无限制操作,从而使整个系统不稳定或泄漏敏感信息。 但是,如果出于管理目的,您需要创建一个具有涵盖受限索引的权限的角色,则必须将此字段设置为 |
远程集群权限
编辑对于使用基于 API 密钥的模型配置的远程集群,远程集群权限可用于指定匹配远程集群的其他集群权限。
远程集群权限仅对使用基于 API 密钥的模型配置的远程集群有效。它们对使用基于证书的模型配置的远程集群无效。
以下描述远程集群权限条目的结构
示例
编辑以下代码段显示了 clicks_admin
角色的示例定义
resp = client.security.put_role( name="clicks_admin", run_as=[ "clicks_watcher_1" ], cluster=[ "monitor" ], indices=[ { "names": [ "events-*" ], "privileges": [ "read" ], "field_security": { "grant": [ "category", "@timestamp", "message" ] }, "query": "{\"match\": {\"category\": \"click\"}}" } ], ) print(resp)
const response = await client.security.putRole({ name: "clicks_admin", run_as: ["clicks_watcher_1"], cluster: ["monitor"], indices: [ { names: ["events-*"], privileges: ["read"], field_security: { grant: ["category", "@timestamp", "message"], }, query: '{"match": {"category": "click"}}', }, ], }); console.log(response);
POST /_security/role/clicks_admin { "run_as": [ "clicks_watcher_1" ], "cluster": [ "monitor" ], "indices": [ { "names": [ "events-*" ], "privileges": [ "read" ], "field_security" : { "grant" : [ "category", "@timestamp", "message" ] }, "query": "{\"match\": {\"category\": \"click\"}}" } ] }
根据上述定义,拥有 clicks_admin
角色的用户可以
- 模拟
clicks_watcher_1
用户并代表其执行请求。 - 监视 Elasticsearch 集群
- 从所有以
events-
为前缀的索引中读取数据 - 在这些索引中,仅读取
click
类别的事件 - 在这些文档中,仅读取
category
、@timestamp
和message
字段。
有关可用集群和索引权限的完整列表
有两种可用的机制来定义角色:使用 角色管理 API 或 Elasticsearch 节点上的本地文件。您还可以实现自定义角色提供程序。如果您需要与另一个系统集成以检索用户角色,则可以构建自定义角色提供程序插件。有关更多信息,请参阅自定义角色和授权。
角色管理 UI
编辑您可以在 Kibana 中轻松管理用户和角色。要管理角色,请登录 Kibana 并转到管理 / 安全 / 角色。
角色管理 API
编辑角色管理 API 使您能够动态地添加、更新、删除和检索角色。当您使用 API 管理 native
域中的角色时,这些角色会存储在内部的 Elasticsearch 索引中。有关更多信息和示例,请参阅角色。
基于文件的角色管理
编辑除了角色管理 API 之外,角色还可以在位于 ES_PATH_CONF
中的本地 roles.yml
文件中定义。这是一个 YAML 文件,其中每个角色定义都以其名称为键。
如果在 roles.yml
文件和通过角色管理 API 中使用了相同的角色名称,则将使用文件中找到的角色。
虽然角色管理 API 是定义角色的首选机制,但如果您想定义任何人都无法更改的固定角色(除了具有对 Elasticsearch 节点物理访问权限的管理员之外),使用 roles.yml
文件会很有用。但请注意, roles.yml
文件仅作为最基本管理功能提供,不旨在涵盖和用于定义所有用例的角色。
roles.yml
文件由节点在本地管理,而不是由集群全局管理。这意味着,在一个典型的多节点集群中,需要在集群中的每个节点上应用完全相同的更改。
更安全的方法是在其中一个节点上应用更改,并将 roles.yml
分发/复制到集群中的所有其他节点(手动或使用诸如 Puppet 或 Chef 等配置管理系统)。
以下代码片段显示了 roles.yml
文件配置的示例
click_admins: run_as: [ 'clicks_watcher_1' ] cluster: [ 'monitor' ] indices: - names: [ 'events-*' ] privileges: [ 'read' ] field_security: grant: ['category', '@timestamp', 'message' ] query: '{"match": {"category": "click"}}'
Elasticsearch 会持续监控 roles.yml
文件,并自动获取并应用对其所做的任何更改。