菜单
Grafana Cloud Enterprise 版 开源

配置 GitHub OAuth 身份验证

Grafana 提供了多种身份验证方法来验证用户身份。身份验证配置决定了哪些用户可以访问 Grafana 以及他们可以使用哪种方法登录。您还可以配置 Grafana,使其根据身份验证提供者集成返回的信息自动更新用户在 Grafana 中的角色和团队成员身份。

在选择身份验证方法时,务必考虑您当前的身份和访问管理系统,以及您所需的特定身份验证和授权功能。有关可用身份验证选项及其支持功能的完整列表,请参阅配置身份验证

本主题介绍如何配置 GitHub OAuth 身份验证。

注意

如果用户在 GitHub 中使用的电子邮件地址与他们在使用其他身份验证提供者(例如 Grafana.com)时使用的电子邮件地址相同,您需要进行额外配置以确保用户匹配正确。有关更多信息,请参阅使用不同身份提供者使用相同电子邮件地址登录文档。

开始之前

确保您知道如何创建 GitHub OAuth 应用。有关更多信息,请查阅 GitHub 关于创建 OAuth 应用的文档。

创建 GitHub OAuth 应用

  1. 登录您的 GitHub 帐户。在 Profile > Settings > Developer settings 中,选择 OAuth Apps
  2. 点击 New OAuth App
  3. 填写字段,适当时使用您的 Grafana 主页 URL。在 Authorization callback URL 字段中,输入以下内容:https://<YOUR-GRAFANA-URL>/login/github
  4. 记录您的客户端 ID。
  5. 生成并记录您的客户端密钥。

使用 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 版本开始支持。

terraform
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 身份验证,请遵循以下步骤

  1. 在 GitHub 中创建一个 OAuth 应用程序。

  2. 将您的 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 服务。

  3. 参考下表更新 Grafana 配置文件 [auth.github] 部分中的字段值

    设置必需
    client_id, client_secret这些值必须与您的 GitHub OAuth 应用中的客户端 ID 和客户端密钥匹配。

    查阅其他 GitHub配置选项列表并完成配置,根据需要。

  4. 配置角色映射.

  5. 可选:配置团队同步

  6. 重启 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_pathorg_mapping 表达式后未返回角色或返回的角色无效,则此设置会拒绝用户访问。

您可以使用 org_mapping 配置选项将用户分配到组织,并根据其 GitHub 团队成员身份指定其角色。有关更多信息,请参阅组织角色映射示例。如果同时指定了组织角色映射 (org_mapping) 和常规角色映射 (role_attribute_path),则用户将获得这两个映射角色中权限最高的角色。

为了方便配置正确的 JMESPath 表达式,请访问JMESPath来测试和评估带有自定义负载的表达式。

角色映射示例

本节包含用于角色映射的 JMESPath 表达式示例。

组织角色映射示例

GitHub 集成使用 org_mapping 配置中的外部用户团队,根据他们的 GitHub 团队成员身份映射组织和角色。

在此示例中,用户在 org_foo 组织中被授予 Viewer 角色,并在 org_barorg_baz 组织中被授予 Editor 角色。

外部用户属于以下 GitHub 团队:@my-github-organization/my-github-team-1@my-github-organization/my-github-team-2

配置

ini
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 角色。

bash
role_attribute_path = [login=='octocat'][0] && 'Admin' || 'Viewer'
使用 GitHub 团队映射角色

在此示例中,来自 GitHub 团队 my-github-team 的用户被授予 Editor 角色。所有其他用户被授予 Viewer 角色。

bash
role_attribute_path = contains(groups[*], '@my-github-organization/my-github-team') && 'Editor' || 'Viewer'
使用多个 GitHub 团队映射角色

在此示例中,来自 GitHub 团队 adminsdevops 的用户被授予 Admin 角色,来自 GitHub 团队 engineersmanagers 的用户被授予 Editor 角色,来自 GitHub 团队 qa 的用户被授予 Viewer 角色,所有其他用户被授予 None 角色。

bash
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 角色。

bash
role_attribute_path = [login=='octocat'][0] && 'GrafanaAdmin' || 'Viewer'
为所有用户映射一个角色

在此示例中,无论从身份提供者接收到的用户信息如何,所有用户都将被分配 Viewer 角色。

ini
role_attribute_path = "'Viewer'"
skip_org_role_sync = false

Grafana 中 GitHub 配置示例

本节包含 Grafana 配置文件中 GitHub 配置的示例。

bash
[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 身份验证。false
name
在 Grafana 用户界面中引用 GitHub 身份验证时使用的名称。GitHubicon
在 Grafana 用户界面中用于 GitHub 身份验证的图标。github
client_id
您的 GitHub OAuth 应用提供的客户端 ID。client_secret
您的 GitHub OAuth 应用提供的客户端密钥。auth_url
您的 GitHub OAuth 提供者的授权端点。
https://github.com/login/oauth/authorizetoken_url
用于获取 GitHub OAuth 访问令牌的端点。false
https://github.com/login/oauth/access_tokenapi_url
false
用于获取与 OpenID UserInfo 兼容的 GitHub 用户信息的端点。https://api.github.com/user
scopesfalse
以逗号或空格分隔的 GitHub OAuth scope 列表。false
user:email,read:orgallow_sign_up
是否允许通过 GitHub 登录创建新的 Grafana 用户。如果设置为 false,则只有现有的 Grafana 用户可以使用 GitHub OAuth 登录。true
auto_loginfalse
设置为 true 以启用用户绕过登录屏幕并自动登录。如果您配置了多个身份验证提供者使用自动登录,则此设置将被忽略。
falserole_attribute_path
用于查找 Grafana 角色的JMESPath表达式。Grafana 将首先使用从 UserInfo 端点获取的用户信息评估表达式。如果未找到角色,Grafana 将创建一个包含 groups 键的 JSON 数据,该键映射到从 GitHub 的/api/user/teams端点获取的 GitHub 团队,并使用此数据评估表达式。评估结果应为一个有效的 Grafana 角色(NoneViewerEditorAdminGrafanaAdmin)。有关用户角色映射的更多信息,请参阅配置角色映射role_attribute_strict