告警安全性

如果您将 Security 插件与告警功能一起使用,可能希望限制某些用户执行特定操作。例如,您可能希望某些用户只能查看和确认告警,而其他用户可以修改监控器和目标。

基本权限

Security 插件有三个内置角色,涵盖了大多数告警用例:alerting_read_accessalerting_ack_alertsalerting_full_access。关于每个角色的描述,请参阅预定义角色

如果这些角色不能满足您的需求,可以混合搭配单独的告警权限以适应您的用例。每个操作对应 REST API 中的一个操作。例如,cluster:admin/opensearch/alerting/destination/delete 权限允许您删除目标。

监控器如何访问数据

监控器以创建或最后修改它的用户的权限运行。例如,考虑用户 jdoe,他在一家零售连锁店工作。jdoe 有两个角色。这两个角色共同允许对三个索引进行读取访问:store1-returnsstore2-returnsstore3-returns

jdoe 创建了一个监控器,当这三个索引中的退货数量每小时超过 40 时,会向管理层发送电子邮件。

后来,用户 psantos 想要编辑监控器,使其每两小时运行一次,但 psantos 只能访问 store1-returns。要做出更改,psantos 有两个选项:

  • 更新监控器,使其仅检查 store1-returns

  • 向管理员请求对另外两个索引的读取权限。

更改后,监控器现在以与 psantos 相同的权限运行,包括任何文档级安全查询、排除字段掩码字段。如果您使用提取查询来定义监控器,请使用 Run 按钮以确保响应包含您需要的字段。

监控器创建后,Alerting 插件将继续执行该监控器,即使创建监控器的用户的权限已被移除。只有具有正确集群权限的用户才能手动禁用或删除监控器以停止其执行:

  • 禁用监控器:cluster:admin/opendistro/alerting/monitor/write

  • 删除监控器:cluster:admin/opendistro/alerting/monitor/delete

如果监控器的触发器配置了通知,无论目标类型如何,Alerting 插件将继续发送通知。要停止通知,用户必须手动删除触发器操作中的通知。

关于告警和细粒度访问控制的说明

当触发器生成告警时,监控器配置、告警本身以及发送到通道的任何通知都可能包含描述被查询索引的元数据。根据设计,插件必须提取数据并将其作为元数据存储在索引之外。文档级安全 (DLS) 和 字段级安全 (FLS) 访问控制旨在保护索引中的数据。但是,一旦数据作为元数据存储在索引之外,能够访问监控器配置、告警及其通知的用户将能够查看此元数据,并可能推断出索引中数据的内容和质量,而这些数据原本是被 DLS 和 FLS 访问控制隐藏的。

为了减少意外用户查看可能描述索引的元数据的机会,我们建议管理员启用基于角色的访问控制,并在为目标用户组分配权限时牢记这类设计要素。详情请参阅按后端角色限制访问

(高级) 按后端角色限制访问

开箱即用,告警插件没有所有权的概念。例如,如果您拥有 cluster:admin/opensearch/alerting/monitor/write 权限,您可以编辑所有监控器,无论是否是您创建的。如果只有少数可信用户管理您的监控器和目标,这种缺乏所有权的情况通常不是问题。较大的组织可能需要按后端角色分段访问。

首先,确保您的用户拥有适当的后端角色。后端角色通常来自 LDAP 服务器SAML 提供商。但是,如果您使用内部用户数据库,可以使用 REST API 通过创建用户操作手动添加它们。要将后端角色添加到创建用户请求中,请按照 Security 插件 API 文档中的创建用户说明操作。

接下来,启用以下设置:

PUT _cluster/settings
{
  "transient": {
    "plugins.alerting.filter_by_backend_roles": "true"
  }
}

现在,当用户在 Dashboards 中查看告警资源(或进行 REST API 调用)时,他们只会看到由共享至少一个后端角色的用户创建的监控器和目标。例如,考虑三个都具有告警完全访问权限的用户:jdoejroepsantos

jdoejroe 在同一个团队工作,并且都拥有 analyst 后端角色。psantos 拥有 human-resources 后端角色。

如果 jdoe 创建了一个监控器,jroe 可以看到并修改它,但 psantos 不能。如果该监控器生成告警,情况相同:jroe 可以查看并确认它,但 psantos 不能。如果 psantos 创建了一个目标,jdoejroe 无法看到或修改它。

指定 RBAC 后端角色

您可以在使用 Alerting API 创建或更新监控器时指定基于角色的访问控制 (RBAC) 后端角色。

在创建监控器的情况下,按照以下指南指定角色:

用户类型 用户是否指定角色 (Y/N) 如何使用 RBAC 角色
管理员用户 使用所有指定的后端角色与监控器关联。
普通用户 使用用户有权使用的后端角色列表中的所有指定后端角色与监控器关联。
普通用户 复制用户的后端角色并将其与监控器关联。

在更新监控器的情况下,按照以下指南指定角色:

用户类型 用户是否指定角色 (Y/N) 如何使用 RBAC 角色
管理员用户 移除与监控器关联的所有后端角色,然后使用所有指定的后端角色与监控器关联。
普通用户 移除用户有权访问但未指定的与监控器关联的后端角色。然后从用户有权使用的后端角色列表中添加所有其他指定的后端角色到监控器。
普通用户 不更新监控器上的后端角色。
  • 对于管理员用户,空列表被视为移除用户拥有的所有权限。如果非管理员用户传入空列表,将抛出异常,因为非管理员用户不允许这样做。

  • 如果用户尝试关联他们无权使用的角色,将抛出异常。

要创建 RBAC 角色,请按照 Security 插件 API 文档中的创建角色说明操作。

使用 RBAC 角色创建监控器

当您使用 Alerting API 创建监控器时,可以在请求体底部指定 RBAC 角色。使用 rbac_roles 参数。

以下示例显示了通过 RBAC 参数指定的 RBAC 角色:

...
  "rbac_roles": ["role1", "role2"]
}

要查看完整的请求示例,请参阅创建查询级监控器