配置GitLab OAuth2身份认证
使GitLab OAuth2必须在GitLab注册应用程序。GitLab将生成一个客户机ID和密钥供您使用。
创建GitLab OAuth密钥
你需要创建一个GitLab OAuth应用程序。选择一个描述性的的名字,使用以下重定向的URI:
https://grafana.example.com/login/gitlab
在哪里https://grafana.example.com
是你使用的URL连接Grafana。根据需要调整,如果你不使用HTTPS或如果你使用不同的端口;例如,如果你访问Grafanahttp://203.0.113.31:3000
,您应该使用
http://203.0.113.31:3000登录/ gitlab
最后,选择read_api
的范围和提交表单。请注意,如果你不会使用GitLab组授权(即不设置allowed_groups
,见下文),您可以选择read_user
而不是read_api
的范围,从而给更多限制访问您GitLab API。
你会得到一个应用程序Id和一个秘密作为回报;我们叫他们GITLAB_APPLICATION_ID
和GITLAB_SECRET
本节的其余部分分别。
在Grafana启用GitLab
添加以下Grafana配置文件启用GitLab认证:
(auth.gitlab)enabled = true allow_sign_up = false client_id = GITLAB_APPLICATION_ID client_secret = GITLAB_SECRET scopes = read_api auth_url = https://gitlab.com/oauth/authorize token_url = https://gitlab.com/oauth/token api_url = https://gitlab.com/api/v4 allowed_groups = role_attribute_path = role_attribute_strict = false allow_assign_grafana_admin = false
您可能需要设置root_url
选择(服务器)
的回调URL是正确的。例如如果你背后Grafana代理服务。
重启Grafana后台为您更改生效。
如果你使用自己的实例GitLab代替gitlab.com
、调整auth_url
,token_url
和api_url
因此通过替换gitlab.com
主机名与你自己的。
与allow_sign_up
设置为假
,只有现有的用户可以登录使用GitLab账户,但是allow_sign_up
设置为真正的
,任何用户可以验证GitLab Grafana实例将能够登录;如果你使用公众gitlab.com
世界上,这意味着任何人都可以登录Grafana实例。
您可以限制访问给定组的成员或群体通过设置列表allowed_groups
选择。
配置刷新令牌
在Grafana v9.3后来版本。
注意:这个特性是后面的
accessTokenExpirationCheck
功能切换。
当用户登录使用OAuth提供者,Grafana验证访问令牌没有过期。当一个访问令牌到期,Grafana使用提供刷新令牌(如果存在)来获得一个新的访问令牌。
Grafana使用刷新令牌来获得一个新的访问令牌不需要用户再次登录。如果一个刷新令牌不存在,Grafana日志后的用户的系统访问令牌已经过期。
默认情况下,GitLab提供刷新令牌。
allowed_groups
限制访问一个或多个成员的经过身份验证的用户GitLab组,设置allowed_groups
组织一个逗号或空格分隔的列表。例如,如果你想只给成员的访问例子
组,组
allowed_groups =例子
如果你想也给小组成员的访问酒吧
组中喷火
,设置
allowed_groups = foo / bar
注意,在GitLab,组或组名称并不总是匹配其显示名称,尤其是如果显示名称包含空格或特殊字符。确保你总是使用组或子组的名称,因为它出现在组或子群的URL。
这是一个完整的示例allow_sign_up
启用,访问限制例子
和foo / bar
组。这个例子也促进所有GitLab管理员Grafana组织管理员:
(auth.gitlab)enabled = true allow_sign_up = true client_id = GITLAB_APPLICATION_ID client_secret = GITLAB_SECRET scopes = read_api auth_url = https://gitlab.com/oauth/authorize token_url = https://gitlab.com/oauth/token api_url = https://gitlab.com/api/v4 allowed_groups = example, foo/bar role_attribute_path = is_admin && 'Admin' || 'Viewer' role_attribute_strict = true allow_assign_grafana_admin = false
地图的角色
您可以使用GitLab OAuth映射角色。在映射过程中,Grafana检查使用的作用JMESPath通过指定role_attribute_path
配置选项。
路径查找,Grafana使用JSON获得查询GitLab的API/ api / v4 /用户
端点和一个组
主要包含用户的所有团队。评估的结果role_attribute_path
JMESPath表达式必须是一个有效的Grafana角色,例如,查看器
,编辑器
或管理
。关于Grafana角色和权限的更多信息,请参考角色和权限。
警告:目前如果没有找到组织角色映射为一个用户,Grafana不更新用户的组织作用。这将改变Grafana 10。为了避免覆盖手动设置角色,启用
oauth_skip_org_role_update_sync
选择。看到configure-grafana为更多的信息。
在第一次登录,如果role_attribute_path
属性不返回一个角色,那么用户指定的角色分配的auto_assign_org_role
选项。可以通过设置禁用这个默认角色分配role_attribute_strict = true
。它否认了如果没有角色或用户访问返回一个无效的作用。
警告:Grafana 10,在每一个登录,如果
role_attribute_path
属性不返回一个角色,那么用户指定的角色分配的auto_assign_org_role
选项。
一个查询可能看起来像下面的例子:
role_attribute_path = is_admin & &“Admin”| |“查看器”
这允许每个GitLab Grafana管理是一个管理。
地图角色使用组
组也可以用来映射角色。组名(小写和独特的)而不是显示名称用于识别组
例如,如果您有一组显示名称“例如组”可以使用以下代码片段来确保这些成员继承“编辑器”的角色。
role_attribute_path =包含(组[*],例如组)& & '编辑' | |“查看器”
注意:如果找到匹配其他领域一样,组织将被忽略。
地图服务器管理员权限
在Grafana v9.2后来版本。
如果应用程序角色受到GrafanaGrafanaAdmin
,Grafana授予用户服务器管理员特权。
这是非常有用的,如果你想服务器管理员权限授予用户的一个子集。
Grafana也分配了用户管理
组织默认的角色。
设置allow_assign_grafana_admin
下(auth.gitlab)
必须设置为真正的
对于这个工作。
如果设置设置为假
,用户被分配的角色管理
默认的组织,而不是服务器管理员特权。
allow_assign_grafana_admin = true
例子:
role_attribute_path = is_admin & &“GrafanaAdmin”| |“查看器”
团队同步(企业)
只有在企业Grafana v6.4 +
与团队同步你可以映射Grafana GitLab组织团队,这样你的用户将会自动被添加到正确的团队。
你GitLab组可以引用相同的方式allowed_groups
,就像例子
或foo / bar
。