菜单

配置认证代理认证

您可以配置Grafana,让HTTP反向代理处理身份验证。流行的web服务器有一个非常广泛的可插入认证模块列表,其中任何一个都可以与AuthProxy功能一起使用。下面我们将详细介绍认证代理的配置选项。

(身份验证。#默认为false,但设置为true以启用此功能enabled = true # HTTP头名称,将包含用户名或电子邮件header_name = X-WEBAUTH-USER # HTTP头属性,默认为' username ',但也可以是' email ' header_property = username #设置为' true '以启用在Grafana DB中不存在的用户的自动注册。默认为' true '。auto_sign_up = true #以分钟为单位定义缓存时间#如果结合Grafana LDAP集成,它也是同步间隔sync_ttl = 60 #通过配置IP地址列表限制认证代理请求的来源。#这可以用来防止用户欺骗X-WEBAUTH-USER头。#例子的白名单= 192.168.1.1,192.168.1.0/24 2001:23日,2001::0/120的白名单= #选择性地同步其他用户属性定义多个消息头#例子的头=名字:X-WEBAUTH-NAME角色:X-WEBAUTH-ROLE电子邮件:X-WEBAUTH-EMAIL组:X-WEBAUTH-GROUPS”标题= #非ascii字符串在头值编码使用quoted-printable编码;headers_encoded = false #查看更详细的文档在这个下面设置enable_login_token = false

通过curl与Grafana的AuthProxy交互

curl -H "X-WEBAUTH-USER: admin" http://localhost:3000/api/users [{"id":1, "name":"", "login":"admin", "email":"admin@localhost", "isAdmin":true}]

对象发送第二个请求/ api /用户方法,该方法将返回登录用户的详细信息。我们将使用这个请求来展示Grafana如何将我们指定的新用户自动添加到系统中。这里我们创建了一个名为“anthony”的新用户。

curl -H "X-WEBAUTH-USER: anthony" http://localhost:3000/api/user {"email":"anthony", "name":"" login":"anthony", "theme":"" ", "orgId":1, "isGrafanaAdmin":false}

使Apache的认证与Grafana的AuthProxy一起工作

我将演示如何使用Apache进行用户身份验证。在这个例子中,我们使用BasicAuth和Apache基于文本文件的身份验证处理程序,即htpasswd文件。但是,可以使用任何可用的Apache身份验证功能。

Apache BasicAuth

在本例中,我们使用Apache作为Grafana前面的反向代理。Apache在将请求转发到Grafana后端服务之前处理用户的身份验证。

Apache配置

 ServerAdmin webmaster@authproxy ServerName authproxy ErrorLog "logs/authproxy-error_log" CustomLog "logs/authproxy-access_log" common  AuthType Basic AuthName GrafanaAuthProxy AuthBasicProvider file AuthUserFile /etc/apache2/grafana_htpasswd Require valid-user RewriteEngine On RewriteRule .* - [E=PROXY_USER:%{LA-U:REMOTE_USER},NS] RequestHeader set X-WEBAUTH-USER "%{PROXY_USER} E  RequestHeader unset Authorization ProxyRequests Off ProxyPass /http://localhost:3000/ ProxyPassReverse / http://localhost:3000/  .使用实例
  • 虚拟主机配置的前四行是标准的,所以我们不会详细讨论它们的作用。

  • 我们使用代理> <配置块,用于将我们的身份验证规则应用到每个代理请求。这些规则包括要求基本身份验证,其中user:password凭据存储在/etc/apache2/grafana_htpasswd文件。方法创建此文件htpasswd命令。

    • 配置的下一部分是棘手的部分。我们使用Apache的重写引擎来创建X-WEBAUTH-USER头,用经过身份验证的用户填充。

      • RewriteRule .* - [E=PROXY_USER:%{LA-U:REMOTE_USER}, NS]这句话有点神奇。它所做的是,对于每个请求使用rewriteEngines前置式(LA-U)特性来确定在处理请求后将REMOTE_USER变量设置为什么。然后将结果赋值给变量PROXY_USER。这是必要的,因为REMOTE_USER变量对于RequestHeader函数不可用。

      • set X-WEBAUTH-USER " %{PROXY_USER}e ":通过验证的用户名现在存储在PROXY_USER变量中,我们创建一个新的HTTP请求头,它将被发送到我们的后端Grafana,其中包含用户名。

  • RequestHeader取消授权在HTTP请求被转发到Grafana之前删除授权头。这确保了Grafana不会尝试使用这些凭证对用户进行身份验证(BasicAuth是Grafana中支持的身份验证处理程序)。

  • 最后3行是标准的反向代理配置,将所有经过身份验证的请求定向到运行在端口3000上的Grafana服务器。

使用Docker的完整演练。

对于本例,我们使用官方的Grafana Docker映像码头工人中心

  • 创建文件grafana.ini包含以下内容
[users] allow_sign_up = false auto_assign_org = true auto_assign_org_role = Editor [auth.]header_name = X-WEBAUTH-USER header_property = username auto_sign_up = true

启动Grafana容器,使用我们自定义的Grafana .ini进行替换/etc/grafana/grafana.ini.我们没有为这个容器公开任何端口,因为它只会被我们的Apache容器连接。

Docker运行-i -v $(pwd)/grafana.ini:/etc/grafana/grafana.ini——name grafana grafana/grafana

Apache容器

对于本例,我们使用官方Apache docker映像码头工人中心

  • 创建文件httpd . conf包含以下内容
ServerRoot "/usr/local/apache2" Listen 80 LoadModule mpm_event_module modules/mod_mpm_event. txtso LoadModule authn_file_module modules/mod_authn_file. txt所以LoadModule authn_core_module modules/mod_authn_core。所以LoadModule authz_host_module模块/ mod_authz_host。so LoadModule authz_user_module modules/mod_authz_user. txt所以LoadModule authz_core_module modules/mod_authz_core。so LoadModule auth_basic_module modules/mod_auth_basic. txt那么LoadModule log_config_module modules/mod_log_config. txt那么LoadModule env_module modules/mod_env。所以LoadModule headers_module modules/mod_headers。所以LoadModule unixd_module modules/mod_unixd。所以LoadModule rewrite_module modules/mod_rewrite。所以LoadModule proxy_module modules/mod_proxy。所以LoadModule proxy_http_module modules/mod_proxy_http。so  User daemon Group daemon  ServerAdmin you@example.com  AllowOverride none Require all denied  DocumentRoot "/usr/local/apache2/htdocs" ErrorLog /proc/self/ dd /2 LogLevel error  LogFormat "%h %l %u %t \"%r\" %{User- agent}i\" %>s %b \"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" %{User- agent}i\"combinedio  CustomLog /proc/self/fd/1 common   AuthType Basic AuthName GrafanaAuthProxy AuthBasicProvider file AuthUserFile /tmp/htpasswd Require valid-user RewriteEngine On RewriteRule .* - [E=PROXY_USER:%{LA-U:REMOTE_USER},NS] RequestHeader set X-WEBAUTH-USER "%{PROXY_USER} E "  RequestHeader unset Authorization ProxyRequests Off ProxyPass / http://grafana:3000/ ProxyPassReverse / http://grafana:3000/
  • 创建一个htpasswd文件。我们创建一个新用户安东尼有密码密码

    Htpasswd -bc Htpasswd安东尼的密码
  • 使用自定义httpd.conf和htpasswd文件启动httpd容器。容器将在端口80上侦听,并创建到grafana容器,以便该容器可以解析主机名grafana到Grafana容器的IP地址。

    Docker运行命令-i -p 80:80——link grafana:grafana -v $(pwd)/httpd.conf:/usr/local/apache2/conf/httpd.conf -v $(pwd)/htpasswd:/tmp/htpasswd httpd:2.4 .conf . httpd.conf

使用grafana。

随着我们的Grafana和Apache容器的运行,您现在可以连接到http://localhost/,并使用我们在htpasswd文件中创建的用户名/密码登录。

团队同步(企业版)

仅在Grafana Enterprise v6.3+中可用

使用Team Sync,可以在身份验证提供者和Grafana中的团队之间建立同步。您可以将Grafana值作为HTTP报头的一部分发送,并让Grafana将它们映射到您的团队结构。这允许您自动将用户放入特定的团队。

为了支持该特性,认证代理允许可选的标头来映射其他用户属性。支持团队同步的特定属性是

#可选定义更多的头文件来同步其他用户属性头文件= "组:X-WEBAUTH-GROUPS"

你可以使用X-WEBAUTH-GROUPS头为每个用户发送团队信息。具体来说,就是用户所属的Grafana组id的集合。

首先,我们需要设置身份验证提供程序和Grafana之间的映射。遵循这些指令向Grafana中的团队添加组。

一旦完成。您可以通过查询API来验证映射。

#首先,检查您的团队,并获得我们想要检查团队的团队的对应ID。curl -H "X-WEBAUTH-USER: admin" http://localhost:3000/api/teams/search {"totalCount": 2, "teams": [{"id": 1, "orgId": 1, "name": "Core", "email": "core@www.tubolov.com", "avatarUrl": "/avatar/327a5353552d2dc3966e2e646908f540", "memberCount": 1, "permission": 0}, {"id": 2, "orgId": 1, "name": "Loki", "email": "loki@www.tubolov.com", "avatarUrl": "/avatar/102f937d5344d33fdb37b65d430f36ef", "memberCount": 0, "permission": 0}], "page": 1, "perPage":然后,查询该特定团队的组。在本例中,Loki团队的ID为“2”。curl -H "X-WEBAUTH-USER: admin" http://localhost:3000/api/teams/2/groups [{"orgId": 1, "teamId": 2, "groupId": "lokiTeamOnExternalSystem"}]

最后,每当Grafana接收到头为的请求时X-WEBAUTH-GROUPS: lokiTeamOnExternalSystem,经过认证的用户将被放入指定的团队。通过使用逗号分隔的值来支持在多个团队中放置。lokiTeamOnExternalSystem, CoreTeamOnExternalSystem

curl -H "X-WEBAUTH-USER: leonard" -H "X-WEBAUTH-GROUPS: lokiteamOnExternalSystem" http://localhost:3000/dashboards/home {"meta": {"isHome": true, " csave ": false,…}

有了这个,用户伦纳德将自动加入洛基团队,作为Grafana认证的一部分。

了解更多关于Team Sync的信息

enable_login_token设置为真正的在认证代理报头验证成功后,Grafana将为用户分配一个登录令牌和cookie。您只需配置您的认证代理,为/login路由提供报头。通过其他路由的请求将使用cookie进行身份验证。

使用设置login_maximum_inactive_lifetime_duration而且login_maximum_lifetime_duration(认证)控制会话的生存时间。阅读更多关于登录令牌的信息