Контроль доступа для шлюза Prometheus Pushgateway
У нас работает шлюз Prometheus Pushgateway, который прослушивает данные о показателях от нашей функции AWS Lambda. Однако URL-адрес Pushgateway доступен для всех, что может вызвать некоторые проблемы с безопасностью. Нам было интересно, можно ли как-нибудь добавить уровень защиты к Pushgateway, чтобы он не был общедоступным?
Я нашел эту ветку Github, которая может ответить на этот вопрос:https://github.com/prometheus/pushgateway/issues/281
Было предложено установить обратный прокси перед шлюзом. Однако я все еще не понимаю, как это может работать? В настоящее время мы используем Kubernetes для развертывания Prometheus.
3 ответа
Вы можете включить аутентификацию в свой контроллер входящего трафика, используя секрет TLS в качестве правила входа. Вот пример, который показывает, как сгенерировать базовую аутентификацию для вашего входа:
https://kubernetes.github.io/ingress-nginx/examples/auth/basic/
Кроме того, не забудьте включить функцию обработчика Python в свой клиент, чтобы установить заголовок auth, как указано здесь:
Вы правы, здесь нужен обратный прокси. Я также столкнулся с той же проблемой, поэтому вам нужен nginx перед вашим prometheus/pushgateway.
Сначала установите nginx по этой статье (можно начать с Шага 8 — Защита Prometheus, если вы уже настроили 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 будет непубличным. Базовая аутентификация потребуется для доступа или отправки метрик.
О том, как протестировать его с помощью Postman, вы можете узнать здесь
Здесь предлагается сделать URL-адрес Pushgateway Internal с помощью AWS Internal Load Balancer, создать частную размещенную зону AWS, присоединить ваш VPC к этой зоне, после чего следующим шагом будет развертывание лямбда-выражения в том же VPC.
Это должно решить проблему безопасности.