普罗米修斯推送网关的访问控制



我们有一个 Prometheus Pushgateway 正在运行并侦听来自 AWS Lambda 函数的指标推送。但是,公众可以访问推送网关的 URL,这可能会带来一些安全问题。我们想知道是否有任何方法可以为 Pushgateway 添加一层保护,使其无法公开访问?

我发现了这个 Github 线程,可以回答这个问题: https://github.com/prometheus/pushgateway/issues/281

它建议在推送网关前面设置一个反向代理。但是,我仍然对此实际如何工作感到困惑?我们目前正在使用 Kubernetes 来部署 Prometheus。

可以使用 TLS 机密作为入口规则,在入口控制器中包含身份验证。 以下示例演示如何为入口生成基本身份验证:

https://kubernetes.github.io/ingress-nginx/examples/auth/basic/

另外,不要忘记在客户端中包含 Python 处理程序函数来设置身份验证标头,如下所示:

https://github.com/prometheus/client_python#handlers-for-authentication

此处的建议是使用 AWS 内部负载均衡器将推送网关的 URL 设为内部,创建 AWS 私有托管区域,将您的 VPC 附加到此区域,然后下一步是在同一 VPC 中部署 lambda。

这应该可以解决安全问题。

你是对的,你需要反向代理。我也遇到了同样的问题,所以你需要在你的普罗米修斯/推送网关前面使用 nginx。

首先,使用本文安装 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;
} 
}
}

我的推送网关服务文件 :

[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推送网关将可访问端口3001,端口9091将不公开。需要基本身份验证才能访问或推送指标。

关于如何使用邮递员进行测试,您可以在此处找到

相关内容

  • 没有找到相关文章

最新更新