Prometheus Pushgateway 的访问控制
Access Control for the Prometheus Pushgateway
我们有一个 Prometheus Pushgateway 运行 并监听从我们的 AWS Lambda 函数推送的指标。但是,URL 可以通过 public 访问 Pushgateway,这可能会带来一些安全问题。我们想知道是否有任何方法可以为 Pushgateway 添加一层保护,使其 public 无法访问?
我发现这个 Github 线程可以回答这个问题:
https://github.com/prometheus/pushgateway/issues/281
建议在推送网关前设置反向代理。但是,我仍然对这实际上如何工作感到困惑?我们目前正在使用 Kubernetes 来部署 Prometheus。
此处的建议是使用 AWS 内部负载均衡器使 Pushgateway 成为内部 URL,然后创建一个 AWS 私有托管区域将您的 VPC 附加到该区域,下一步将是在同一个 VPC 中部署 lambda。
这应该可以解决安全问题。
您可以通过使用 TLS 机密作为入口规则在入口控制器中包含身份验证。
下面是一个示例,展示了如何为您的入口生成基本身份验证:
https://kubernetes.github.io/ingress-nginx/examples/auth/basic/
此外,不要忘记在您的客户端中包含 Python 处理程序函数以设置身份验证 header,如此处指出:
https://github.com/prometheus/client_python#handlers-for-authentication
你说得对,这里需要反向代理。我也遇到了同样的问题,所以你的 prometheus/pushgateway.
前面需要 nginx
首先,使用 this article 安装 nginx(如果您已经配置了 prometheus,则可以从第 8 步 — 保护 Prometheus 开始):
我的 nginx 配置:
events { }
http {
upstream prometheus {
server 127.0.0.1:9090;
keepalive 64;
}
upstream pushgateway {
server 127.0.0.1:9091;
keepalive 64;
}
server {
root /var/www/example;
listen 0.0.0.0:80;
server_name __;
location / {
auth_basic "Prometheus server authentication2";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://prometheus;
}
}
server {
root /var/www/example;
listen 0.0.0.0:3001;
server_name __;
location / {
auth_basic "Pushgateway server authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://pushgateway;
}
}
}
我的 pushgateway.service 文件:
[Unit]
Description=Pushgateway
Wants=network-online.target
After=network-online.target
[Service]
User=pushgateway
Group=pushgateway
Type=simple
ExecStart=/usr/local/bin/pushgateway --web.listen-address="127.0.0.1:9091" --web.telemetry-path="/metrics" --persistence.file="/tmp/metric.store" --persistence.interval=5m --log.level="info" --log.format="logger:stdout?json=true"
[Install]
WantedBy=multi-user.target
重要的是设置:--web.listen-address="127.0.0.1:9091",而不是 ":9091" - 这样它只会暴露给本地主机。
通过 nginx pushgateway 将可以访问端口 3001,端口 9091 将无法访问 public。需要基本身份验证才能访问或推送指标。
关于如何使用 Postman 进行测试,您可以找到 here
我们有一个 Prometheus Pushgateway 运行 并监听从我们的 AWS Lambda 函数推送的指标。但是,URL 可以通过 public 访问 Pushgateway,这可能会带来一些安全问题。我们想知道是否有任何方法可以为 Pushgateway 添加一层保护,使其 public 无法访问?
我发现这个 Github 线程可以回答这个问题: https://github.com/prometheus/pushgateway/issues/281
建议在推送网关前设置反向代理。但是,我仍然对这实际上如何工作感到困惑?我们目前正在使用 Kubernetes 来部署 Prometheus。
此处的建议是使用 AWS 内部负载均衡器使 Pushgateway 成为内部 URL,然后创建一个 AWS 私有托管区域将您的 VPC 附加到该区域,下一步将是在同一个 VPC 中部署 lambda。
这应该可以解决安全问题。
您可以通过使用 TLS 机密作为入口规则在入口控制器中包含身份验证。 下面是一个示例,展示了如何为您的入口生成基本身份验证:
https://kubernetes.github.io/ingress-nginx/examples/auth/basic/
此外,不要忘记在您的客户端中包含 Python 处理程序函数以设置身份验证 header,如此处指出:
https://github.com/prometheus/client_python#handlers-for-authentication
你说得对,这里需要反向代理。我也遇到了同样的问题,所以你的 prometheus/pushgateway.
前面需要 nginx首先,使用 this article 安装 nginx(如果您已经配置了 prometheus,则可以从第 8 步 — 保护 Prometheus 开始):
我的 nginx 配置:
events { }
http {
upstream prometheus {
server 127.0.0.1:9090;
keepalive 64;
}
upstream pushgateway {
server 127.0.0.1:9091;
keepalive 64;
}
server {
root /var/www/example;
listen 0.0.0.0:80;
server_name __;
location / {
auth_basic "Prometheus server authentication2";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://prometheus;
}
}
server {
root /var/www/example;
listen 0.0.0.0:3001;
server_name __;
location / {
auth_basic "Pushgateway server authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://pushgateway;
}
}
}
我的 pushgateway.service 文件:
[Unit]
Description=Pushgateway
Wants=network-online.target
After=network-online.target
[Service]
User=pushgateway
Group=pushgateway
Type=simple
ExecStart=/usr/local/bin/pushgateway --web.listen-address="127.0.0.1:9091" --web.telemetry-path="/metrics" --persistence.file="/tmp/metric.store" --persistence.interval=5m --log.level="info" --log.format="logger:stdout?json=true"
[Install]
WantedBy=multi-user.target
重要的是设置:--web.listen-address="127.0.0.1:9091",而不是 ":9091" - 这样它只会暴露给本地主机。
通过 nginx pushgateway 将可以访问端口 3001,端口 9091 将无法访问 public。需要基本身份验证才能访问或推送指标。
关于如何使用 Postman 进行测试,您可以找到 here