警报安全性
如果您在警报功能旁边使用安全插件,您可能希望将某些用户限制在特定的操作上。例如,您可能希望某些用户只能查看和确认警报,而其他用户则可以修改监控器和目标。
基本权限
安全插件有三个内置角色,涵盖了大多数警报用例:alerting_read_access
、alerting_ack_alerts
和 alerting_full_access
。有关每个角色的说明,请参阅预定义角色。
如果这些角色不能满足您的需求,请根据您的用例混合搭配单独的警报权限。每个操作都对应 REST API 中的一个操作。例如,cluster:admin/opensearch/alerting/destination/delete
权限允许您删除目标。
监控器如何访问数据
监控器以创建或上次修改它们的用户权限运行。例如,考虑用户jdoe
,他在一家连锁零售店工作。jdoe
有两个角色。这两个角色共同允许对三个索引进行读取访问:store1-returns
、store2-returns
和 store3-returns
。
jdoe
创建了一个监控器,当三个索引中的退货数量每小时超过 40 时,它会向管理层发送电子邮件。
后来,用户 psantos
想编辑该监控器,使其每两小时运行一次,但 psantos
只能访问 store1-returns
。为了进行更改,psantos
有两个选择
- 更新监控器,使其仅检查
store1-returns
。 - 请求管理员授予对其他两个索引的读取访问权限。
进行更改后,监控器现在以与 psantos
相同的权限运行,包括任何文档级安全性查询、排除字段和掩码字段。如果您使用提取查询定义监控器,请使用运行按钮确保响应包含您需要的字段。
监控器创建后,即使创建监控器的用户权限被移除,警报插件也会继续执行该监控器。只有具有正确集群权限的用户才能手动禁用或删除监控器以停止其执行
- 禁用监控器:
cluster:admin/opendistro/alerting/monitor/write
- 删除监控器:
cluster:admin/opendistro/alerting/monitor/delete
如果您的监控器触发器配置了通知,则警报插件会继续发送通知,无论目标类型如何。要停止通知,用户必须在触发器的操作中手动删除它们。
关于警报和细粒度访问控制的注意事项
当触发器生成警报时,监控器配置、警报本身以及发送到通道的任何通知都可能包含描述所查询索引的元数据。根据设计,插件必须提取数据并将其作为元数据存储在索引外部。文档级安全性 (DLS) 和字段级安全性 (FLS) 访问控制旨在保护索引中的数据。但是,一旦数据作为元数据存储在索引外部,有权访问监控器配置、警报及其通知的用户将能够查看此元数据,并可能推断索引中数据的 S内容和质量,而这些内容和质量原本会受到 DLS 和 FLS 访问控制的隐藏。
为了减少未经授权的用户查看可能描述索引的元数据的可能性,我们建议管理员启用基于角色的访问控制,并在为目标用户组分配权限时牢记这些设计元素。有关详细信息,请参阅按后端角色限制访问。
(高级) 按后端角色限制访问
开箱即用,警报插件没有所有权的概念。例如,如果您拥有 cluster:admin/opensearch/alerting/monitor/write
权限,则无论您是否创建了监控器,您都可以编辑所有监控器。如果少数受信任的用户管理您的监控器和目标,则这种缺乏所有权的情况通常不是问题。规模较大的组织可能需要按后端角色划分访问权限。
首先,确保您的用户拥有适当的后端角色。后端角色通常来自 LDAP 服务器或 SAML 提供程序。但是,如果您使用内部用户数据库,则可以使用 REST API 通过创建用户操作手动添加它们。要将后端角色添加到创建用户请求中,请按照安全插件 API 文档中的创建用户说明进行操作。
接下来,启用以下设置
PUT _cluster/settings
{
"transient": {
"plugins.alerting.filter_by_backend_roles": "true"
}
}
现在,当用户在 OpenSearch Dashboards 中查看警报资源(或发出 REST API 调用)时,他们只能看到由共享至少一个后端角色的用户创建的监控器和目标。例如,考虑三个对警报功能都拥有完全访问权限的用户:jdoe
、jroe
和 psantos
。
jdoe
和 jroe
在工作中是同一个团队的,并且都具有 analyst
后端角色。psantos
具有 human-resources
后端角色。
如果 jdoe
创建了一个监控器,jroe
可以查看和修改它,但 psantos
不能。如果该监控器生成警报,情况也是如此:jroe
可以查看和确认它,但 psantos
不能。如果 psantos
创建了一个目标,jdoe
和 jroe
无法查看或修改它。
指定 RBAC 后端角色
当您使用警报 API 创建或更新监控器时,您可以指定基于角色的访问控制 (RBAC) 后端角色。
在创建监控器场景中,请遵循以下准则来指定角色
用户类型 | 角色是否由用户指定 (Y/N) | 如何使用 RBAC 角色 |
---|---|---|
管理员用户 | 是 | 使用所有指定的后端角色关联到监控器。 |
普通用户 | 是 | 使用用户有权使用的后端角色列表中的所有指定后端角色关联到监控器。 |
普通用户 | 否 | 复制用户的后端角色并将其关联到监控器。 |
在更新监控器场景中,请遵循以下准则来指定角色
用户类型 | 角色是否由用户指定 (Y/N) | 如何使用 RBAC 角色 |
---|---|---|
管理员用户 | 是 | 删除与监控器关联的所有后端角色,然后使用与监控器关联的所有指定后端角色。 |
普通用户 | 是 | 移除用户有权访问但未指定的与监控器关联的后端角色。然后将用户有权使用的后端角色列表中的所有其他指定后端角色添加到监控器。 |
普通用户 | 否 | 不要更新监控器上的后端角色。 |
- 对于管理员用户,空列表被视为与移除用户拥有的所有权限相同。如果非管理员用户传入空列表,则会抛出异常,因为非管理员用户不允许这样做。
- 如果用户尝试关联其没有权限使用的角色,则会抛出异常。
要创建 RBAC 角色,请按照安全插件 API 文档中的创建角色说明进行操作。
使用 RBAC 角色创建监控器
当您使用警报 API 创建监控器时,您可以在请求正文的底部指定 RBAC 角色。使用 rbac_roles
参数。
以下示例显示了由 RBAC 参数指定的 RBAC 角色
...
"rbac_roles": ["role1", "role2"]
}
要查看完整的请求示例,请参阅创建查询级监控器。