Skip to content

Authentication proxy to limit access to Grafana data sources per team

License

Notifications You must be signed in to change notification settings

DmitryShaburov/grafana-datasource-auth-proxy

Repository files navigation

Grafana Datasource Auth Proxy

Limit access to Grafana datasources per team.

Table of Contents

About

Project topic

When you're using Grafana datasource proxy feature (Access: Server (default) in datasource settings), free version of Grafana does not implements any ACLs for that, and any user can query every datasource and get metrics directly from it, even with Viewer rights.

Here is related issue.

Grafana Enterprise although implements this permissions.

This project implements simple reverse proxy, that should be installed to handle api/datasources/proxy.

Here how it works:

  • Check that requested path actually contains api/datasources/proxy to avoid proxying everything else;
  • Check that there is grafana_session authentication cookie present;
  • Get list of user's teams by authentication cookie;
  • Check that at least on of the user's team have access to requested datasource;
  • If everything is OK pass request to Grafana

Limitations

Project is not production-ready and was build as an experiment. Use on your own risk.

Project supports only MySQL Grafana database backend (PR's welcome!)

Project was only tested againts Prometheus data sources

Project was only tested against Grafana 7

Project doest not supports non-standard Grafana auth cookie name (PR's welcome!)

Usage

Installation

There are multiple ways of installing grafana-datasource-auth-proxy.

Running from Helm chart

helm repo add grafana-datasource-auth-proxy https://dmitryshaburov.github.io/grafana-datasource-auth-proxy/
helm repo update
helm install [RELEASE_NAME] grafana-datasource-auth-proxy/grafana-datasource-auth-proxy

Running as Docker container

dshaburov/grafana-datasource-auth-proxy

docker run -p 9608:9608 -v /etc/grafana-datasource-auth-proxy/config.yaml:/etc/grafana-datasource-auth-proxy/config.yaml dshaburov/grafana-datasource-auth-proxy:latest

Precompiled binaries

Precompiled binaries for released versions are available in the Releases section.

Compiling the binary

You can checkout the source code and build manually:

git clone https://github.com/DmitryShaburov/grafana-datasource-auth-proxy.git
cd grafana-datasource-auth-proxy
go build .
./grafana-datasource-auth-proxy -config=config.yaml

Configuration

Flags

Flag Environment Variable Default Value Description
config CONFIG_FILE /etc/grafana-datasource-auth-proxy/config.yaml Path to configuration file
listen-address LISTEN_ADDRESS :3000 The address to listen on for HTTP requests
grafana-url GF_SERVER_DOMAIN grafana Grafana remote origin host
grafana-secret GF_SECURITY_SECRET_KEY SW2YcwTIb9zpOOhoPsMm Grafana encryption secret
db-database GF_DATABASE_NAME grafana Grafana database name
db-host GF_DATABASE_HOST 127.0.0.1:3306 Grafana database host and port
db-user GF_DATABASE_USER Grafana database user
db-pass GF_DATABASE_PASSWORD Grafana database password
log-format LOG_FORMAT txt Log format, valid options are txt and json
log-level LOG_LEVEL info Log level, valid options are trace, debug, info, warn, error, fatal and panic

YAML config

See config.yaml for example configuration file.

Helm chart

See values.yaml for full list of available Helm chart values and their default configuration.

Contribution

PRs on Feature Requests, Bug fixes are welcome. Feel free to open an issue and have a discussion first. Contributions on more alert scenarios, more metrics are also welcome and encouraged.

License

MIT

About

Authentication proxy to limit access to Grafana data sources per team

Resources

License

Stars

Watchers

Forks

Packages

No packages published