This article is also available in the following other languages / Dieser Beitrag ist auch in folgenden anderen Sprachen verfügbar: English

Grafana Gastzugriff mit mehreren Organisationen

2020-06-10 - christian - grafana, linux, nginx, server

Grafana unterstützt den Zugriff auf Dashboards ohne sich einloggen zu müssen nur für eine Organisation, welche fest in der Server Konfiguration eingestellt werden muss.

Über einen Trick kann man dennoch mehrere Organisationen öffentlich verfügbar machen. Aktiviert man die Proxy Authentication, kann ein Reverse Proxy einen Header an Grafana senden, welchen Grafana ohne weitere Abfragen zur Anmeldung benutzt.

Grafana Konfiguration:

[auth.proxy]
enabled = true
header_name = X-WEBAUTH-USER
header_property = username
auto_sign_up = false
;ldap_sync_ttl = 60
whitelist = 127.0.0.1
headers =
enable_login_token = true

Sobald ein Reverse Proxy, welcher sich wegen der Whitelist auf dem gleichen Server befinden muss, einen X-WEBAUTH-USER mitsendet, nutzt Grafana den Wert des Headers um einen Benutzer zu finden, der den entsprechenden Namen besitzt.

Der Account muss zuvor in Grafana angelegt worden sein.

Nun kommen wir zur Dark Magic. Um anonymen Zugriff und die Anmeldung mit einem Account gleichzeitig zu ermöglichen, nutzen wir einfach zwei Domains.

Hier eine Umsetzung mit NGINX:

# set auto login username based on domain name
map $http_host $grafana_user {
    hostnames;
    # per default, don't use the header login at all
    default "";
    # if it is the guest domain, use 'anon' as account
    anonmetrics.example.com "anon";
}

# listen for HTTPS requests
# and do the proxing to the grafana backend
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name metrics.example.com anonmetrics.example.com;
    index index.html;
    root /var/www/officemetrics;

    ssl_certificate /root/.acme.sh/metrics.example.com/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/metrics.example.com/metrics.example.com.key;

    location /grafana/ {
        proxy_pass http://127.0.0.1:3000/;
        proxy_buffering                       off;
        proxy_set_header X-Real-IP            $remote_addr;
        proxy_set_header X-Forwarded-For      $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto    $scheme;

        # enforce the default domain for grafana
        # otherwise grafana would do a redirect to the
        # in grafana.ini configured domain
        proxy_set_header Host                 metrics.example.com;

        # send the with map {} defined user
        # by proxy header to grafana
        proxy_set_header X-WEBAUTH-USER       $grafana_user;
    }

}

Immer wenn https://anonmetrics.example.com/grafana/ aufgerufen wird, sorgt das map {} dafür, dass $grafana_user von einer leeren Zeichenkette auf anon gesetzt wird. $grafana_user wird dann als X-WEBAUTH-USER an das Grafana Backend gesendet.

Wird allerdings https://metrics.example.com/grafana/ aufgerufen, ist $grafana_user und somit auch X-WEBAUTH-USER leer und es wird kein automatischer Login ausgeführt. Die Benutzer haben dann die Möglichkeit, sich ganz normal anzumelden.

In Grafana kann jetzt pro Dashboard oder Organisation festgelegt werden, ob der anon Benutzer Zugriff erhalten soll:

Grafana Permissions

Have fun!


serverless.industries BG by Carl Lender (CC BY 2.0)
e4c06c3b 2020-07-10 09:53