使用基本身份验证保护 Prometheus API 和 UI 端点
Prometheus 支持 基本身份验证 (也称为“basic auth”)连接到 Prometheus 的 表达式浏览器和 HTTP API。
注意本教程涵盖了连接到 Prometheus 实例的基本身份验证。对于 Prometheus 实例连接到 抓取目标 的连接,也支持基本身份验证。
哈希密码
假设您希望要求所有访问 Prometheus 实例的用户提供用户名和密码。在此示例中,我们将使用 admin 作为用户名,并选择您喜欢的任何密码。
首先,生成一个密码的 bcrypt 哈希值。为了生成哈希密码,我们将使用 python3-bcrypt。
假设您使用的是类 Debian 发行版,让我们通过运行 apt install python3-bcrypt 来安装它。还有其他生成哈希密码的替代方法;用于测试,您还可以使用 网络上的 bcrypt 生成器 。
这是一个使用 python3-bcrypt 提示输入密码并对其进行哈希处理的 Python 脚本。
import getpass
import bcrypt
password = getpass.getpass("password: ")
hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
print(hashed_password.decode())
将该脚本保存为 gen-pass.py 并运行它。
$ python3 gen-pass.py
这应该会提示您输入密码。
password:
$2b$12$hNf2lSsxfm0.i4a.1kVpSOVyBCfIB51VRjgBUyv6kdnyTlgWj81Ay
在此示例中,我将“test”用作密码。
将该密码保存在某处,我们将在接下来的步骤中使用它!
创建 web.yml
让我们创建一个 web.yml 文件(文档),内容如下:
basic_auth_users:
admin: $2b$12$hNf2lSsxfm0.i4a.1kVpSOVyBCfIB51VRjgBUyv6kdnyTlgWj81Ay
您可以使用 promtool check web-config web.yml 来验证该文件。
$ promtool check web-config web.yml
web.yml SUCCESS
您可以在文件中添加多个用户。
启动 Prometheus
您可以使用 Web 配置文件如下方式启动 Prometheus:
$ prometheus --web.config.file=web.yml
测试
您可以使用 cURL 与您的设置进行交互。尝试此请求:
curl --head https://:9090/graph
由于您未能提供有效的用户名和密码,这将返回 401 Unauthorized 响应。
要成功使用基本身份验证访问 Prometheus 端点,例如 /metrics 端点,请使用 -u 标志提供正确的用户名,并在提示时提供密码。
curl -u admin https://:9090/metrics
Enter host password for user 'admin':
这应该会返回 Prometheus 指标输出,其外观应类似于此:
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.0001343
go_gc_duration_seconds{quantile="0.25"} 0.0002032
go_gc_duration_seconds{quantile="0.5"} 0.0004485
...
总结
在本指南中,您将用户名和哈希密码存储在 web.yml 文件中,然后使用所需的参数启动 Prometheus,该参数用于使用该文件中的凭据来验证访问 Prometheus HTTP 端点的用户。