定义角色
编辑定义角色编辑
角色由以下 JSON 结构定义
{ "run_as": [ ... ], "cluster": [ ... ], "global": { ... }, "indices": [ ... ], "applications": [ ... ], "remote_indices": [ ... ] }
此角色所有者可以模拟的用户名的列表。 |
|
集群权限的列表。这些权限定义了拥有此角色的用户能够执行的集群级别操作。此字段是可选的(缺少 |
|
定义全局权限的对象。全局权限是请求敏感的集群权限形式。标准集群权限仅根据正在执行的操作进行授权决策。全局权限还会考虑请求中包含的参数。目前,对全局权限的支持仅限于应用程序权限的管理。此字段是可选的。 |
|
索引权限条目的列表。此字段是可选的(缺少 |
|
应用程序权限条目的列表。此字段是可选的。 |
|
用于使用基于 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 }
数据流、索引和别名的列表,这些列表将应用于此条目中的权限。支持通配符 ( |
|
角色所有者在 |
|
角色所有者具有读取访问权限的文档字段的规范。有关详细信息,请参阅设置字段和文档级别安全性。 |
|
定义角色所有者具有读取访问权限的文档的搜索查询。关联数据流和索引中的文档必须与该查询匹配,才能被角色所有者访问。 |
|
受限索引是用于存储配置数据的特殊索引类别,不应直接访问。通常,只有内部系统角色应该授予对受限索引的权限。强烈建议不要切换此标志,因为它可能有效地授予对关键数据的无限制操作,从而使整个系统不稳定或泄露敏感信息。但是,如果出于管理目的,您需要创建具有涵盖受限索引的权限的角色,则必须将此字段设置为 |
示例编辑
以下代码段显示了 clicks_admin
角色的示例定义
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
文件,并自动获取并应用对它的任何更改。