配置 GitHub OAuth 身份验证
Grafana 提供了多种身份验证方法来验证用户身份。身份验证配置决定了哪些用户可以访问 Grafana 以及他们可以使用哪种方法登录。您还可以配置 Grafana,使其根据身份验证提供者集成返回的信息自动更新用户在 Grafana 中的角色和团队成员身份。
在选择身份验证方法时,务必考虑您当前的身份和访问管理系统,以及您所需的特定身份验证和授权功能。有关可用身份验证选项及其支持功能的完整列表,请参阅配置身份验证。
本主题介绍如何配置 GitHub OAuth 身份验证。
注意
如果用户在 GitHub 中使用的电子邮件地址与他们在使用其他身份验证提供者(例如 Grafana.com)时使用的电子邮件地址相同,您需要进行额外配置以确保用户匹配正确。有关更多信息,请参阅使用不同身份提供者使用相同电子邮件地址登录文档。
开始之前
确保您知道如何创建 GitHub OAuth 应用。有关更多信息,请查阅 GitHub 关于创建 OAuth 应用的文档。
创建 GitHub OAuth 应用
- 登录您的 GitHub 帐户。在 Profile > Settings > Developer settings 中,选择 OAuth Apps。
- 点击 New OAuth App。
- 填写字段,适当时使用您的 Grafana 主页 URL。在 Authorization callback URL 字段中,输入以下内容:
https://<YOUR-GRAFANA-URL>/login/github
。 - 记录您的客户端 ID。
- 生成并记录您的客户端密钥。
使用 Grafana UI 配置 GitHub 身份验证客户端
注意
通过
ssoSettingsAPI
功能开关可用,该功能开关默认启用。
作为 Grafana 管理员,您可以使用 GitHub UI 在 Grafana 中配置 GitHub OAuth 客户端。为此,请导航到 Administration > Authentication > GitHub 页面并填写表单。如果您在 Grafana 配置文件中有当前配置,表单将预填充这些值。否则,表单将包含默认值。
填写完表单后,点击 Save。如果保存成功,Grafana 将应用新配置。
如果您需要将 UI 中所做的更改重置回默认值,请点击 Reset。重置更改后,Grafana 将应用 Grafana 配置文件中的配置(如果存在任何配置)或默认值。
注意
如果您以高可用模式运行 Grafana,配置更改可能不会立即应用到所有 Grafana 实例。您可能需要等待几分钟,配置才能传播到所有 Grafana 实例。
有关更多信息,请参阅配置选项。
使用 Terraform provider 配置 GitHub 身份验证客户端
注意
通过
ssoSettingsAPI
功能开关可用,该功能开关默认启用。Terraform provider 从 v2.12.0 版本开始支持。
resource "grafana_sso_settings" "github_sso_settings" {
provider_name = "github"
oauth2_settings {
name = "Github"
client_id = "YOUR_GITHUB_APP_CLIENT_ID"
client_secret = "YOUR_GITHUB_APP_CLIENT_SECRET"
allow_sign_up = true
auto_login = false
scopes = "user:email,read:org"
team_ids = "150,300"
allowed_organizations = "[\"My Organization\", \"Octocats\"]"
allowed_domains = "mycompany.com mycompany.org"
role_attribute_path = "[login=='octocat'][0] && 'GrafanaAdmin' || 'Viewer'"
}
}
访问Terraform Registry以获取使用 grafana_sso_settings
资源的完整参考信息。
使用 Grafana 配置文件配置 GitHub 身份验证客户端
确保您可以访问Grafana 配置文件。
配置 GitHub 身份验证
要配置 Grafana 的 GitHub 身份验证,请遵循以下步骤
在 GitHub 中创建一个 OAuth 应用程序。
将您的 GitHub OAuth 应用的回调 URL 设置为
http://<my_grafana_server_name_or_ip>:<grafana_server_port>/login/github
。确保回调 URL 是您通过浏览器访问 Grafana 所使用的完整 HTTP 地址,但要附加路径
/login/github
。为确保回调 URL 正确,可能需要在 Grafana 配置文件的
[server]
部分设置root_url
选项。例如,如果您通过代理提供 Grafana 服务。参考下表更新 Grafana 配置文件
[auth.github]
部分中的字段值设置 必需 client_id
,client_secret
这些值必须与您的 GitHub OAuth 应用中的客户端 ID 和客户端密钥匹配。 否
是 查阅其他 GitHub配置选项列表并完成配置,根据需要。
可选:配置团队同步。
重启 Grafana。
您现在应该在登录页面看到 GitHub 登录按钮,并可以使用您的 GitHub 帐户登录或注册。
配置角色映射
除非启用 skip_org_role_sync
选项,否则用户的角色将在用户登录时设置为从 GitHub 获取的角色。
使用 role_attribute_path
配置选项中的JMESPath表达式来获取用户角色。要映射服务器管理员角色,请使用 allow_assign_grafana_admin
配置选项。有关更多信息,请参阅配置选项。
如果未找到有效角色,则为用户分配由auto_assign_org_role
选项指定的角色。您可以通过设置 role_attribute_strict = true
来禁用此默认角色分配。如果评估 role_attribute_path
和 org_mapping
表达式后未返回角色或返回的角色无效,则此设置会拒绝用户访问。
您可以使用 org_mapping
配置选项将用户分配到组织,并根据其 GitHub 团队成员身份指定其角色。有关更多信息,请参阅组织角色映射示例。如果同时指定了组织角色映射 (org_mapping
) 和常规角色映射 (role_attribute_path
),则用户将获得这两个映射角色中权限最高的角色。
为了方便配置正确的 JMESPath 表达式,请访问JMESPath来测试和评估带有自定义负载的表达式。
角色映射示例
本节包含用于角色映射的 JMESPath 表达式示例。
组织角色映射示例
GitHub 集成使用 org_mapping
配置中的外部用户团队,根据他们的 GitHub 团队成员身份映射组织和角色。
在此示例中,用户在 org_foo
组织中被授予 Viewer
角色,并在 org_bar
和 org_baz
组织中被授予 Editor
角色。
外部用户属于以下 GitHub 团队:@my-github-organization/my-github-team-1
和 @my-github-organization/my-github-team-2
。
配置
org_mapping = @my-github-organization/my-github-team-1:org_foo:Viewer @my-github-organization/my-github-team-2:org_bar:Editor *:org_baz:Editor
使用 GitHub 用户信息映射角色
在此示例中,登录名为 octocat
的用户被授予 Admin
角色。所有其他用户被授予 Viewer
角色。
role_attribute_path = [login=='octocat'][0] && 'Admin' || 'Viewer'
使用 GitHub 团队映射角色
在此示例中,来自 GitHub 团队 my-github-team
的用户被授予 Editor
角色。所有其他用户被授予 Viewer
角色。
role_attribute_path = contains(groups[*], '@my-github-organization/my-github-team') && 'Editor' || 'Viewer'
使用多个 GitHub 团队映射角色
在此示例中,来自 GitHub 团队 admins
和 devops
的用户被授予 Admin
角色,来自 GitHub 团队 engineers
和 managers
的用户被授予 Editor
角色,来自 GitHub 团队 qa
的用户被授予 Viewer
角色,所有其他用户被授予 None
角色。
role_attribute_path = contains(groups[*], '@my-github-organization/admins') && 'Admin' || contains(groups[*], '@my-github-organization/devops') && 'Admin' || contains(groups[*], '@my-github-organization/engineers') && 'Editor' || contains(groups[*], '@my-github-organization/managers') && 'Editor' || contains(groups[*], '@my-github-organization/qa') && 'Viewer' || 'None'
映射服务器管理员角色
在此示例中,登录名为 octocat
的用户被授予 Admin
组织角色以及 Grafana 服务器管理员角色。所有其他用户被授予 Viewer
角色。
role_attribute_path = [login=='octocat'][0] && 'GrafanaAdmin' || 'Viewer'
为所有用户映射一个角色
在此示例中,无论从身份提供者接收到的用户信息如何,所有用户都将被分配 Viewer
角色。
role_attribute_path = "'Viewer'"
skip_org_role_sync = false
Grafana 中 GitHub 配置示例
本节包含 Grafana 配置文件中 GitHub 配置的示例。
[auth.github]
enabled = true
client_id = YOUR_GITHUB_APP_CLIENT_ID
client_secret = YOUR_GITHUB_APP_CLIENT_SECRET
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
allow_sign_up = true
auto_login = false
team_ids = 150,300
allowed_organizations = ["My Organization", "Octocats"]
allowed_domains = mycompany.com mycompany.org
role_attribute_path = [login=='octocat'][0] && 'GrafanaAdmin' || 'Viewer'
配置团队同步
注意
在Grafana Enterprise 版和 Grafana Cloud 中可用。
使用团队同步,您可以将您的 GitHub 组织中的团队映射到 Grafana 中的团队。这将自动将用户分配到适当的团队。每个用户的团队会在用户登录时同步。
GitHub 团队可以通过两种方式引用
https://github.com/orgs/<org>/teams/<slug>
@<org>/<slug>
示例:https://github.com/orgs/grafana/teams/developers
或 @grafana/developers
。
要了解有关团队同步的更多信息,请参阅配置团队同步。
配置选项
下表描述了所有 GitHub OAuth 配置选项。您可以将这些选项作为环境变量应用,与其他 Grafana 中的任何配置类似。有关更多信息,请参阅使用环境变量覆盖配置。
注意
如果配置选项需要包含冒号的 JMESPath 表达式,请将整个表达式用引号括起来,以防止解析错误。例如
role_attribute_path: "role:view"
设置 | 必需 | Cloud 上支持 | 必需 | 默认值 |
---|---|---|---|---|
否 | 否 | 是 | 是否允许 GitHub OAuth 身份验证。 |
|
| 否 | 是 | 否 | 是 |
在 Grafana 用户界面中引用 GitHub 身份验证时使用的名称。 | 否 | 是 | GitHub |
|
否 | 是 | 是 | 是 | |
在 Grafana 用户界面中用于 GitHub 身份验证的图标。 | 是 | 是 | github | |
| 是 | 是 | 是 | 是 |
您的 GitHub OAuth 应用提供的客户端 ID。 | 是 | 是 | client_secret | 是 |
是 | 是 | 是 | 您的 GitHub OAuth 应用提供的客户端密钥。 |
|
否 | 否 | 是 | 否 | 您的 GitHub OAuth 提供者的授权端点。 |
| 否 | 是 | token_url | 否 |
否 | 否 | 是 | 用于获取 GitHub OAuth 访问令牌的端点。 |
|
| 否 | 是 | api_url | |
否 | 否 | 是 | 否 |
|
用于获取与 OpenID UserInfo 兼容的 GitHub 用户信息的端点。 | 否 | 否 | https://api.github.com/user | |
| 否 | 是 | 否 |
|
是 | 否 | 否 | 以逗号或空格分隔的 GitHub OAuth scope 列表。 |
|
| 否 | 是 | allow_sign_up | |
否 | 否 | 是 | 是 | |
是否允许通过 GitHub 登录创建新的 Grafana 用户。如果设置为 | 否 | 是 | true | |
| 否 | 否 | 否 |
|
否 | 否 | 否 | 设置为 true 以启用用户绕过登录屏幕并自动登录。如果您配置了多个身份验证提供者使用自动登录,则此设置将被忽略。 | |
| 否 | 否 | role_attribute_path | |
否 | 否 | 否 | 是 | |
用于查找 Grafana 角色的JMESPath表达式。Grafana 将首先使用从 UserInfo 端点获取的用户信息评估表达式。如果未找到角色,Grafana 将创建一个包含 | 否 | 是 | role_attribute_strict |
否
false