权限

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

大多数权限都是自描述的。例如,cluster:admin/ingest/pipeline/get 允许您检索有关摄取管道的信息。在许多情况下,一个权限对应于特定的 REST API 操作,例如 GET _ingest/pipeline

尽管存在这种关联,权限并不直接映射到 REST API 操作。像 POST _bulkGET _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)。这涉及两个步骤:

  1. index_patterns 部分添加系统索引;

  2. 在角色的 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-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 使用存在查询的权限。
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