异常检测安全性
您可以使用 OpenSearch 中的安全插件和异常检测功能来限制非管理员用户执行特定操作。例如,您可能希望某些用户只能创建、更新或删除检测器,而其他用户只能查看检测器。
所有异常检测索引都作为系统索引受到保护。只有超级管理员用户或持有 TLS 证书的管理员用户才能访问系统索引。更多信息,请参阅系统索引。
异常检测的安全机制与警报的安全机制相同。
基本权限
作为管理员用户,您可以使用安全插件根据用户需要访问的 API 为其分配特定权限。有关支持的 API 列表,请参阅异常检测 API。
安全插件内置了两个角色,涵盖了大多数异常检测用例:anomaly_full_access
和 anomaly_read_access
。有关每个角色的描述,请参阅预定义角色。
如果您使用 OpenSearch Dashboards 创建异常检测器,即使拥有 anomaly_full_access
权限,也可能会遇到访问问题。此问题已在 OpenSearch 2.17 中解决,但对于早期版本,需要添加以下额外权限:
indices:data/read/search
– 您需要此权限,因为异常检测插件需要搜索数据源以验证是否有足够的数据来训练模型。indices:admin/mappings/fields/get
和indices:admin/mappings/fields/get*
– 您需要这些权限来验证给定数据源是否具有有效的时间戳字段和分类字段(在创建高基数检测器的情况下)。
如果这些角色不能满足您的需求,您可以混合搭配单个异常检测权限以适应您的用例。每个操作都对应 REST API 中的一个操作。例如,cluster:admin/opensearch/ad/detector/delete
权限允许您删除检测器。
关于警报和精细访问控制的说明
当触发器生成警报时,检测器和监控器配置、警报本身以及发送到通道的任何通知都可能包含描述所查询索引的元数据。根据设计,插件必须提取数据并将其作为元数据存储在索引外部。 文档级安全 (DLS) 和 字段级安全 (FLS) 访问控制旨在保护索引中的数据。但是,一旦数据作为元数据存储在索引外部,有权访问检测器和监控器配置、警报及其通知的用户将能够查看这些元数据,并可能推断出索引中数据的内容和质量,否则这些数据将受到 DLS 和 FLS 访问控制的保护。
为了减少未经授权的用户查看可能描述索引的元数据的可能性,我们建议管理员在向目标用户组分配权限时启用基于角色的访问控制并牢记这些设计元素。有关详细信息,请参阅按后端角色限制访问。
使用精细访问控制选择远程索引
要使用远程索引作为检测器的数据源,请参阅跨集群搜索中的身份验证流中的设置步骤。您必须使用在远程和本地集群中都存在的角色。远程集群必须将所选角色映射到与本地集群中相同的用户名。
示例:在本地集群上创建新用户
- 在本地集群上创建新用户以用于检测器创建
curl -XPUT -k -u 'admin:<custom-admin-password>' 'https://:9200/_plugins/_security/api/internalusers/anomalyuser' -H 'Content-Type: application/json' -d '{"password":"password"}'
- 将新用户映射到
anomaly_full_access
角色
curl -XPUT -k -u 'admin:<custom-admin-password>' -H 'Content-Type: application/json' 'https://:9200/_plugins/_security/api/rolesmapping/anomaly_full_access' -d '{"users" : ["anomalyuser"]}'
- 在远程集群上,创建相同的用户并将
anomaly_full_access
映射到该角色
curl -XPUT -k -u 'admin:<custom-admin-password>' 'https://:9250/_plugins/_security/api/internalusers/anomalyuser' -H 'Content-Type: application/json' -d '{"password":"password"}'
curl -XPUT -k -u 'admin:<custom-admin-password>' -H 'Content-Type: application/json' 'https://:9250/_plugins/_security/api/rolesmapping/anomaly_full_access' -d '{"users" : ["anomalyuser"]}'
自定义结果索引
要使用自定义结果索引,您需要 OpenSearch 安全插件提供的默认角色中不包含的额外权限。要添加这些权限,请参阅异常检测文档中的步骤 1:定义检测器。
(高级) 按后端角色限制访问
使用后端角色根据角色配置对单个检测器的精细访问。例如,组织中不同部门的用户可以查看其各自部门拥有的检测器。
首先,请确保您的用户具有适当的后端角色。后端角色通常来自 LDAP 服务器或 SAML 提供商,但如果您使用内部用户数据库,则可以使用 REST API 手动添加它们。
接下来,启用以下设置
PUT _cluster/settings
{
"transient": {
"plugins.anomaly_detection.filter_by_backend_roles": "true"
}
}
现在,当用户在 OpenSearch Dashboards 中查看异常检测资源(或进行 REST API 调用)时,他们只看到由至少共享一个后端角色的用户创建的检测器。例如,考虑两个用户:alice
和 bob
。
alice
具有分析师后端角色
PUT _plugins/_security/api/internalusers/alice
{
"password": "alice",
"backend_roles": [
"analyst"
],
"attributes": {}
}
bob
具有人力资源后端角色
PUT _plugins/_security/api/internalusers/bob
{
"password": "bob",
"backend_roles": [
"human-resources"
],
"attributes": {}
}
alice
和 bob
都拥有异常检测的完全访问权限
PUT _plugins/_security/api/rolesmapping/anomaly_full_access
{
"backend_roles": [],
"hosts": [],
"users": [
"alice",
"bob"
]
}
由于他们拥有不同的后端角色,alice
和 bob
无法查看彼此的检测器或其结果。
如果用户没有后端角色,只要他们拥有 anomaly_read_access
权限,他们仍然可以查看其他用户的异常检测结果。对于拥有 anomaly_full_access
权限的用户也是如此,因为它包含了 anomaly_read_access
的所有权限。管理员应告知用户,拥有 anomaly_read_access
权限允许查看集群中任何检测器的结果,包括他们无法直接访问的数据。为了限制对检测器结果的访问,管理员应在创建检测器时使用后端角色过滤器。这确保只有具有匹配后端角色的用户才能访问这些特定检测器的结果。