完整译文请访问:http://www.coderdocument.com/docs/prometheus/v2.14/operating/security_model.html。
Prometheus是一个复杂的系统,有许多组件并与其他系统集成。它可以部署在各种受信任和不受信任的环境中。
本页描述Prometheus的一般安全假设和一些可以通过配置启用的攻击向量。
对于任何复杂的系统,都不可能保证没有bug。如果你发现了一个安全问题,请向相关仓库中的MAINTAINERS.md中列出的维护人员报告并抄送至prometheus-team@googlegroups.com。我们将修复这个问题,并与你协调发布日期,对你的努力表示感谢,如果你愿意,我们还会提到你的名字。
Prometheus
Prometheus假定不受信任的用户可以访问Prometheus HTTP端点和日志。他们可以访问数据库中包含的所有时间序列信息,以及各种操作和调试信息。
Prometheus还假定只有受信任的用户才有能力更改Prometheus和其他组件的运行时环境的命令行、配置文件、规则文件和其他组件。
Prometheus抓取的目标,频率和其他设置完全由配置文件决定。管理员可以决定是否使用来自服务发现系统的信息,这些信息与重新标记相结合,可以将部分控制权授予任何可以修改该服务发现系统中的数据的人。
被抓取的目标可能由不受信任的用户运行。在默认情况下,目标不会暴露模拟其他目标的数据。honor_labels
选项可以移除这种保护,这样可以进行某些重新标记。
从Prometheusv2.0开始, --web.enable-admin-api
选项控制对管理HTTP API的访问,其中包括删除时间序列等功能。这是默认禁用的。如果启用了,可以在/api/*/admin/
路径下访问管理和修改功能。 --web.enable-lifecycle
选项控制Prometheus的HTTP重新加载和关闭。在默认情况下,这也是禁用的。如果启用,它们可以通过/-/reload
和 /-/quit
路径访问。
Prometheusv1.x中,任何可以访问HTTP API的用户都可以访问/-/reload
并且可以通过DELETE
方法访问/api/v1/series
。默认情况下,/-/quit
端点是禁用的,但是可以使用-web.enable-remote-shutdown
选项进行启用。
远程读取功能允许任何具有HTTP访问权限的用户将查询发送到远程读取端点。例如,如果PromQL查询最终直接在关系数据库上运行,那么任何能够将查询发送到Prometheus(例如通过Grafana)的用户都可以在该数据库上运行任意SQL。
Alertmanager
任何可以访问Alertmanager HTTP端点的用户都可以访问它的数据。它们可以创建和解析告警。它们可以创建、修改和删除静默策略。
将通知发送到何处由配置文件决定。在某些模板设置中,通知可能会到达告警定义的目的地。例如,如果通知使用告警标签作为目标电子邮件地址,那么任何可以向Alertmanager发送告警的用户都可以将通知发送到任何电子邮件地址。如果告警定义的目的地是一个可模板化的秘密字段,那么任何能够访问Prometheus或Alertmanager的用户都可以查看秘密(secret)。
在上面的场景中,任何可模板化的秘密字段都是用于路由通知的。它们并不是使用模板文件特性将秘密从配置文件中分离出来的一种方法。任何能够在Alertmanager配置文件中配置接收者的用户都可以窃取存储在模板文件中的秘密。例如,在大型设置中,每个团队可能有一个他们完全控制的Alertmanager配置文件片段,然后将其合并到完整的最终配置文件中。
完整译文请访问:http://www.coderdocument.com/docs/prometheus/v2.14/operating/security_model.html。