定义用户和角色
您可以在 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
- 选择安全、内部用户和创建内部用户。
- 提供用户名和密码。安全插件会自动对密码进行哈希处理,并将其存储在
.opendistro_security
索引中。 -
如果需要,指定用户属性。
属性是可选的用户属性,可用于索引权限或文档级别安全性中的变量替换。
- 选择提交。
internal_users.yml
internal_users.yml
参见YAML 文件。
REST API
参见创建用户。
定义角色
与定义用户类似,您可以使用 OpenSearch Dashboards、roles.yml
或 REST API 定义角色。OpenSearch 提供了预定义角色和特殊的只读角色。
除非您正在定义新的保留用户或隐藏用户,否则建议使用 OpenSearch Dashboards 或 REST API 创建新用户、角色和角色映射。.yml
文件用于初始设置,不适用于持续使用。
OpenSearch Dashboards
- 选择安全、角色和创建角色。
- 为角色提供一个名称。
-
根据需要添加权限。
例如,您可以为一个角色授予无集群权限,对两个索引授予
read
权限,对第三个索引授予unlimited
权限,以及对analysts
租户授予读取权限。 - 选择提交。
roles.yml
roles.yml
参见YAML 文件。
REST API
参见创建角色。
编辑角色
您可以使用以下方法之一编辑角色。
OpenSearch Dashboards
- 选择安全 > 角色。在创建角色部分中,选择浏览现有角色。
- 选择要编辑的角色。
- 选择编辑角色。对角色进行任何必要的更新。
- 若要保存更改,请选择更新。
roles.yml
roles.yml
参见YAML 文件。
REST API
参见修补角色。
将用户映射到角色
如果您在创建用户时未指定角色,则可以在之后将角色映射到该用户。
与用户和角色类似,您可以使用 OpenSearch Dashboards、roles_mapping.yml
或 REST API 创建角色映射。
OpenSearch Dashboards
- 选择安全、角色和一个角色。
- 选择映射用户选项卡,然后选择管理映射。
- 指定用户或外部身份(也称为后端角色)。
- 选择映射。
roles_mapping.yml
roles_mapping.yml
参见YAML 文件。
REST API
参见创建角色映射。
定义只读角色
只读角色授予用户从 OpenSearch 集群读取数据的能力,但不允许修改或删除任何数据。当您希望为报告、分析或可视化目的提供数据访问权限,同时又不允许修改数据或集群本身时,只读角色非常有用。这有助于维护数据完整性,并防止意外或未经授权的更改。
与 OpenSearch 中的任何角色一样,只读角色可以使用以下方法进行配置:
- 使用 OpenSearch Dashboards
- 修改
.yml
配置文件 - 使用集群设置 API
熟悉角色和角色映射的最简单方法是使用 OpenSearch Dashboards。其界面简化了角色的创建和分配,工作流程易于导航。
定义基本只读角色
要创建一个基本只读角色,允许用户访问 OpenSearch Dashboards、查看现有仪表板和可视化,以及查询不同的索引,请使用以下权限。这些权限授予用户对集群上所有租户和索引的访问权限。
集群权限
对于需要对集群范围资源(例如可视化或仪表板)进行只读访问的用户,请将 cluster_composite_ops_ro
权限添加到该用户的角色中。
索引权限
需要查看可视化的用户还需要访问用于创建可视化的索引。若要授予用户对所有索引的只读访问权限,请在索引下拉菜单下指定所有 (*
),并在索引权限中指定读取。
租户权限
如果您使用租户在团队或项目之间划分工作,请使用所有 (*
) 选项,后跟只读选项,如以下图片所示。
设置所有权限类型并定义角色后,您可以在角色的映射用户选项卡上将角色直接映射到用户。选择映射用户,然后选择要映射到角色的用户,如以下图片所示。
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
角色用户的屏幕视角。右侧的视图显示了用户的标准视图。
仅将用户映射到 readonly_mode
角色不允许他们查看相关索引或现有仪表板。对索引和仪表板的读取访问权限需要单独的权限。
如果用户还映射到 opensearch.yml
中 plugins.security.restapi.roles_enabled
下列出的任何角色,例如 all_access
或 security_rest_api_access
,则 readonly_mode
将被忽略,从而授予他们对标准 UI 元素的访问权限。
附加权限
如果用户除了 read_only
角色中包含的权限外,还需要其他权限(例如用于警报或异常检测任务),您可以分配预定义角色,例如 alerting_read_access
或 anomaly_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
角色
- 打开 OpenSearch Dashboards。
- 选择 Security,Roles。
- 创建名为
bulk_access
的新角色。 - 对于 Cluster permissions,添加
cluster_composite_ops
动作组。 - 对于 Index Permissions,添加索引模式。例如,您可以指定
my-index-*
。 - 对于索引权限,添加
write
动作组。 - 选择 Create。
将角色映射到您的用户
- 选择映射用户选项卡,然后选择管理映射。
- 对于 Internal users,添加您的批量访问用户。
- 选择映射。
管理员和超级管理员角色
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.yml
中 plugins.security.ssl.http.pemtrustedcas_filepath
定义的文件中。
有关更多信息,请参阅配置超级管理员证书。