我想我在这里误解了一些东西。我已经安装了带有 Docker 的 Graphite(sitespeedio/graphite),并为 Web 面板设置了基本身份验证。我打开了端口 2003 的防火墙,以便从其他服务器获取数据点,它运行良好。
但是没有身份验证/授权。甚至我用来发送一些测试的python库也不允许设置密码、令牌或其他身份验证机制。
如何保护我的 Graphite 安装?
答案1
我认为可能存在误解(很可能是我本人的错误):您似乎在谈论两个不同的组件。
第一个是石墨(https://graphite.readthedocs.io/en/latest/install.html):
Graphite 使用 Cairo 图形库渲染图形
换句话说,虽然我们通常将整个设置称为石墨,但石墨实际上是碳存储数据的数据库(Whisper 或 Ceres)的前端。
正如您所说,Basic-Auth 适用于 graphite 提供的 Web 界面,特别是渲染 API(更一般地说,是 graphite 进程/守护进程通过 HTTP 提供的服务)。
为了实现这一点(一般来说 - 我不知道你的具体情况的详细信息),你可以检查这个问题:Graphiti / Graphite 使用 Apache 的 Proxy 和 BasicAuth 请求对每个 URL / 请求进行身份验证- 他们有相反的问题,他们有不断进行身份验证(并回答为什么会这样)。
他们提供了完整的配置,但一般来说,以下块才是最重要的:
<Location "/">
require valid-user
order allow,deny
Allow from all
AuthType Basic
AuthName "Stats"
AuthBasicProvider file
AuthUserFile /etc/passwd_lp
</Location>
但是,您还提到了端口 2003,它与任何 Web API 或页面都无关。
端口 2003 被 carbon-cache(或 carbon-relay)用于接收度量数据。
每https://graphite.readthedocs.io/en/latest/carbon-daemons.html:
carbon-cache.py 通过各种协议接受指标,并尽可能高效地将其写入磁盘
它不使用 HTTP,这就是 Basic-Auth 不起作用的原因。
我不确定确保碳排放的最佳实践或惯例是什么,但我一直认为这首先是限制对服务(即港口)的访问的问题。
您可以在度量源和 carbon-cache 之间添加一个使用 HTTP 的层,以便为其设置基本身份验证。
您还可以添加类似 HAProxy 的东西来执行 SSL 终止和客户端验证,但我不确定让度量源使用 SSL/TLS 有多么容易。