权限
安全插件中的每个权限都控制着 OpenSearch 集群可以执行的某些操作的访问权限,例如索引文档或检查集群健康状况。
大多数权限都是自描述的。例如,cluster:admin/ingest/pipeline/get
允许您检索有关摄入管道的信息。在许多情况下,权限与特定的 REST API 操作(例如 GET _ingest/pipeline
)相关联。
尽管存在这种关联,但权限并**不**直接映射到 REST API 操作。诸如 POST _bulk
和 GET _msearch
之类的操作可以在单个请求中访问多个索引并执行多项操作。即使是像 GET _cat/nodes
这样的简单请求,也会执行多个操作以生成其响应。
简而言之,仅控制 REST API 的访问权限是不够的。相反,安全插件控制对底层 OpenSearch 操作的访问。
例如,考虑以下 _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
),因为它们管理的是底层 OpenSearch 索引和删除文档的操作,而不是特定的 API 路径和 HTTP 方法。
测试权限
如果您希望用户拥有执行某个功能所需的最低权限集——即最小权限原则——最佳方法是作为新测试用户向您的集群发送代表性请求。如果出现权限错误,安全插件会非常明确地指出缺少哪些权限。请考虑以下请求和响应
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
,它用于存储安全插件的配置 YAML 文件,并且仅供拥有管理员证书的管理员访问。
除了标准索引权限外,您还在 roles.yml
配置文件中 index_permissions
下指定系统索引权限(请参阅roles.yml)。这涉及一个两步过程:1) 在 index_patterns
部分添加系统索引,以及 2) 在角色的 allowed_actions
部分指定 system:admin/system_index
。
例如,授予用户修改存储告警插件配置的系统索引的权限的系统索引权限由索引模式 .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 索引操作来查看权限配置中与任何索引模式关联的所有索引,并验证权限是否提供了您预期的访问权限。例如,如果您想验证包含以 .kibana
前缀开头的系统索引的权限,您可以运行 GET /_cat/indices/.kibana*
调用以返回与该前缀关联的所有索引。
以下示例响应显示了与索引模式 .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.permissions.enabled
设置允许您启用或禁用系统索引权限功能。此设置默认禁用。要启用系统索引权限功能,请将 plugins.security.system_indices.permissions.enabled
设置为 true
。有关此设置的更多信息,请参阅启用用户访问系统索引。
请记住,启用此功能并将系统索引权限映射到普通用户会使这些用户能够访问可能包含敏感信息和对集群健康至关重要的配置的索引。我们还建议在将用户映射到 restapi:admin/roles
时要谨慎,因为此权限不仅赋予用户将系统索引权限分配给其他用户的能力,还赋予其自行分配对任何系统索引的访问权限的能力。
do_not_fail_on_forbidden
如果用户尝试查询多个索引,并且其中一些索引缺少权限,则默认情况下,OpenSearch Dashboards UI 会显示错误
,或者在使用cURL
或API时会引发异常
。如果您希望用户获得他们确实拥有权限的任何索引的搜索结果,则可以在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
,则向用户提供的数据将如同完整数据集一样。不会有任何迹象表明某些数据可能已被省略。
do_not_fail_on_forbidden_empty
当用户尝试查看他们缺少索引权限的可视化时,他们将看到错误
而不是可视化。要将此行为更改为显示由于所有值等于 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 | 捆绑多个搜索模板并将其发送到您的OpenSearch集群的权限。此设置必须同时配置为集群级别和索引级别权限。 |
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 | 运行reindex(重新索引)操作的权限。 |
摄取API权限
请参阅摄取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
异常检测权限
请参阅异常检测API。
- 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
警报权限
请参阅警报API。
- 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/opensearch/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
索引状态管理权限
请参阅ISM API。
- cluster:indices:admin/opensearch/ism/managedindex
- 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
索引汇总权限
请参阅索引汇总API。
- 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
转换作业权限
请参阅转换API
- 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/opensearch/observability/create
- cluster:admin/opensearch/observability/update
- cluster:admin/opensearch/observability/delete
- cluster:admin/opensearch/observability/get
跨集群复制
请参阅跨集群复制安全。
- cluster:admin/plugins/replication/autofollow/update
重新索引
请参阅重新索引文档。
- cluster:admin/reindex/rethrottle
快照仓库权限
请参阅快照API。
- cluster:admin/repository/delete
- cluster:admin/repository/get
- cluster:admin/repository/put
- cluster:admin/repository/verify
重新路由
请参阅集群管理器任务限流。
- cluster:admin/reroute
脚本权限
请参阅脚本API。
- cluster:admin/script/delete
- cluster:admin/script/get
- cluster:admin/script/put
更新设置权限
请参阅索引API页面上的更新设置。
- cluster:admin/settings/update
快照权限
请参阅快照API。
- cluster:admin/snapshot/create
- cluster:admin/snapshot/delete
- cluster:admin/snapshot/get
- cluster:admin/snapshot/restore
- cluster:admin/snapshot/status
- cluster:admin/snapshot/status*
任务权限
请参阅API参考部分中的任务。
- cluster:admin/tasks/cancel
- cluster:admin/tasks/test
- cluster:admin/tasks/testunblock
数据源权限
请参阅数据源
- cluster:admin/opensearch/ql/datasources/create
- cluster:admin/opensearch/ql/datasources/read
- cluster:admin/opensearch/ql/datasources/update
- cluster:admin/opensearch/ql/datasources/delete
- cluster:admin/opensearch/ql/datasources/patch
- cluster:admin/opensearch/ql/async_query/create
- cluster:admin/opensearch/ql/async_query/result
- cluster:admin/opensearch/ql/async_query/delete
安全分析权限
请参阅API工具。
权限 | 描述 |
---|---|
cluster:admin/opensearch/securityanalytics/alerts/get | 获取警报的权限 |
cluster:admin/opensearch/securityanalytics/alerts/ack | 确认警报的权限 |
cluster:admin/opensearch/securityanalytics/detector/get | 获取检测器的权限 |
cluster:admin/opensearch/securityanalytics/detector/search | 搜索检测器的权限 |
cluster:admin/opensearch/securityanalytics/detector/write | 创建和更新检测器的权限 |
cluster:admin/opensearch/securityanalytics/detector/delete | 删除检测器的权限 |
cluster:admin/opensearch/securityanalytics/findings/get | 获取发现项的权限 |
cluster:admin/opensearch/securityanalytics/mapping/get | 按索引获取字段映射的权限 |
cluster:admin/opensearch/securityanalytics/mapping/view/get | 按索引获取字段映射并查看已映射和未映射字段的权限 |
cluster:admin/opensearch/securityanalytics/mapping/create | 创建字段映射的权限 |
cluster:admin/opensearch/securityanalytics/mapping/update | 更新字段映射的权限 |
cluster:admin/opensearch/securityanalytics/rules/categories | 获取所有规则类别的权限 |
cluster:admin/opensearch/securityanalytics/rule/write | 创建和更新规则的权限 |
cluster:admin/opensearch/securityanalytics/rule/search | 搜索规则的权限 |
cluster:admin/opensearch/securityanalytics/rules/validate | 验证规则的权限 |
cluster:admin/opensearch/securityanalytics/rule/delete | 删除规则的权限 |
监控权限
用于监控集群的集群权限适用于只读操作,例如检查集群健康状况以及获取节点使用情况或集群中运行的任务信息。
请参阅REST API 参考。
- 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 | 使用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 | 捆绑多个搜索模板并将其发送到您的OpenSearch集群的权限。此设置必须同时配置为集群级别和索引级别权限。 |
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 | 访问升级统计信息的权限。 |
安全REST权限
允许访问这些端点可能会触发集群中的操作更改。请谨慎操作。
以下REST API权限控制对端点的访问。授予对任何这些API的访问权限,将允许用户更改安全插件的基本操作组件
- 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