Сразу же была найдена статья.
Принцип работы ясен. В 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 и проверяем.