Code Monkey home page Code Monkey logo

grafana-rbac-controller's Introduction

Grafana RBAC Controller

GitHub license GitHub issues Release

Grafana Google Go Nginx

Grafana is an observability stack that allows you to monitor and analyse metrics, logs, and traces.

Grafana users and resources such as dashboards, data sources and plugins can be separated from each other using Grafana organisations which provides a fully isolated Grafana experience (with different set of users and their respective roles, dashboards and other resources in each organisation). Hence Grafana organisations support multi-tenancy in a single instance of Grafana

Why Grafana RBAC Controller?

When a new user has to be onboarded to Grafana, organisation admins have to manually add the user to their respective organisations and grant appropriate user roles. Similarly organisation admins have to manually modify user permissions when required. Grafana LDAP authentication lets you map LDAP groups to Grafana organisations and roles. However, our requirement is to have Grafana org-role mapping based on google group membership rather than LDAP group membership.

Requirement: To update users with appropriate roles in various Grafana organisations based on the user’s google group membership

Grafana RBAC Controller is a proxy layer around the grafana service that provides users access to Grafana based on their google group membership. The mapping beteween grafana org-role and google group is maintained as a configuration file. We propose the following architecture for updating user permissions to various Grafana organisations on login.

The working of Grafana RBAC Controller is explained in much detail here


To build Grafana RBAC Controller

Requirements:

  1. Grafana setup in the kubernetes cluster - Link
  2. auth.proxy enabled on Grafana and other configurations to run Grafana behind a reverse proxy

Note: You can also refer to the grafana manifest here for deploying and configuring Grafana

  1. Registered domain name (Eg: groww.in)
  2. OAuth client ID and secret - Link
  • Authorized JavaScript origins: https://grafana.domain.in
  • Authorized redirect URIs: https://grafana.domain.in/oauth2/callback
  1. SSL certificates for the registered domain
  2. Google Admin SDK service account with admin.directory.group.readonly permission - Link

The entire setup can be built in kubernetes using helm-charts. Ensure to make the following changes beforing deploying the setup:

  • modify values enclosed within angular bracket - <> (such as hostname, OAuth credentials, etc...) in values.yaml
  • update the org-permissions.json based on your requirements of updating user roles to the existing Grafana organisations

You can deploy the setup in kubernetes using the following command:

cd helm-charts
helm upgrade --install grafana-rbac-controller .

To use Grafana RBAC Controller

Grafana can be accessed normally via its proxy layer from its registered URL (say grafana.domain.in)

Every time a user logs in to Grafana via the proxy by logging in using their Google credentials (OAuth authentication):

  • the user's list of google groups is fetched
  • user's role in various Grafana organisation is decided based on org-permissions.json
  • Grafana HTTP API calls are made to update the user roles
  • user gets directed to Grafana without impacting the user experience

You can set timeout to the controller API here. In case the Google Admin API or Grafana HTPP API calls take a long time to respond, the user will be directed to Grafana and the user role update process will occur in the background without disturbing the user experience. Note that default timeout duration is set at 5s.

Metrics exposed:

Prometheus metrics regarding the number of grafana-role-update errors are exposed by controller container at port 9080:

  • grafana_role_update_errors: Prometheus counter metrics which increments on events when updating of user roles to Grafana failed due to unpredictable reasons. Check the pod logs for debugging.
  • timeout_errors: Prometheus counter metrics which increments on events when controller API timed out

Golang application health metrics are also exposed along with the above metrics

grafana-rbac-controller's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

grafana-rbac-controller's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.