Настройка аутентификации GitHub OAuth

Warning

[ru] DOCS_SHARED: "docs/grafana/latest/setup-grafana/configure-access/configure-authentication/github/index.ru.md" ("/hugo/content/docs/grafana/latest/setup-grafana/configure-access/configure-authentication/github/index.ru.md:24:1") shared directory "docs/grafana/latest/shared" not found

В этом разделе описано, как настроить аутентификацию GitHub OAuth.

Note

Если пользователи используют одинаковый адрес электронной почты в GitHub и в других провайдерах аутентификации (например, Grafana.com), вам нужно выполнить дополнительную настройку, чтобы гарантировать правильное сопоставление пользователей. Дополнительную информацию см. в документации Использование одного и того же адреса электронной почты для входа через разных провайдеров идентификации.

Перед началом

Убедитесь, что вы знаете, как создать приложение GitHub OAuth. Дополнительную информацию смотрите в документации GitHub о создании приложения OAuth.

Создание приложения GitHub OAuth

  1. Войдите в свою учётную запись GitHub. В разделе Profile > Settings > Developer settings выберите OAuth Apps.
  2. Нажмите New OAuth App.
  3. Заполните поля, указывая URL домашней страницы вашей Grafana там, где это уместно. В поле Authorization callback URL введите следующее: https://<YOUR-GRAFANA-URL>/login/github .
  4. Запомните свой client ID.
  5. Сгенерируйте, а затем запомните свой client secret.

Настройка клиента аутентификации GitHub через интерфейс Grafana

Как администратор Grafana вы можете настроить клиент GitHub OAuth изнутри Grafana через интерфейс GitHub. Для этого перейдите на страницу Administration > Authentication > GitHub и заполните форму. Если у вас есть текущая конфигурация в файле конфигурации Grafana, форма будет предварительно заполнена этими значениями. В противном случае форма будет содержать значения по умолчанию.

После того как вы заполнили форму, нажмите Save. Если сохранение прошло успешно, Grafana применит новые конфигурации.

Если вам нужно сбросить изменения, сделанные в интерфейсе, обратно к значениям по умолчанию, нажмите Reset. После сброса изменений Grafana применит конфигурацию из файла конфигурации Grafana (если есть какая-либо конфигурация) или значения по умолчанию.

Note

Если вы запускаете Grafana в режиме высокой доступности, изменения конфигурации могут примениться не ко всем экземплярам Grafana сразу. Возможно, вам придётся подождать несколько минут, пока конфигурация распространится на все экземпляры Grafana.

Дополнительную информацию см. в разделе параметры конфигурации.

Настройка клиента аутентификации GitHub с помощью провайдера Terraform

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'"
  }
}

Полное справочное руководство по использованию ресурса grafana_sso_settings см. в Terraform Registry.

Настройка клиента аутентификации GitHub с помощью файла конфигурации Grafana

Убедитесь, что у вас есть доступ к файлу конфигурации Grafana.

Настройка аутентификации GitHub

Чтобы настроить аутентификацию GitHub с Grafana, выполните следующие шаги:

  1. Создайте приложение OAuth в GitHub.

  2. Установите callback URL для вашего приложения GitHub OAuth в http://<my_grafana_server_name_or_ip>:<grafana_server_port>/login/github.

    Убедитесь, что callback URL — это полный HTTP-адрес, который вы используете для доступа к Grafana через браузер, но с добавленным путём /login/github.

    Чтобы callback URL был корректным, может потребоваться установить параметр root_url в разделе [server] файла конфигурации Grafana. Например, если вы обслуживаете Grafana за прокси.

  3. Обратитесь к следующей таблице, чтобы обновить значения полей, расположенных в разделе [auth.github] файла конфигурации Grafana:

    Поле Описание
    client_id, client_secret Эти значения должны совпадать с client ID и client secret вашего приложения GitHub OAuth.
    enabled Включает аутентификацию GitHub. Установите это значение в true.

    Просмотрите список других параметров конфигурации GitHub и заполните их по мере необходимости.

  4. Настройте сопоставление ролей.

  5. Необязательно: Настройте синхронизацию команд.

  6. Перезапустите Grafana.

    Теперь вы должны увидеть кнопку входа GitHub на странице входа и иметь возможность войти или зарегистрироваться с помощью своих учётных записей GitHub.

Настройка сопоставления ролей

Если только не включён параметр skip_org_role_sync, роль пользователя будет установлена в роль, полученную от GitHub при входе пользователя.

Роль пользователя извлекается с помощью выражения JMESPath из параметра конфигурации role_attribute_path. Чтобы сопоставить роль администратора сервера, используйте параметр конфигурации 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.

В этом примере пользователю предоставлена роль Viewer в организации org_foo и роль Editor в организациях org_bar и org_baz.

Внешний пользователь является частью следующих команд 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 admins и devops предоставлена роль Admin, пользователям из команд GitHub engineers и managers предоставлена роль 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

Пример конфигурации GitHub в Grafana

В этом разделе приведён пример конфигурации GitHub в файле конфигурации Grafana.

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'

Настройка синхронизации команд

Note

Доступно в 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. Дополнительную информацию см. в разделе Переопределение конфигурации с помощью переменных среды.

Note

Если параметр конфигурации требует выражения JMESPath, которое содержит двоеточие, заключите всё выражение в кавычки, чтобы предотвратить ошибки разбора. Например role_attribute_path: "role:view"

Параметр Обязательно Поддерживается в Cloud Описание По умолчанию
enabled Нет Да Разрешена ли аутентификация GitHub OAuth. false
name Нет Да Имя, используемое для ссылки на аутентификацию GitHub в пользовательском интерфейсе Grafana. GitHub
icon Нет Да Значок, используемый для аутентификации GitHub в пользовательском интерфейсе Grafana. github
client_id Да Да Client ID, предоставленный вашим приложением GitHub OAuth.
client_secret Да Да Client secret, предоставленный вашим приложением GitHub OAuth.
auth_url Да Да Конечная точка авторизации вашего провайдера GitHub OAuth. https://github.com/login/oauth/authorize
token_url Да Да Конечная точка, используемая для получения access-токена GitHub OAuth. https://github.com/login/oauth/access_token
token_exchange_timeout Нет Да Тайм-аут в секундах для запроса обмена токена OAuth. Если установлено 0 или не задано, по умолчанию 15 секунд. 15
api_url Да Да Конечная точка, используемая для получения информации о пользователе GitHub, совместимой с OpenID UserInfo. https://api.github.com/user
scopes Нет Да Список областей GitHub OAuth, разделённых запятыми или пробелами. user:email,read:org
allow_sign_up Нет Да Разрешать ли создание новых пользователей Grafana через вход GitHub. Если установлено false, то только существующие пользователи Grafana могут войти с GitHub OAuth. true
auto_login Нет Да Установите true, чтобы позволить пользователям обойти экран входа и войти автоматически. Этот параметр игнорируется, если вы настроили несколько провайдеров аутентификации на использование автоматического входа. false
login_prompt Нет Да Указывает тип взаимодействия с пользователем при входе в GitHub. Доступные значения: login, consent и select_account.
role_attribute_path Нет Да Выражение JMESPath, используемое для поиска роли Grafana. Grafana сначала вычислит выражение, используя информацию о пользователе, полученную от конечной точки UserInfo. Если роль не найдена, Grafana создаёт JSON-данные с ключом groups, который сопоставляется с командами GitHub, полученными от конечной точки GitHub /api/user/teams, и вычисляет выражение, используя эти данные. Результат вычисления должен быть допустимой ролью Grafana (None, Viewer, Editor, Admin или GrafanaAdmin). Дополнительную информацию о сопоставлении ролей пользователей см. в разделе Настройка сопоставления ролей.
role_attribute_strict Нет Да Установите true, чтобы запретить вход пользователя, если роль организации Grafana не может быть извлечена с помощью role_attribute_path или org_mapping. Дополнительную информацию о сопоставлении ролей пользователей см. в разделе Настройка сопоставления ролей. false
org_mapping Нет Нет Список сопоставлений <ExternalGitHubTeamName>:<OrgIdOrName>:<Role>, разделённых запятыми или пробелами. Значение может быть *, что означает “Все пользователи”. Роль необязательна и может иметь следующие значения: None, Viewer, Editor или Admin. Дополнительную информацию о сопоставлении внешней организации с ролью см. в разделе Пример сопоставления ролей организации.
skip_org_role_sync Нет Да Установите true, чтобы прекратить автоматическую синхронизацию ролей пользователей. false
allow_assign_grafana_admin Нет Нет Установите true, чтобы включить автоматическую синхронизацию роли администратора сервера Grafana. Если этот параметр установлен в true и результат вычисления role_attribute_path для пользователя — GrafanaAdmin, Grafana предоставляет пользователю привилегии администратора сервера и роль администратора организации. Если этот параметр установлен в false и результат вычисления role_attribute_path для пользователя — GrafanaAdmin, Grafana предоставляет пользователю только роль администратора организации. Дополнительную информацию о сопоставлении ролей пользователей см. в разделе Настройка сопоставления ролей. false
allowed_organizations Нет Да Список организаций, разделённых запятыми или пробелами. Пользователь должен быть членом как минимум одной организации, чтобы войти.
allowed_domains Нет Да Список доменов, разделённых запятыми или пробелами. Пользователь должен принадлежать как минимум к одному домену, чтобы войти.
team_ids Нет Да Целочисленный список ID команд. Если задан, пользователь должен быть членом одной из указанных команд, чтобы войти.
tls_skip_verify_insecure Нет Нет Если установлено true, клиент принимает любой сертификат, представленный сервером, и любое имя хоста в этом сертификате. Используйте это только для тестирования, поскольку этот режим делает SSL/TLS уязвимым для атак типа “человек посередине”. false
tls_client_cert Нет Нет Путь к сертификату.
tls_client_key Нет Нет Путь к ключу.
tls_client_ca Нет Нет Путь к списку доверенных центров сертификации.
signout_redirect_url Нет Да URL для перенаправления после выхода пользователя из системы.