权限
Security 插件中的每个权限都控制对 UDB-SX 集群可以执行的某些操作的访问权限,例如索引文档或检查集群健康状况。
大多数权限都是自描述的。例如,cluster:admin/ingest/pipeline/get 允许您检索有关摄取管道的信息。在许多情况下,一个权限对应于特定的 REST API 操作,例如 GET _ingest/pipeline。
尽管存在这种关联,权限并不直接映射到 REST API 操作。像 POST _bulk 和 GET _msearch 这样的操作可以在单个请求中访问许多索引并执行许多操作。即使是一个简单的请求,例如 GET _cat/nodes,也会执行多个操作以生成其响应。
简而言之,控制对 REST API 的访问权限是不够的。相反,Security 插件控制对底层 UDB-SX 操作的访问权限。
例如,考虑以下 _bulk 请求:
POST _bulk
{ "delete": { "_index": "test-index", "_id": "tt2229499" } }
{ "index": { "_index": "test-index", "_id": "tt1979320" } }
{ "title": "Rush", "year": 2013 }
{ "create": { "_index": "test-index", "_id": "tt1392214" } }
{ "title": "Prisoners", "year": 2013 }
{ "update": { "_index": "test-index", "_id": "tt0816711" } }
{ "doc" : { "title": "World War Z" } }
为了使此请求成功,您必须对 test-index 拥有以下权限:
indices:data/write/bulk*
indices:data/write/delete
indices:data/write/index
indices:data/write/update
这些权限还允许您添加、更新或删除文档(例如 PUT test-index/_doc/tt0816711),因为它们控制索引和删除文档的底层 UDB-SX 操作,而不是特定的 API 路径和 HTTP 方法。
测试权限
如果您希望用户拥有执行某些功能所需的最小权限集——最小权限原则——最好的方法是作为新的测试用户向您的集群发送代表性请求。在出现权限错误的情况下,Security 插件会非常明确地指出缺少哪些权限。考虑以下请求和响应:
GET _cat/shards?v
{
"error": {
"root_cause": [{
"type": "security_exception",
"reason": "no permissions for [indices:monitor/stats] and User [name=test-user, backend_roles=[], requestedTenant=null]"
}]
},
"status": 403
}
创建用户和角色,将角色映射到用户,然后开始使用 curl、Postman 或任何其他客户端发送签名的请求。然后,在遇到错误时逐渐向角色添加权限。即使在解决一个权限错误之后,同一个请求也可能产生新的错误;插件只返回它遇到的第一个错误,因此请继续尝试直到请求成功。
通常,您可以使用默认操作组的组合来实现所需的安全态势,而不是单独使用各个权限。有关每个组授予的权限描述,请参阅默认操作组。
系统索引权限
系统索引权限在其他权限中是独特的,因为它们将一些传统上仅管理员可访问的权限扩展到了非管理员用户。这些权限使普通用户能够修改其映射到的角色中指定的任何系统索引。此规则的例外是安全系统索引 .opendistro_security,它用于存储 Security 插件的配置 YAML 文件,并且仅对拥有管理员证书的管理员可访问。
与标准索引权限一样,您可以在 roles.yml 配置文件的 index_permissions 下指定系统索引权限(请参阅 roles.yml)。这涉及两个步骤:
在
index_patterns部分添加系统索引;在角色的
allowed_actions部分指定system:admin/system_index。
例如,允许用户修改存储 Alerting 插件配置的系统索引的系统索引权限由索引模式 .opendistro-alerting-config 定义,其允许的操作定义为 system:admin/system_index。以下角色显示了如何将此系统索引权限与其他属性一起配置:
alerting-role:
reserved: true
hidden: false
cluster_permissions:
- 'cluster:admin/opendistro/alerting/alerts/ack'
- 'cluster:admin/opendistro/alerting/alerts/get'
index_permissions:
- index_patterns:
- .opendistro-alerting-config
- allowed_actions:
- 'system:admin/system_index'
系统索引权限也适用于通配符,以包含部分系统索引名称的所有变体。这可能很有用,但应谨慎使用,以避免意外授予对系统索引的访问权限。在为角色指定系统索引时,请记住以下注意事项:
指定系统索引的完整名称仅限制对该索引的访问:
.opendistro-alerting-config。指定系统索引的部分名称和通配符将授予对所有以该名称开头的系统索引的访问权限:
.opendistro-anomaly-detector*。使用
*作为索引模式,并将system:admin/system_index作为允许的操作,将授予对所有系统索引的访问权限。单独在
allowed_actions下输入通配符*不会自动授予对系统索引的访问权限。必须显式添加允许的操作system:admin/system_index。
以下示例显示了一个授予对所有系统索引访问权限的角色:
index_permissions:
- index_patterns:
- '*'
- allowed_actions:
- 'system:admin/system_index'
验证系统索引访问
您可以使用 CAT indices 操作查看与权限配置中任何索引模式关联的所有索引,并验证权限是否提供了您期望的访问权限。例如,如果您想验证包含以前缀 .kibana 开头的系统索引的权限,可以运行 GET /_cat/indices/.kibana*?v 调用以返回与该前缀关联的所有索引。
以下示例响应显示了与索引模式 .kibana* 关联的三个系统索引:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana_1 XmTePICFRoSNf5O5uLgwRw 1 1 220 0 468.3kb 232.1kb
green open .kibana_2 XmTePICFRoSNf5O5uLgwRw 1 1 220 0 468.3kb 232.1kb
green open .kibana_3 XmTePICFRoSNf5O5uLgwRw 1 1 220 0 468.3kb 232.1kb
启用系统索引权限
拥有 restapi:admin/roles权限的用户能够将系统索引权限映射到所有用户,就像他们在 roles.yml 文件中为集群或索引权限所做的那样。但是,为了保留对此权限的一些控制,plugins.security.system_indices.permission.enabled 设置允许您启用或禁用系统索引权限功能。此设置默认禁用。要启用系统索引权限功能,请将 plugins.security.system_indices.permissions.enabled 设置为 true。
启用此功能并将系统索引权限映射到普通用户,会授予这些用户对可能包含敏感信息和关键集群配置的索引的访问权限。建议在将用户映射到 restapi:admin/roles 时保持谨慎,因为此权限不仅赋予用户将系统索引权限分配给其他用户的能力,还赋予用户自我分配对任何系统索引的访问权限的能力。
忽略权限拒绝错误
如果用户尝试查询多个索引,缺乏其中的一些权限,默认情况下他们会在 UDB-SX Dashboards UI 中收到 error,或者在使用 cURL 或 API 时收到 exception。如果您希望忽略权限拒绝错误,只接收有权限的搜索结果,可以在 config.yml 中将选项 do_not_fail_on_forbidden 设置为 true。请参见以下示例:
_meta:
type: "config"
config_version: 2
config:
dynamic:
http:
anonymous_auth_enabled: false
xff:
enabled: false
internalProxies: "192\\.168\\.0\\.10|192\\.168\\.0\\.11"
do_not_fail_on_forbidden: true
authc:
basic_internal_auth_domain:
...
需要注意的是,如果将此选项设置为 true,则用户接收到的数据看起来像是完整的数据集,是看不到是否有因为权限拒绝而被忽略的数据。
忽略权限拒绝或空结果错误
当用户尝试查看他们缺乏索引权限的可视化图表时,他们将在可视化图表的位置看到 error。要更改此行为以显示 No results displayed because all values equal 0.,您可以在 config.yml 中将 do_not_fail_on_forbidden_empty 设置为 true。此选项仅在 do_not_fail_on_forbidden 也设置为 true 时有效。请参见以下示例:
_meta:
type: "config"
config_version: 2
config:
dynamic:
http:
anonymous_auth_enabled: false
xff:
enabled: false
internalProxies: "192\\.168\\.0\\.10|192\\.168\\.0\\.11"
do_not_fail_on_forbidden: true
do_not_fail_on_forbidden_empty: true
authc:
basic_internal_auth_domain:
...
集群权限
这些权限适用于集群,不能进行细粒度应用。例如,您要么拥有创建快照的权限(cluster:admin/snapshot/create),要么没有。因此,集群权限不能授予用户对一组选定索引创建快照的权限,同时阻止用户对其他索引创建快照。
以下权限中对 API 文档的交叉引用仅旨在帮助理解权限。如本节开头所述,权限通常与 API 相关,但并不直接映射到它们。
集群范围的索引权限
| 权限 | 描述 |
|---|---|
indices:admin/template/delete |
删除索引模板的权限。 |
indices:admin/template/get |
获取索引模板的权限。 |
indices:admin/template/put |
创建索引模板的权限。 |
indices:data/read/scroll |
滚动浏览数据的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/scroll/clear |
清除滚动对象的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/mget |
在一个请求中运行多个 GET 操作的权限。 |
indices:data/read/mget* |
在一个请求中运行多个 GET 操作的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/msearch |
在单个 API 请求中运行多个搜索请求的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/msearch/template |
捆绑多个搜索模板并在单个请求中将其发送到 UDB-SX 集群的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/mtv |
使用单个请求检索多个词项向量的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/mtv* |
使用单个请求检索多个词项向量的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/search/template/render |
渲染搜索模板的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/write/bulk |
运行批量请求的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/write/bulk* |
运行批量请求的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/write/reindex |
运行重新索引操作的权限。 |
摄取 API 权限
cluster:admin/ingest/pipeline/delete
cluster:admin/ingest/pipeline/get
cluster:admin/ingest/pipeline/put
cluster:admin/ingest/pipeline/simulate
cluster:admin/ingest/processor/grok/get
异常检测权限
cluster:admin/opendistro/ad/detector/delete
cluster:admin/opendistro/ad/detector/info
cluster:admin/opendistro/ad/detector/jobmanagement
cluster:admin/opendistro/ad/detector/preview
cluster:admin/opendistro/ad/detector/run
cluster:admin/opendistro/ad/detector/search
cluster:admin/opendistro/ad/detector/stats
cluster:admin/opendistro/ad/detector/write
cluster:admin/opendistro/ad/detector/validate
cluster:admin/opendistro/ad/detectors/get
cluster:admin/opendistro/ad/result/search
cluster:admin/opendistro/ad/result/topAnomalies
cluster:admin/opendistro/ad/tasks/search
告警权限
cluster:admin/opendistro/alerting/alerts/ack
cluster:admin/opendistro/alerting/alerts/get
cluster:admin/opendistro/alerting/destination/delete
cluster:admin/opendistro/alerting/destination/email_account/delete
cluster:admin/opendistro/alerting/destination/email_account/get
cluster:admin/opendistro/alerting/destination/email_account/search
cluster:admin/opendistro/alerting/destination/email_account/write
cluster:admin/opendistro/alerting/destination/email_group/delete
cluster:admin/opendistro/alerting/destination/email_group/get
cluster:admin/opendistro/alerting/destination/email_group/search
cluster:admin/opendistro/alerting/destination/email_group/write
cluster:admin/opendistro/alerting/destination/get
cluster:admin/opendistro/alerting/destination/write
cluster:admin/opendistro/alerting/monitor/delete
cluster:admin/opendistro/alerting/monitor/execute
cluster:admin/opendistro/alerting/monitor/get
cluster:admin/opendistro/alerting/monitor/search
cluster:admin/opendistro/alerting/monitor/write
cluster:admin/udbsx/alerting/remote/indexes/get
异步搜索权限
cluster:admin/opendistro/asynchronous_search/stats
cluster:admin/opendistro/asynchronous_search/delete
cluster:admin/opendistro/asynchronous_search/get
cluster:admin/opendistro/asynchronous_search/submit
索引状态管理权限
cluster:admin/opendistro/ism/managedindex/add
cluster:admin/opendistro/ism/managedindex/change
cluster:admin/opendistro/ism/managedindex/remove
cluster:admin/opendistro/ism/managedindex/explain
cluster:admin/opendistro/ism/managedindex/retry
cluster:admin/opendistro/ism/policy/write
cluster:admin/opendistro/ism/policy/get
cluster:admin/opendistro/ism/policy/search
cluster:admin/opendistro/ism/policy/delete
索引卷权限
cluster:admin/opendistro/rollup/index
cluster:admin/opendistro/rollup/get
cluster:admin/opendistro/rollup/search
cluster:admin/opendistro/rollup/delete
cluster:admin/opendistro/rollup/start
cluster:admin/opendistro/rollup/stop
cluster:admin/opendistro/rollup/explain
报告权限
cluster:admin/opendistro/reports/definition/create
cluster:admin/opendistro/reports/definition/update
cluster:admin/opendistro/reports/definition/on_demand
cluster:admin/opendistro/reports/definition/delete
cluster:admin/opendistro/reports/definition/get
cluster:admin/opendistro/reports/definition/list
cluster:admin/opendistro/reports/instance/list
cluster:admin/opendistro/reports/instance/get
cluster:admin/opendistro/reports/menu/download
转换作业权限
cluster:admin/opendistro/transform/index
cluster:admin/opendistro/transform/get
cluster:admin/opendistro/transform/preview
cluster:admin/opendistro/transform/delete
cluster:admin/opendistro/transform/start
cluster:admin/opendistro/transform/stop
cluster:admin/opendistro/transform/explain
可观察性权限
cluster:admin/udbsx/observability/create
cluster:admin/udbsx/observability/update
cluster:admin/udbsx/observability/delete
cluster:admin/udbsx/observability/get
跨集群复制
cluster:admin/plugins/replication/autofollow/update
重新索引
cluster:admin/reindex/rethrottle
快照存储库权限
cluster:admin/repository/delete
cluster:admin/repository/get
cluster:admin/repository/put
cluster:admin/repository/verify
重新路由
cluster:admin/reroute
脚本权限
cluster:admin/script/delete
cluster:admin/script/get
cluster:admin/script/put
更新设置权限
cluster:admin/settings/update
快照权限
cluster:admin/snapshot/create
cluster:admin/snapshot/delete
cluster:admin/snapshot/get
cluster:admin/snapshot/restore
cluster:admin/snapshot/status
cluster:admin/snapshot/status*
任务权限
cluster:admin/tasks/cancel
cluster:admin/tasks/test
cluster:admin/tasks/testunblock
数据源权限
cluster:admin/udbsx/ql/datasources/create
cluster:admin/udbsx/ql/datasources/read
cluster:admin/udbsx/ql/datasources/update
cluster:admin/udbsx/ql/datasources/delete
cluster:admin/udbsx/ql/datasources/patch
cluster:admin/udbsx/ql/async_query/create
cluster:admin/udbsx/ql/async_query/result
cluster:admin/udbsx/ql/async_query/delete
安全分析权限
| 权限 | 描述 |
|---|---|
| cluster:admin/udbsx/securityanalytics/alerts/get | 获取警报的权限 |
| cluster:admin/udbsx/securityanalytics/alerts/ack | 确认警报的权限 |
| cluster:admin/udbsx/securityanalytics/detector/get | 获取检测器的权限 |
| cluster:admin/udbsx/securityanalytics/detector/search | 搜索检测器的权限 |
| cluster:admin/udbsx/securityanalytics/detector/write | 创建和更新检测器的权限 |
| cluster:admin/udbsx/securityanalytics/detector/delete | 删除检测器的权限 |
| cluster:admin/udbsx/securityanalytics/findings/get | 获取发现的权限 |
| cluster:admin/udbsx/securityanalytics/mapping/get | 按索引获取字段映射的权限 |
| cluster:admin/udbsx/securityanalytics/mapping/view/get | 按索引获取字段映射并查看映射和未映射字段的权限 |
| cluster:admin/udbsx/securityanalytics/mapping/create | 创建字段映射的权限 |
| cluster:admin/udbsx/securityanalytics/mapping/update | 更新字段映射的权限 |
| cluster:admin/udbsx/securityanalytics/rules/categories | 获取所有规则类别的权限 |
| cluster:admin/udbsx/securityanalytics/rule/write | 创建和更新规则的权限 |
| cluster:admin/udbsx/securityanalytics/rule/search | 搜索规则的权限 |
| cluster:admin/udbsx/securityanalytics/rules/validate | 验证规则的权限 |
| cluster:admin/udbsx/securityanalytics/rule/delete | 删除规则的权限 |
监控权限
用于监控集群的集群权限适用于只读操作,例如检查集群健康状况和获取节点使用情况或集群中正在运行的任务的信息。
cluster:monitor/allocation/explain
cluster:monitor/health
cluster:monitor/main
cluster:monitor/nodes/hot_threads
cluster:monitor/nodes/info
cluster:monitor/nodes/liveness
cluster:monitor/nodes/stats
cluster:monitor/nodes/usage
cluster:monitor/remote/info
cluster:monitor/state
cluster:monitor/stats
cluster:monitor/task
cluster:monitor/task/get
cluster:monitor/tasks/lists
索引模板
索引模板权限适用于索引,但全局应用于集群。
indices:admin/index_template/delete
indices:admin/index_template/get
indices:admin/index_template/put
indices:admin/index_template/simulate
indices:admin/index_template/simulate_index
索引权限
这些权限适用于一个索引或索引模式。您可能希望用户对所有索引(即 *)具有读取权限,但只对少数几个索引(例如 web-logs 和 product-catalog)具有写入权限。
| 权限 | 描述 |
|---|---|
indices:admin/aliases |
索引别名的权限。 |
indices:admin/aliases/get |
获取索引别名的权限。 |
indices:admin/analyze |
使用分析 API 的权限。 |
indices:admin/cache/clear |
清除缓存的权限。 |
indices:admin/close |
关闭索引的权限。 |
indices:admin/close* |
关闭索引的权限。 |
indices:admin/create |
创建索引的权限。 |
indices:admin/data_stream/create |
创建数据流的权限。 |
indices:admin/data_stream/delete |
删除数据流的权限。 |
indices:admin/data_stream/get |
获取数据流的权限。 |
indices:admin/delete |
删除索引的权限。 |
indices:admin/exists |
使用存在查询的权限。 |
indices:admin/flush |
刷新索引的权限。 |
indices:admin/flush* |
刷新索引的权限。 |
indices:admin/forcemerge |
强制合并索引和数据流的权限。 |
indices:admin/get |
获取索引和映射的权限。 |
indices:admin/mapping/put |
向索引添加新映射和字段的权限。 |
indices:admin/mappings/fields/get |
获取映射字段的权限。 |
indices:admin/mappings/fields/get* |
获取映射字段的权限。 |
indices:admin/mappings/get |
获取映射的权限。 |
indices:admin/open |
打开索引的权限。 |
indices:admin/plugins/replication/index/setup/validate |
验证与远程集群的连接的权限。 |
indices:admin/plugins/replication/index/start |
启动跨集群复制的权限。 |
indices:admin/plugins/replication/index/pause |
暂停跨集群复制的权限。 |
indices:admin/plugins/replication/index/resume |
恢复跨集群复制的权限。 |
indices:admin/plugins/replication/index/stop |
停止跨集群复制的权限。 |
indices:admin/plugins/replication/index/update |
更新跨集群复制设置的权限。 |
indices:admin/plugins/replication/index/status_check |
检查跨集群复制状态的权限。 |
indices:admin/refresh |
使用索引刷新 API 的权限。 |
indices:admin/refresh* |
使用索引刷新 API 的权限。 |
indices:admin/resolve/index |
解析索引名称、索引别名和数据流的权限。 |
indices:admin/rollover |
执行索引滚动的权限。 |
indices:admin/seq_no/global_checkpoint_sync |
执行全局检查点同步的权限。 |
indices:admin/settings/update |
更新索引设置的权限。 |
indices:admin/shards/search_shards |
执行跨集群搜索的权限。 |
indices:admin/upgrade |
管理员执行升级的权限。 |
indices:admin/validate/query |
验证特定查询的权限。 |
indices:data/read/explain |
运行Explain API 的权限。 |
indices:data/read/field_caps |
运行字段能力 API 的权限。 |
indices:data/read/field_caps* |
运行字段能力 API 的权限。 |
indices:data/read/get |
读取索引数据的权限。 |
indices:data/read/mget |
在一个请求中运行多个 GET 操作的权限。 |
indices:data/read/mget* |
在一个请求中运行多个 GET 操作的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/msearch |
在单个请求中运行多个搜索 请求的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/msearch/template |
捆绑多个搜索模板并在单个请求中将其发送到 UDB-SX 集群的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/mtv |
使用单个请求检索多个词项向量的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/mtv* |
使用单个请求检索多个词项向量的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/plugins/replication/file_chunk |
检查段复制期间文件的权限。 |
indices:data/read/plugins/replication/changes |
更改段复制设置的权限。 |
indices:data/read/scroll |
滚动浏览数据的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/scroll/clear |
清除滚动对象的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/read/search |
搜索数据的权限。 |
indices:data/read/search* |
搜索数据的权限。 |
indices:data/read/search/template |
读取搜索模板的权限。 |
indices:data/read/tv |
检索特定文档字段中词项信息和统计数据的权限。 |
indices:data/write/delete |
删除文档的权限。 |
indices:data/write/delete/byquery |
删除所有匹配查询的文档的权限。 |
indices:data/write/plugins/replication/changes |
在索引内更改数据复制配置和设置的权限。 |
indices:data/write/bulk |
运行批量请求的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/write/bulk* |
运行批量请求的权限。此设置必须同时配置为集群和索引级别的权限。 |
indices:data/write/index |
向现有索引添加文档的权限。 |
indices:data/write/update |
更新索引的权限。 |
indices:data/write/update/byquery |
运行脚本以更新所有匹配查询的文档的权限。 |
indices:monitor/data_stream/stats |
流式传输统计数据的权限。 |
indices:monitor/recovery |
访问恢复统计数据的权限。 |
indices:monitor/segments |
访问段统计数据的权限。 |
indices:monitor/settings/get |
获取监控设置的权限。 |
indices:monitor/shard_stores |
访问分片存储统计数据的权限。 |
indices:monitor/stats |
访问监控统计数据的权限。 |
indices:monitor/upgrade |
访问升级统计数据的权限。 |
Security REST 权限
允许访问这些端点可能会触发集群中的操作更改。请谨慎操作。
以下 REST API 权限控制对端点的访问。授予对任何这些 API 的访问权限将允许用户更改 Security 插件的基本操作组件:
restapi:admin/actiongroups
restapi:admin/allowlist
restapi:admin/internalusers
restapi:admin/nodesdn
restapi:admin/roles
restapi:admin/rolesmapping
restapi:admin/ssl/certs/info
restapi:admin/ssl/certs/reload
restapi:admin/tenants