Настройка аутентификации Google OAuth
Чтобы включить Google OAuth, вы должны зарегистрировать своё приложение в Google. Google сгенерирует для вас client ID и секретный ключ.
Note
Если пользователи используют одинаковый адрес электронной почты в Google и в других провайдерах аутентификации (например, Grafana.com), вам нужно выполнить дополнительную настройку, чтобы гарантировать правильное сопоставление пользователей. Дополнительную информацию см. в документации Использование одного и того же адреса электронной почты для входа через разных провайдеров идентификации.
Создание ключей Google OAuth
Сначала вам нужно создать Google OAuth Client:
- Перейдите на https://console.developers.google.com/apis/credentials.
- Создайте новый проект, если у вас его ещё нет.
- Введите имя проекта. Поля Organization и Location должны быть установлены в информацию о вашей организации.
- В OAuth consent screen выберите тип пользователя External. Нажмите CREATE.
- Заполните запрошенную информацию, используя URL вашего экземпляра Grafana Cloud.
- Примите значения по умолчанию или настройте параметры экрана согласия.
- Нажмите Create Credentials, затем нажмите OAuth Client ID в выпадающем меню
- Введите следующее:
- Application Type: Web application
- Name: Grafana
- Authorized JavaScript origins:
https://<YOUR_GRAFANA_URL> - Authorized redirect URIs:
https://<YOUR_GRAFANA_URL>/login/google - Замените
<YOUR_GRAFANA_URL>на URL вашего экземпляра Grafana.Note
URL, который вы вводите, — это URL домашней страницы вашего экземпляра Grafana, а не URL портала Grafana Cloud.
- Нажмите Create
- Скопируйте Client ID и Client Secret из модального окна ‘OAuth Client’
Настройка клиента аутентификации Google через интерфейс Grafana
Как администратор Grafana вы можете настроить клиент Google OAuth изнутри Grafana через интерфейс Google. Для этого перейдите на страницу Administration > Authentication > Google и заполните форму. Если у вас есть текущая конфигурация в файле конфигурации Grafana, форма будет предварительно заполнена этими значениями, в противном случае форма будет содержать значения по умолчанию.
После того как вы заполнили форму, нажмите Save. Если сохранение прошло успешно, Grafana применит новые конфигурации.
Если вам нужно сбросить изменения, сделанные в интерфейсе, обратно к значениям по умолчанию, нажмите Reset. После сброса изменений Grafana применит конфигурацию из файла конфигурации Grafana (если есть какая-либо конфигурация) или значения по умолчанию.
Note
Если вы запускаете Grafana в режиме высокой доступности, изменения конфигурации могут примениться не ко всем экземплярам Grafana сразу. Возможно, вам придётся подождать несколько минут, пока конфигурация распространится на все экземпляры Grafana.
Настройка клиента аутентификации Google с помощью провайдера Terraform
resource "grafana_sso_settings" "google_sso_settings" {
provider_name = "google"
oauth2_settings {
name = "Google"
client_id = "CLIENT_ID"
client_secret = "CLIENT_SECRET"
allow_sign_up = true
auto_login = false
scopes = "openid email profile"
allowed_domains = "mycompany.com mycompany.org"
hosted_domain = "mycompany.com"
use_pkce = true
}
}
Полное справочное руководство по использованию ресурса grafana_sso_settings см. в Terraform Registry.
Настройка клиента аутентификации Google с помощью файла конфигурации Grafana
Убедитесь, что у вас есть доступ к файлу конфигурации Grafana.
Включение Google OAuth в Grafana
Укажите Client ID и Secret в файле конфигурации Grafana. Например:
[auth.google]
enabled = true
allow_sign_up = true
auto_login = false
client_id = CLIENT_ID
client_secret = CLIENT_SECRET
scopes = openid email profile
auth_url = https://accounts.google.com/o/oauth2/v2/auth
token_url = https://oauth2.googleapis.com/token
api_url = https://openidconnect.googleapis.com/v1/userinfo
allowed_domains = mycompany.com mycompany.org
hosted_domain = mycompany.com
use_pkce = true
Возможно, вам придётся установить параметр root_url в [server], чтобы callback URL был
корректным. Например, если вы обслуживаете Grafana за прокси.
Перезапустите серверную часть Grafana. Теперь вы должны увидеть кнопку входа Google
на странице входа. Теперь вы можете войти или зарегистрироваться с помощью своих учётных записей
Google. Параметр allowed_domains необязателен, а домены разделялись пробелом.
Вы можете разрешить пользователям регистрироваться через аутентификацию Google, установив
параметр allow_sign_up в true. Когда этот параметр установлен в true, любой
пользователь, успешно прошедший аутентификацию через Google, будет
автоматически зарегистрирован.
Вы можете указать домен, который будет передан как параметр запроса hd, принимаемый API аутентификации
OAuth 2.0 от Google. См. документацию Google по OAuth.
Note
Начиная с Grafana 10.3.0, параметр
hd, полученный из ID-токена Google, также используется для определения размещённого домена пользователя. Параметр конфигурации Google Oauthallowed_domainsиспользуется для ограничения доступа пользователями из определённого домена. Если параметр конфигурацииallowed_domainsзадан, параметрhdиз ID-токена Google должен совпадать с параметром конфигурацииallowed_domains. Если параметрhdиз ID-токена Google не совпадает с параметром конфигурацииallowed_domains, пользователю отказывается в доступе.Когда учётная запись не принадлежит рабочему пространству Google, утверждение
hdбудет недоступно.Эта валидация включена по умолчанию. Чтобы отключить эту валидацию, установите параметр конфигурации
validate_hdвfalse. Параметр конфигурацииallowed_domainsбудет использовать утверждение email для проверки домена.
PKCE
RFC 7636 от IETF вводит “proof key for code exchange” (PKCE), который обеспечивает дополнительную защиту от некоторых форм атак перехвата кода авторизации. PKCE будет требоваться в OAuth 2.1.
Note
Вы можете отключить PKCE в Grafana, установив
use_pkceвfalseв разделе[auth.google].
Настройка refresh-токена
Когда пользователь входит в систему с помощью провайдера OAuth, Grafana проверяет, что access-токен не истёк. Когда access-токен истекает, Grafana использует предоставленный refresh-токен (если он есть) для получения нового access-токена.
Grafana использует refresh-токен для получения нового access-токена без необходимости для пользователя входить в систему снова. Если refresh-токен не существует, Grafana выполняет выход пользователя из системы после истечения access-токена.
По умолчанию Grafana включает параметр access_type=offline в запрос авторизации, чтобы запросить refresh-токен.
Получение refresh-токена и проверка истечения access-токена включены по умолчанию для провайдера Google начиная с Grafana v10.1.0. Если вы хотите отключить проверку истечения access-токена, установите значение конфигурации use_refresh_token в false.
Note
Переключатель функции
accessTokenExpirationCheckбыл удалён в Grafana v10.3.0, и вместо него для настройки получения refresh-токена и проверки истечения access-токена будет использоваться значение конфигурацииuse_refresh_token.
Настройка валидации ID-токена JWT
По умолчанию Grafana извлекает информацию о пользователе из ID-токенов, не проверяя их криптографические подписи. Для повышения безопасности вы можете включить валидацию подписи JWT, чтобы гарантировать, что ID-токены подлинны и не были подделаны.
Чтобы включить валидацию ID-токена JWT:
-
Установите
validate_id_tokenвtrueв разделе[auth.google]файла конфигурации Grafana. -
Настройте
jwk_set_urlс URL конечной точки JSON Web Key Set (JWKS) Google. Эта конечная точка предоставляет публичные ключи, используемые для проверки подписей JWT.Для Google конечная точка JWKS:
https://www.googleapis.com/oauth2/v3/certs
Пример конфигурации:
[auth.google]
enabled = true
validate_id_token = true
jwk_set_url = https://www.googleapis.com/oauth2/v3/certs
client_id = <client id>
client_secret = <client secret>
scopes = openid email profile
Note
Когда валидация JWT включена, Grafana кэширует ключи JWKS для повышения производительности. Кэш учитывает заголовок
Cache-Controlиз ответа конечной точки JWKS. Если срок истечения кэша не указан, ключи кэшируются на 5 минут по умолчанию.
Caution
Если
validate_id_tokenустановлен вtrue, вы должны настроитьjwk_set_url. Аутентификация завершится неудачей, если JWK Set URL не предоставлен или если подпись ID-токена не может быть проверена.
Настройка автоматического входа
Установите параметр auto_login в true, чтобы пытаться войти автоматически, пропуская экран входа.
Этот параметр игнорируется, если несколько провайдеров аутентификации настроены на использование автоматического входа.
auto_login = true
Настройка синхронизации команд
Note
Доступно в Grafana Enterprise и Grafana Cloud.
С синхронизацией команд вы можете легко добавлять пользователей в команды, используя их группы Google. Чтобы настроить синхронизацию команд для Google OAuth, обратитесь к следующему примеру.
Чтобы настроить синхронизацию команд для Google OAuth:
-
Включите Google Cloud Identity API на дашборде вашей организации.
-
Добавьте область
https://www.googleapis.com/auth/cloud-identity.groups.readonlyв вашу конфигурацию Grafana[auth.google]:Пример:
[auth.google] # .. scopes = openid email profile https://www.googleapis.com/auth/cloud-identity.groups.readonly -
Настройте синхронизацию команд на вкладке
External group syncвашей команды Grafana. Внешний group ID для группы Google — это адрес электронной почты группы, напримерdev@grafana.com.
Чтобы узнать больше о синхронизации команд, см. Настройка синхронизации команд.
Настройка разрешённых групп
Чтобы ограничить доступ аутентифицированных пользователей, которые являются членами одной или нескольких групп, установите allowed_groups
в список групп, разделённых запятыми или пробелами.
Группы Google указываются по ключу email группы. Например, developers@google.com.
Note
Добавьте область
https://www.googleapis.com/auth/cloud-identity.groups.readonlyв вашу конфигурацию областей Grafana[auth.google], чтобы получать группы.
Настройка сопоставления ролей
Если только не включён параметр skip_org_role_sync, роль пользователя будет установлена в роль, сопоставленную из Google при входе пользователя. Если сопоставление не задано, используется роль экземпляра по умолчанию.
Роль пользователя извлекается с помощью выражения JMESPath из параметра конфигурации role_attribute_path.
Чтобы сопоставить роль администратора сервера, используйте параметр конфигурации allow_assign_grafana_admin.
Если допустимая роль не найдена, пользователю назначается роль, указанная параметром auto_assign_org_role.
Вы можете отключить это назначение роли по умолчанию, установив role_attribute_strict = true. Этот параметр запрещает доступ пользователю, если не возвращена роль или возвращена недопустимая роль после вычисления выражений role_attribute_path и org_mapping.
Чтобы упростить настройку правильного выражения JMESPath, перейдите на JMESPath, чтобы протестировать и оценить выражения с пользовательскими полезными нагрузками.
Note
По умолчанию параметр
skip_org_role_syncвключён. Параметрskip_org_role_syncпо умолчанию имеет значение false в Grafana v10.3.0 и более поздних версиях.
Примеры сопоставления ролей
В этом разделе приведены примеры выражений JMESPath, используемых для сопоставления ролей.
Пример сопоставления ролей организации
Интеграция Google использует группы внешних пользователей в конфигурации org_mapping для сопоставления организаций и ролей на основе их членства в группах Google.
В этом примере пользователю предоставлена роль Viewer в организации org_foo и роль Editor в организациях org_bar и org_baz.
Внешний пользователь является частью следующих групп Google: group-1 и group-2.
Конфигурация:
org_mapping = group-1:org_foo:Viewer group-2:org_bar:Editor *:org_baz:Editor
Сопоставление ролей с использованием информации о пользователе из токена OAuth
В этом примере пользователю с электронной почтой admin@company.com предоставлена роль Admin.
Всем остальным пользователям предоставляется роль Viewer.
role_attribute_path = email=='admin@company.com' && 'Admin' || 'Viewer'
skip_org_role_sync = false
Сопоставление ролей с использованием групп
В этом примере пользователю из группы Google ’example-group@google.com’ предоставлена роль Editor.
Всем остальным пользователям предоставляется роль Viewer.
role_attribute_path = contains(groups[*], 'example-group@google.com') && 'Editor' || 'Viewer'
skip_org_role_sync = false
Note
Добавьте область
https://www.googleapis.com/auth/cloud-identity.groups.readonlyв вашу конфигурацию областей Grafana[auth.google], чтобы получать группы.
Сопоставление роли администратора сервера
В этом примере пользователю с электронной почтой admin@company.com предоставлена роль организации Admin, а также роль администратора сервера Grafana.
Всем остальным пользователям предоставляется роль Viewer.
allow_assign_grafana_admin = true
skip_org_role_sync = false
role_attribute_path = email=='admin@company.com' && 'GrafanaAdmin' || 'Viewer'
Сопоставление одной роли всем пользователям
В этом примере всем пользователям назначается роль Viewer независимо от информации о пользователе, полученной от провайдера идентификации.
role_attribute_path = "'Viewer'"
skip_org_role_sync = false
Параметры конфигурации
Следующая таблица описывает различные параметры конфигурации Google OAuth. Вы можете применять эти параметры как переменные среды, как и любую другую конфигурацию в Grafana. Дополнительную информацию см. в разделе Переопределение конфигурации с помощью переменных среды.