Grafana: [Demande de fonctionnalité] Ajouter l'utilisateur actuel en tant que variable de modèle

Créé le 5 mai 2016  ·  45Commentaires  ·  Source: grafana/grafana

Existe-t-il un moyen d'utiliser les détails de "l'utilisateur grafana actuel" dans une requête sur un back-end influxdb, que ce soit son adresse e-mail ou son nom d'utilisateur?

Condition: je stocke les données personnelles de plusieurs (peut-être des milliers) d'utilisateurs. Mon choix d'implémentation actuel est une seule base de données influxdb et une seule mesure, avec une balise pour identifier l'utilisateur auquel appartient chaque mesure. J'ai la liberté d'utiliser l'e-mail, le nom d'utilisateur ou tout autre élément qui fonctionne comme l'identité réelle de l'utilisateur dans cette balise.

Idéalement, j'aurais en quelque sorte grafana injecter une clause comme "where user = fred" afin que le back-end ne retourne toujours que les données relatives à cet utilisateur particulier.

Sécurité: je comprends les risques de sécurité et que tout utilisateur averti + malveillant pourra utiliser les outils http pour sonder les données d'autres utilisateurs. Cependant, j'ai l'intention d'ajouter une vérification pour cela dans le frontal nginx qui agit comme un proxy inverse pour grafana. Mon plan est que nginx inspectera les appels API entrants vers GET / api / datasources / proxy /: datasourceId / * et s'assurera qu'ils contiennent une clause where qui correspond à l'utilisateur actuellement connecté. Cela semble un morceau de gâteau :)

aredashboartemplating help wanted prioritnice-to-have typfeature-request

Commentaire le plus utile

Ce serait toujours bien de l'avoir comme variable intégrée

Tous les 45 commentaires

Ce n'est pas possible pour le moment.

J'ai réussi à contourner ce problème avec un proxy inverse qui intercepte les appels d'API "/ api / datasources / proxy /: datasourceId / *" dans le back-end grafana et injecte une clause where. En conjonction avec le comportement de proxy d'authentification impressionnant de grafana, je n'ai plus besoin de cette fonctionnalité maintenant. En fait, sur la base de certains des points de vue précédemment exprimés par Torkelo sur la sécurité et du manque d'application du niveau utilisateur par les bases de données dorsales, je pense que ce comportement n'a probablement pas sa place dans Grafana pour le moment.

@abraae Pouvez-vous expliquer comment vous implémentez cette fonctionnalité?

@abraae +1
pourriez-vous expliquer ce que vous avez fait?

Désolé, je n'ai pas le temps de documenter ce que j'ai fait mais de mémoire:

  • utiliser nginx comme proxy inverse devant le serveur grafana, c'est-à-dire que tout le trafic entrant vers le serveur grafana passe par nginx
  • configurer nginx conf. pour capturer les appels à / api / datasources / proxy /: datasourceId / *
  • au lieu de les passer, réécrivez plutôt à l'aide de nginx pour ajouter une clause where

Donc, fondamentalement, ce que vous faites est toujours de forcer une clause where supplémentaire dans tous les appels d'API qui retournent au back-end grafana.

Il y avait beaucoup à faire pour le faire fonctionner de mémoire :) Désolé, je ne peux pas être plus utile.

    -

@abraae Thx pour votre réponse.
Est-il possible de voir ce que vous avez fait dans nginx.conf?

Bien sûr, voici nginx.conf.

[oups faux fichier - voir ci-dessous]

Je ne vois pas dans votre fichier comment vous capturez / api / datasources / proxy /: datasourceId / *
Qu'est-ce que tu as fait ? Où est votre règle de réécriture ?? :-)

Ah désolé, mauvais fichier, essayez ceci: https://gist.github.com/abraae/c209b537350b2b2d9703ba126872cc3f

Ce serait toujours bien de l'avoir comme variable intégrée

Le fait de prendre le nom d'utilisateur comme variable dans la requête est-il implémenté?

Je voudrais également cette fonction et la raison de celle-ci comme suit:

Supposons que vous ayez un tableau de bord dans lequel vous répertoriez les demandes d'un outil ITSM et que vous souhaitez que les graphiques affichent uniquement les demandes attribuées à l'utilisateur connecté.
La possibilité de définir une variable dans le tableau de bord qui pointe vers le nom d'utilisateur connecté résoudrait notre problème dans l'entreprise où je travaille (International BIG Company).

Un autre exemple est d'utiliser le nom d'utilisateur connecté pour y accéder et de l'utiliser pour afficher uniquement les données liées à ce service.

L'ajout d'une variable globale à utiliser dans les tableaux de bord qui pointent vers l'utilisateur connecté afin qu'elle puisse être utilisée ne devrait pas être si difficile à faire.

Disons:
$ Grafana.User.Email = quelque chose @
$ Grafana.User.Name = Gandolf
$ Grafana.User.Surname = TheWize
$ Grafana.User.Username = GDog

Cela résoudrait beaucoup de problèmes et de limitations que les gens ont avec Grafana, et je vous recommande fortement d'envisager de l'implémenter.

Des nouvelles sur celui-ci?

Une mise à jour pour ceci?

Je trouverais également cette fonctionnalité très utile.

J'aurais aussi vraiment besoin de cette fonctionnalité atm. Je travaille sur le déploiement de tableaux de bord spécifiques à l'utilisateur avec des informations financières qui ne devraient afficher que les données des utilisateurs respectifs. Faire 25 copies du même tableau de bord à cette fin est inutilement fastidieux.

+1

+1

Je souhaite utiliser cette valeur pour restreindre l'accès aux variables (autorisation)
Ce serait la meilleure solution pour cela

+1
Le cas d'utilisation est qu'un seul utilisateur pouvait voir les informations de son propre service.
Il pourrait être utilisé comme ACL au lieu de créer un nouveau tableau de bord de copie pour chaque département.

+1

salut à tous, je voudrais intégrer Grafana avec le fournisseur d'identité OIDC en utilisant le flux de code d'autorisation [1] pour avoir le SSO entre les différentes interfaces utilisateur fournies par la plate-forme. Comme exigence principale, je dois garantir la multi-location, donc la meilleure solution devrait être d'utiliser l'une des revendications utilisateur renvoyées par l'IdP dans le JWT comme paramètre de requête utilisé par grafana pour récupérer des données de la base de données, en particulier j'utiliserais la revendication qui contient le tenantId auquel appartient l'utilisateur connecté.

[1] https://grafana.com/docs/auth/generic-oauth/

Quelqu'un a-t-il mis en œuvre quelque chose de similaire ou a des suggestions pour le faire?

Merci d'avance

+1

Mon cas d'utilisation spécifique serait de créer des variables de modèle pour appliquer différents filtrages (valeurs d'étiquette Prometheus) en fonction de l'utilisateur connecté.

En d'autres termes, le contenu du champ "regex" de la variable modèle pourrait être dynamique et dépendant de l'utilisateur connecté.

Pour ce faire, chaque utilisateur de Grafana peut disposer de certains champs de métadonnées facultatifs définis par l'administrateur au moment de la création de l'utilisateur. Ces champs de métadonnées facultatifs peuvent être référencés à partir du champ «regex» de la variable de modèle.

Cela pourrait permettre d'appliquer ce filtrage «dynamique» dont le réglage de la valeur est contrôlé par un administrateur de niveau supérieur.

Merci beaucoup!

+1

$__currentUserEmail serait génial.

+1

+1

+1 J'adorerais créer un tableau de bord pour les utilisateurs de notre université afin qu'ils puissent voir leurs statistiques WiFi et VPN en fonction de leur nom d'utilisateur. Cela pourrait les aider à dépanner leur connexion avant d'appeler le service d'assistance!

+1

Il me semble qu'il n'y a pas de progrès: (Ce serait très utile.

++

Salut!

Quelqu'un a réussi à implémenter cette solution avec le code @abraae ?
J'essaye de l'utiliser avec grafana-azure-data-explorer (Kusto DB)

Merci!!

+1

Salut,

Ma solution de contournement est basée sur la source de données SimpleJSON (https://github.com/grafana/simple-json-datasource)

L'idée principale est d'activer l'en-tête X-Grafana-User et de le renvoyer de DS pour remplir une variable de modèle

Implémentation: https://github.com/rlklaser/grafana-logged-user

@rlklaser est ici un exemple pour Express JS?
ou pouvez-vous partager un fichier .war ?
cela ne fonctionne pas pour moi sur Express JS (((

app.get('/query', function (req, res) {
  res.status(200);
  res.json({ username: req.header('X-Grafana-User') })
});

app.get('/search', function (req, res) {
  res.status(200);
  res.json({ username: req.header('X-Grafana-User') })
});

et j'aimerais utiliser https://github.com/simPod/grafana-json-datasource comme DS

@baur doit changer grafana defaults.ini en:

[dataproxy]

journalisation = vrai
send_user_header = vrai

Cette demande a été créée il y a deux ans et je n'ai vu aucune mise à jour à ce sujet. Je pense que ce serait un outil très utile pour de nombreuses personnes, dont moi.

Y a-t-il des mises à jour à ce sujet?

Comment obtenir le résultat de / api / user / teams dans un GRAFANA SimpleJson et quelle est la requête pour obtenir les valeurs de "nom" dans une variable?
Exemple de résultat de l'API Grafana http sur https://www.logiserv.re/api/user/teams

Nous avons également grandement besoin de cette fonctionnalité pour les tableaux de bord personnalisés

+1

Une mise à jour à ce sujet maintenant que la création de modèles a ajouté le support des variables globales pour __org? https://github.com/grafana/grafana/pull/21790

Il semble qu'en ajoutant une variable __user utiliserait le même mécanisme:

    templateSrv.setGlobalVariable('__user', {
      value: {
        name: contextSrv.user.login,
        id: contextSrv.user.id,
        toString: function() {
          return this.id;
        },
      },
    });

++ 1
Équipe de développement Grafana,
Ce serait une fonctionnalité très utile et cela rendra le travail d'autorisation des données beaucoup plus facile pour nous.
Cette fonctionnalité spécifique sera cruciale pour la sécurité des données dans le déploiement multi-locataire.

++ 1, salut équipe de développement Grafana,
c'est une fonctionnalité très utile pour nous, nous voulons faire un contrôle d'accès aux données basé sur l'utilisateur pour une requête spécifique, un utilisateur différent voit une portée différente.

Grafana Dev Team, merci beaucoup pour cette fonctionnalité très utile !!!

La variable ne semble pas fonctionner lorsqu'elle est utilisée dans une requête à l'intérieur des définitions de variable des tableaux de bord.

Cette page vous a été utile?
0 / 5 - 0 notes