Link Search Menu Expand Document Documentation Menu

权限

安全插件中的每个权限都控制着 OpenSearch 集群可以执行的某些操作的访问权限,例如索引文档或检查集群健康状况。

大多数权限都是自描述的。例如,cluster:admin/ingest/pipeline/get 允许您检索有关摄入管道的信息。在许多情况下,权限与特定的 REST API 操作(例如 GET _ingest/pipeline)相关联。

尽管存在这种关联,但权限并**不**直接映射到 REST API 操作。诸如 POST _bulkGET _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

报告权限

请参阅使用Dashboards界面创建报告

  • 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-logsproduct-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