Сразу же была найдена статья.
Принцип работы ясен. В grafana есть специальный механизм auth.proxy, который может получать данные в виде переменных окружения. В том примере используется веб-сервер Apache, мы же воспользуемся более привычным Nginx.
Ставим grafana, nginx и libpam-radius-auth штатным для дистрибутива способом.
Настраиваем pam:
/etc/pam_radius_auth.conf
radius-server-ip:port secretДелаем этот файл доступным для чтения пользователю, под которым работает nginx (у меня это www-data):
chown www-data:www-data /etc/pam_radius_auth.conf/etc/pam.d/nginx
auth required pam_radius_auth.so debug client_id=grafana conf=/etc/pam_radius_auth.conf account required pam_permit.so session required pam_permit.so
Настраиваем nginx:
server {
listen 443 ssl;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/cert.key;
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security 'max-age=604800';
server_name grafana.example.com;
access_log /var/log/nginx/gr.access.log;
error_log /var/log/nginx/gr.error.log;
location / {
auth_pam "Auth";
auth_pam_service_name "nginx";
proxy_pass http://localhost:3000/;
proxy_set_header X-WEBAUTH-USER $remote_user;
proxy_set_header Authorization "";
}
}
Настраиваем grafana
/etc/grafana/grafana.ini:
.... [auth.proxy] enabled = true ....
Перезапускаем grafana-server и nginx и проверяем.