Link Search Menu Expand Document Documentation Menu

定义用户和角色

您可以在 OpenSearch 中定义用户,以控制谁有权访问 OpenSearch 数据。您可以使用内部用户数据库存储用户,也可以将他们存储在外部认证系统(例如 LDAP 或 Active Directory)中。

您可以定义角色来确定权限或操作组的范围。您可以创建具有特定权限的角色,例如,包含集群范围权限、索引特定权限、文档和字段级别安全性以及租户的任意组合的角色。

您可以在创建用户时或在定义用户和角色之后将用户映射到角色。此映射根据分配给每个用户的角色来确定其权限和访问级别。


目录

定义用户

您可以使用 OpenSearch Dashboards、internal_users.yml 或 REST API 定义用户。创建用户时,您可以使用 internal_users.yml 或 REST API 将用户映射到角色。如果您使用 OpenSearch Dashboards 定义用户,请遵循将用户映射到角色教程中的步骤。

除非您正在定义新的保留用户或隐藏用户,否则建议使用 OpenSearch Dashboards 或 REST API 创建新用户、角色和角色映射。.yml 文件用于初始设置,不适用于持续使用。

OpenSearch Dashboards

  1. 选择安全内部用户创建内部用户
  2. 提供用户名和密码。安全插件会自动对密码进行哈希处理,并将其存储在 .opendistro_security 索引中。
  3. 如果需要,指定用户属性。

    属性是可选的用户属性,可用于索引权限或文档级别安全性中的变量替换。

  4. 选择提交

internal_users.yml

参见YAML 文件

REST API

参见创建用户

定义角色

与定义用户类似,您可以使用 OpenSearch Dashboards、roles.yml 或 REST API 定义角色。OpenSearch 提供了预定义角色和特殊的只读角色。

除非您正在定义新的保留用户或隐藏用户,否则建议使用 OpenSearch Dashboards 或 REST API 创建新用户、角色和角色映射。.yml 文件用于初始设置,不适用于持续使用。

OpenSearch Dashboards

  1. 选择安全角色创建角色
  2. 为角色提供一个名称。
  3. 根据需要添加权限。

    例如,您可以为一个角色授予无集群权限,对两个索引授予 read 权限,对第三个索引授予 unlimited 权限,以及对 analysts 租户授予读取权限。

  4. 选择提交

roles.yml

参见YAML 文件

REST API

参见创建角色

编辑角色

您可以使用以下方法之一编辑角色。

OpenSearch Dashboards

  1. 选择安全 > 角色。在创建角色部分中,选择浏览现有角色
  2. 选择要编辑的角色。
  3. 选择编辑角色。对角色进行任何必要的更新。
  4. 若要保存更改,请选择更新

roles.yml

参见YAML 文件

REST API

参见修补角色

将用户映射到角色

如果您在创建用户时未指定角色,则可以在之后将角色映射到该用户。

与用户和角色类似,您可以使用 OpenSearch Dashboards、roles_mapping.yml 或 REST API 创建角色映射。

OpenSearch Dashboards

  1. 选择安全角色和一个角色。
  2. 选择映射用户选项卡,然后选择管理映射
  3. 指定用户或外部身份(也称为后端角色)。
  4. 选择映射

roles_mapping.yml

参见YAML 文件

REST API

参见创建角色映射

定义只读角色

只读角色授予用户从 OpenSearch 集群读取数据的能力,但不允许修改或删除任何数据。当您希望为报告、分析或可视化目的提供数据访问权限,同时又不允许修改数据或集群本身时,只读角色非常有用。这有助于维护数据完整性,并防止意外或未经授权的更改。

与 OpenSearch 中的任何角色一样,只读角色可以使用以下方法进行配置:

  • 使用 OpenSearch Dashboards
  • 修改 .yml 配置文件
  • 使用集群设置 API

熟悉角色和角色映射的最简单方法是使用 OpenSearch Dashboards。其界面简化了角色的创建和分配,工作流程易于导航。

定义基本只读角色

要创建一个基本只读角色,允许用户访问 OpenSearch Dashboards、查看现有仪表板和可视化,以及查询不同的索引,请使用以下权限。这些权限授予用户对集群上所有租户和索引的访问权限。

集群权限

对于需要对集群范围资源(例如可视化或仪表板)进行只读访问的用户,请将 cluster_composite_ops_ro 权限添加到该用户的角色中。

索引权限

需要查看可视化的用户还需要访问用于创建可视化的索引。若要授予用户对所有索引的只读访问权限,请在索引下拉菜单下指定所有 (*),并在索引权限中指定读取

租户权限

如果您使用租户在团队或项目之间划分工作,请使用所有 (*) 选项,后跟只读选项,如以下图片所示。

creating role

设置所有权限类型并定义角色后,您可以在角色的映射用户选项卡上将角色直接映射到用户。选择映射用户,然后选择要映射到角色的用户,如以下图片所示。

mapping users

OpenSearch Dashboards readonly_mode

OpenSearch Dashboards 的 readonly_mode 功能用于仅授予用户访问 Dashboards 界面的权限,并隐藏所有其他 UI 元素。

要配置此角色,请将以下行添加到您的 opensearch_dashboards.yml 文件中:

opensearch_security.readonly_mode.roles: [new_role]

即使分配的角色授予了额外权限,或者用户被映射到具有索引写入访问权限的其他角色,OpenSearch Dashboards 也会限制此访问。使用 CURL 或 API 直接访问 OpenSearch 数据仍然是允许的。OpenSearch Dashboards 不参与此通信。

如果用户映射到 readonly_mode 角色,除了 Dashboards 之外,UI 的所有其他元素都将被移除。在下面的图片中,左侧的视图显示了映射到 readonly_mode 角色用户的屏幕视角。右侧的视图显示了用户的标准视图。

compare read only mode

仅将用户映射到 readonly_mode 角色不允许他们查看相关索引或现有仪表板。对索引和仪表板的读取访问权限需要单独的权限。

如果用户还映射到 opensearch.ymlplugins.security.restapi.roles_enabled 下列出的任何角色,例如 all_accesssecurity_rest_api_access,则 readonly_mode 将被忽略,从而授予他们对标准 UI 元素的访问权限。

附加权限

如果用户除了 read_only 角色中包含的权限外,还需要其他权限(例如用于警报或异常检测任务),您可以分配预定义角色,例如 alerting_read_accessanomaly_read_access

预定义角色

安全插件包含几个预定义角色,作为有用的默认值。

角色 描述
alerting_ack_alerts 授予查看和确认警报的权限,但不允许修改目标或监视器。
alerting_full_access 授予执行所有警报操作的完全权限。
alerting_read_access 授予查看警报、目标和监视器的权限,但不允许确认警报或修改目标或监视器。
all_access 授予对集群的完全访问权限,包括所有集群范围的操作、写入所有集群索引的权限以及写入所有租户的权限。有关使用 REST API 访问的更多信息,请参阅API 的访问控制
anomaly_full_access 授予执行所有异常检测操作的完全权限。
anomaly_read_access 授予查看检测器的权限,但不允许创建、修改或删除检测器。
asynchronous_search_full_access 授予执行所有异步搜索操作的完全权限。
asynchronous_search_read_access 授予查看异步搜索的权限,但不允许提交、修改或删除它们。
cross_cluster_replication_follower_full_access 授予在跟随者集群上执行跨集群复制操作的完全权限。
cross_cluster_replication_leader_full_access 授予在领导者集群上执行跨集群复制操作的完全权限。
index_management_full_access 授予执行所有索引管理操作的完全权限,包括索引状态管理 (ISM)、转换和聚合。
index_management_read_access readall 相同,但增加了用于监控的集群权限。
ml_full_access 授予执行所有机器学习 (ML) 功能的完全权限,包括启动新的 ML 任务以及读取或删除模型。
ml_read_access 授予查看 ML 功能和结果的权限,但不允许修改它们。
notifications_full_access 授予执行所有通知操作的完全权限。
notifications_read_access 授予查看通知及其配置的权限,但不允许修改它们。
opensearch_dashboards_read_only 授予对 OpenSearch Dashboards 的只读访问权限。
opensearch_dashboards_user 授予对 OpenSearch Dashboards 的基本用户访问权限。
point_in_time_full_access 授予执行所有时间点操作的完全权限。
readall 授予集群范围搜索(如 msearch)的权限以及所有索引的搜索权限。
reports_instances_read_access 授予生成按需报告和下载现有报告的权限,但不允许查看或创建报告定义。
security_analytics_ack_alerts 授予查看和确认警报的权限。
security_analytics_full_access 授予使用所有安全分析功能的完全权限。
security_analytics_read_access 授予查看安全分析组件(如检测器、警报和发现)的权限。还包括允许用户搜索检测器和规则的权限。此角色不允许用户执行修改或删除检测器等操作。
security_manager 授予管理安全相关功能和配置的权限。
snapshot_management_full_access 授予执行所有快照管理操作的完全权限。
snapshot_management_read_access 授予查看快照管理操作和配置的权限,但不允许修改它们。

有关每个角色权限的更详细摘要,请参考它们的动作组与默认动作组中的描述。

示例

以下教程描述了在 OpenSearch Dashboards 中创建批量访问角色的步骤。

创建新的 bulk_access 角色

  1. 打开 OpenSearch Dashboards。
  2. 选择 SecurityRoles
  3. 创建名为 bulk_access 的新角色。
  4. 对于 Cluster permissions,添加 cluster_composite_ops 动作组。
  5. 对于 Index Permissions,添加索引模式。例如,您可以指定 my-index-*
  6. 对于索引权限,添加 write 动作组。
  7. 选择 Create

将角色映射到您的用户

  1. 选择映射用户选项卡,然后选择管理映射
  2. 对于 Internal users,添加您的批量访问用户。
  3. 选择映射

管理员和超级管理员角色

OpenSearch 用户角色对于控制对集群资源的访问至关重要。用户可以根据其访问权限和职责分为普通用户、管理员用户或超级管理员用户。

有关定义用户的更多信息,请参阅定义用户。有关定义角色的更多信息,请参阅定义角色

普通用户

普通用户具有基本访问权限,允许他们与 OpenSearch 集群交互,例如查询数据和使用仪表板,但他们没有管理权限。

管理员用户

管理员用户具有更高的权限,允许他们在集群内执行各种管理任务。与普通用户相比,他们拥有更广泛的访问权限,包括以下权限:

  • 管理用户和角色。
  • 配置权限。
  • 调整后端设置。

管理员用户可以通过配置 opensearch.yml 文件中的设置、使用 OpenSearch Dashboards 或与 REST API 交互来执行这些任务。有关配置用户和角色的更多信息,请参阅预定义角色

超级管理员用户

超级管理员用户在 OpenSearch 环境中拥有最高级别的管理权限。此角色通常保留给选定用户,应谨慎管理。

超级管理员用户对集群中的所有设置和数据拥有不受限制的访问权限,包括以下权限:

  • 修改安全插件配置。
  • 访问和管理安全索引 .opendistro_security
  • 覆盖任何安全限制。

超级管理员角色的认证

超级管理员用户通过证书而非密码进行认证。所需的证书在 opensearch.yml 文件的 admin_dn 部分定义,并且必须由相同的根证书颁发机构 (CA) 签名,示例如下:

YAML
plugins.security.authcz.admin_dn:
- CN=kirk,OU=client,O=client,L=test, C=de

如果超级管理员证书由不同的 CA 签名,则管理员 CA 必须与节点 CA 连接到 opensearch.ymlplugins.security.ssl.http.pemtrustedcas_filepath 定义的文件中。

有关更多信息,请参阅配置超级管理员证书