Настройка аутентификации GitHub OAuth
[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
- Войдите в свою учётную запись GitHub. В разделе Profile > Settings > Developer settings выберите OAuth Apps.
- Нажмите New OAuth App.
- Заполните поля, указывая URL домашней страницы вашей Grafana там, где это уместно.
В поле Authorization callback URL введите следующее:
https://<YOUR-GRAFANA-URL>/login/github. - Запомните свой client ID.
- Сгенерируйте, а затем запомните свой client secret.
Настройка клиента аутентификации GitHub через интерфейс Grafana
Как администратор Grafana вы можете настроить клиент GitHub OAuth изнутри Grafana через интерфейс GitHub. Для этого перейдите на страницу Administration > Authentication > GitHub и заполните форму. Если у вас есть текущая конфигурация в файле конфигурации Grafana, форма будет предварительно заполнена этими значениями. В противном случае форма будет содержать значения по умолчанию.
После того как вы заполнили форму, нажмите Save. Если сохранение прошло успешно, Grafana применит новые конфигурации.
Если вам нужно сбросить изменения, сделанные в интерфейсе, обратно к значениям по умолчанию, нажмите Reset. После сброса изменений Grafana применит конфигурацию из файла конфигурации Grafana (если есть какая-либо конфигурация) или значения по умолчанию.
Note
Если вы запускаете Grafana в режиме высокой доступности, изменения конфигурации могут примениться не ко всем экземплярам Grafana сразу. Возможно, вам придётся подождать несколько минут, пока конфигурация распространится на все экземпляры Grafana.
Дополнительную информацию см. в разделе параметры конфигурации.
Настройка клиента аутентификации GitHub с помощью провайдера 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, выполните следующие шаги:
-
Создайте приложение OAuth в GitHub.
-
Установите 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 за прокси. -
Обратитесь к следующей таблице, чтобы обновить значения полей, расположенных в разделе
[auth.github]файла конфигурации Grafana:Просмотрите список других параметров конфигурации GitHub и заполните их по мере необходимости.
-
Необязательно: Настройте синхронизацию команд.
-
Перезапустите 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.
Конфигурация:
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
Пример конфигурации GitHub в Grafana
В этом разделе приведён пример конфигурации GitHub в файле конфигурации Grafana.
[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"