Настройка аутентификации Okta OIDC
There are numerous authentication methods available in Grafana to verify user identity. The authentication configuration dictates which users can access Grafana and the methods they can use for logging in. You can also configure Grafana to automatically update users’ roles and team memberships in Grafana based on the information returned by the auth provider integration.
When deciding on an authentication method, it’s important to take into account your current identity and access management system as well as the specific authentication and authorization features you require. For a complete list of the available authentication options and the features they support, refer to Configure authentication.
Note
Если пользователи используют одинаковый адрес электронной почты в Okta и в других провайдерах аутентификации (например, Grafana.com), вам нужно выполнить дополнительную настройку, чтобы гарантировать правильное сопоставление пользователей. Дополнительную информацию см. в документации Использование одного и того же адреса электронной почты для входа через разных провайдеров идентификации.
Перед началом
Чтобы следовать этому руководству, убедитесь, что у вас есть разрешения в рабочем пространстве Okta для создания приложения OIDC.
Создание приложения Okta
-
В консоли администратора Okta выберите Create App Integration в меню Applications.
-
Для Sign-in method выберите OIDC - OpenID Connect.
-
Для Application type выберите Web Application и нажмите Next.
-
Настройте New Web App Integration Operations:
- App integration name: выберите имя для приложения.
- Logo (optional): добавьте логотип.
- Grant type: выберите Authorization Code и Refresh Token.
- Sign-in redirect URIs: замените настройку по умолчанию на путь Okta Grafana Cloud, заменив <YOUR_ORG> на имя вашей организации Grafana: https://<YOUR_ORG>.grafana.net/login/okta. Для локальной установки используйте URL сервера Grafana: http://<my_grafana_server_name_or_ip>:<grafana_server_port>/login/okta.
- Sign-out redirect URIs (optional): замените настройку по умолчанию на путь Okta Grafana Cloud, заменив <YOUR_ORG> на имя вашей организации Grafana: https://<YOUR_ORG>.grafana.net/logout. Для локальной установки используйте URL сервера Grafana: http://<my_grafana_server_name_or_ip>:<grafana_server_port>/logout.
- Base URIs (optional): добавьте любые базовые URI
- Controlled access: выберите, назначать ли интеграцию приложения всем в вашей организации или только выбранным группам. Вы можете назначить этот параметр после создания приложения.
-
Запишите следующее:
- ClientID
- Client Secret
- Auth URL Например: https://<TENANT_ID>.okta.com/oauth2/v1/authorize
- Token URL Например: https://<TENANT_ID>.okta.com/oauth2/v1/token
- API URL Например: https://<TENANT_ID>.okta.com/oauth2/v1/userinfo
Настройка сопоставления ролей Okta с Grafana
-
В Okta Admin Console выберите Directory > Profile Editor.
-
Выберите профиль приложения Okta, который вы создали ранее (имя по умолчанию для него —
<App name> User). -
Выберите Add Attribute и заполните следующие поля:
- Data Type: string
- Display Name: осмысленное имя. Например,
Grafana Role. - Variable Name: осмысленное имя. Например,
grafana_role. - Description (optional): описание роли.
- Enum: выберите Define enumerated list of values и добавьте следующее:
- Display Name: Admin Value: Admin
- Display Name: Editor Value: Editor
- Display Name: Viewer Value: Viewer
Оставшиеся атрибуты необязательны и могут быть заданы по мере необходимости.
-
Нажмите Save.
-
(Необязательно) Вы можете добавить атрибут роли в профиль User по умолчанию. Для этого следуйте шагам в разделе Необязательно: добавление атрибута роли в профиль User (default) Okta.
Настройка утверждения Groups
- В Okta Admin Console выберите Application > Applications.
- Выберите приложение OpenID Connect, которое вы создали.
- Перейдите на вкладку Sign On и нажмите Edit в разделе OpenID Connect ID Token.
- В разделе Group claim type выберите Filter.
- В разделе Group claim filter оставьте имя по умолчанию
groups(или добавьте его, если поле пустое), затем выберите Matches regex и добавьте следующее регулярное выражение:.*. - Нажмите Save.
- Нажмите ссылку Back to applications в верхней части страницы.
- В выпадающем меню кнопки More нажмите Refresh Application Data.
- Включите область
groupsв поле Scopes в Grafana для интеграции Okta. Для Terraform или в файле конфигурации Grafana включите областьgroupsв полеscopes.
Note
Если вы настраиваете утверждение
groupsиначе, убедитесь, что утверждениеgroupsявляется строковым массивом.
Необязательно: добавление атрибута роли в профиль User (default) Okta
Если вы хотите настроить роль для всех пользователей в каталоге Okta, вы можете добавить атрибут роли в профиль User (default) Okta.
- Вернитесь в раздел Directory и выберите Profile Editor.
- Выберите профиль User (default) Okta и нажмите Add Attribute.
- Установите все атрибуты так же, как вы делали в Шаге 3.
- Выберите Add Mapping, чтобы добавить ваши новые атрибуты. Например, user.grafana_role -> grafana_role.
- Чтобы добавить роль пользователю, выберите пользователя в разделе Directory и нажмите Profile -> Edit.
- Выберите вариант из вашего нового атрибута и нажмите Save.
- Обновите интеграцию Okta, установив
Role attribute path(role_attribute_pathв Terraform и файле конфигурации) в<YOUR_ROLE_VARIABLE>. Например:role_attribute_path = grafana_role(при использовании конфигурации).
Настройка клиента аутентификации Okta через интерфейс Grafana
Как администратор Grafana вы можете настроить клиент Okta OAuth2 изнутри Grafana через интерфейс Okta. Для этого перейдите на страницу Administration > Authentication > Okta и заполните форму. Если у вас есть текущая конфигурация в файле конфигурации Grafana, форма будет предварительно заполнена этими значениями, в противном случае форма будет содержать значения по умолчанию.
После того как вы заполнили форму, нажмите Save. Если сохранение прошло успешно, Grafana применит новые конфигурации.
Если вам нужно сбросить изменения, сделанные в интерфейсе, обратно к значениям по умолчанию, нажмите Reset. После сброса изменений Grafana применит конфигурацию из файла конфигурации Grafana (если есть какая-либо конфигурация) или значения по умолчанию.
Note
Если вы запускаете Grafana в режиме высокой доступности, изменения конфигурации могут примениться не ко всем экземплярам Grafana сразу. Возможно, вам придётся подождать несколько минут, пока конфигурация распространится на все экземпляры Grafana.
Дополнительную информацию см. в разделе параметры конфигурации.
Настройка клиента аутентификации Okta с помощью провайдера Terraform
resource "grafana_sso_settings" "okta_sso_settings" {
provider_name = "okta"
oauth2_settings {
name = "Okta"
auth_url = "https://<okta tenant id>.okta.com/oauth2/v1/authorize"
token_url = "https://<okta tenant id>.okta.com/oauth2/v1/token"
api_url = "https://<okta tenant id>.okta.com/oauth2/v1/userinfo"
client_id = "CLIENT_ID"
client_secret = "CLIENT_SECRET"
allow_sign_up = true
auto_login = false
scopes = "openid profile email offline_access"
role_attribute_path = "contains(groups[*], 'Example::DevOps') && 'Admin' || 'None'"
role_attribute_strict = true
allowed_groups = "Example::DevOps,Example::Dev,Example::QA"
}
}
Полное справочное руководство по использованию ресурса grafana_sso_settings см. в Terraform Registry.
Настройка клиента аутентификации Okta с помощью файла конфигурации Grafana
Убедитесь, что у вас есть доступ к файлу конфигурации Grafana.
Шаги
Чтобы интегрировать вашего провайдера Okta OIDC с Grafana с помощью нашей интеграции Okta OIDC, выполните следующие шаги:
-
Следуйте шагам из раздела Создание приложения Okta, чтобы создать приложение OIDC в Okta.
-
Обратитесь к следующей таблице, чтобы обновить значения полей, расположенных в разделе
[auth.okta]файла конфигурации Grafana: -
Просмотрите список других параметров конфигурации Okta OIDC и заполните их по мере необходимости.
-
Необязательно: Настройте refresh-токен.
-
Необязательно: Настройте синхронизацию команд.
-
Перезапустите Grafana.
Теперь вы должны увидеть кнопку входа Okta OIDC на странице входа и иметь возможность войти или зарегистрироваться у вашего провайдера OIDC.
Ниже приведён пример минимально работающей интеграции при настройке с помощью приведённых выше инструкций:
[auth.okta]
name = Okta
icon = okta
enabled = true
allow_sign_up = true
client_id = <client id>
scopes = openid profile email offline_access
auth_url = https://<okta tenant id>.okta.com/oauth2/v1/authorize
token_url = https://<okta tenant id>.okta.com/oauth2/v1/token
api_url = https://<okta tenant id>.okta.com/oauth2/v1/userinfo
role_attribute_path = grafana_role
role_attribute_strict = true
allowed_groups = "Example::DevOps" "Example::Dev" "Example::QA"
Настройка refresh-токена
Когда пользователь входит в систему с помощью провайдера OAuth, Grafana проверяет, что access-токен не истёк. Когда access-токен истекает, Grafana использует предоставленный refresh-токен (если он есть) для получения нового access-токена без необходимости для пользователя входить в систему снова.
Если refresh-токен не существует, Grafana выполняет выход пользователя из системы после истечения access-токена.
Чтобы включить Refresh Token, перейдите в настройки приложения Okta и:
- На вкладке
Generalнайдите разделGeneral Settings. - В параметрах
Grant Typeустановите флажокRefresh Token.
В файле конфигурации расширьте scopes в разделе [auth.okta] с помощью offline_access и установите use_refresh_token в true.
Настройка валидации ID-токена JWT
По умолчанию Grafana извлекает информацию о пользователе из ID-токенов, не проверяя их криптографические подписи. Для повышения безопасности вы можете включить валидацию подписи JWT, чтобы гарантировать, что ID-токены подлинны и не были подделаны.
Чтобы включить валидацию ID-токена JWT:
-
Установите
validate_id_tokenвtrueв разделе[auth.okta]файла конфигурации Grafana. -
Настройте
jwk_set_urlс URL конечной точки JSON Web Key Set (JWKS) вашего тенанта Okta. Эта конечная точка предоставляет публичные ключи, используемые для проверки подписей JWT.Для Okta конечная точка JWKS:
https://<tenant-id>.okta.com/oauth2/v1/keys
Пример конфигурации:
[auth.okta]
enabled = true
validate_id_token = true
jwk_set_url = https://<tenant-id>.okta.com/oauth2/v1/keys
client_id = <client id>
client_secret = <client secret>
scopes = openid profile email groups
Note
Когда валидация JWT включена, Grafana кэширует ключи JWKS для повышения производительности. Кэш учитывает заголовок
Cache-Controlиз ответа конечной точки JWKS. Если срок истечения кэша не указан, ключи кэшируются на 5 минут по умолчанию.
Caution
Если
validate_id_tokenустановлен вtrue, вы должны настроитьjwk_set_url. Аутентификация завершится неудачей, если JWK Set URL не предоставлен или если подпись ID-токена не может быть проверена.
Настройка сопоставления ролей
Note
Если только не включён параметр
skip_org_role_sync, роль пользователя будет установлена в роль, полученную от провайдера аутентификации при входе пользователя.
Роль пользователя извлекается с помощью выражения JMESPath из параметра конфигурации role_attribute_path по полезной нагрузке конечной точки api_url (конечная точка /userinfo OIDC).
Если допустимая роль не найдена, пользователю назначается роль, указанная параметром auto_assign_org_role.
Вы можете отключить это назначение роли по умолчанию, установив role_attribute_strict = true. Этот параметр запрещает доступ пользователю, если не возвращена роль или возвращена недопустимая роль после вычисления выражений role_attribute_path и org_mapping.
Вы можете использовать параметры конфигурации org_attribute_path и org_mapping для назначения пользователя организациям и указания его роли. Дополнительную информацию см. в разделе Пример сопоставления ролей организации. Если указаны и сопоставление роли организации (org_mapping), и обычное сопоставление роли (role_attribute_path), то пользователь получит более высокую из двух сопоставленных ролей.
Чтобы разрешить сопоставление роли администратора сервера Grafana, используйте параметр конфигурации allow_assign_grafana_admin.
Дополнительную информацию см. в разделе параметры конфигурации.
В разделе Создание приложения Okta вы создали пользовательский атрибут в Okta для хранения роли. Вы можете использовать этот атрибут для сопоставления роли с ролью Grafana, установив параметр конфигурации role_attribute_path в имя пользовательского атрибута: role_attribute_path = grafana_role.
Если вы хотите сопоставить роль на основе группы пользователя, вы можете использовать атрибут groups из конечной точки user info. Пример этого: role_attribute_path = contains(groups[*], 'Example::DevOps') && 'Admin' || 'None'. Больше примеров выражений JMESPath можно найти на странице Generic OAuth в разделе примеры JMESPath.
Чтобы узнать о добавлении пользовательских утверждений к информации о пользователе в Okta, см. добавление пользовательских утверждений.
Пример сопоставления ролей организации
Note
Доступно в самостоятельно управляемых установках Grafana.
В этом примере org_mapping использует атрибут groups в качестве источника (org_attribute_path) для сопоставления текущего пользователя с разными организациями и ролями. Пользователю предоставлена роль Viewer в организации org_foo, если он является членом группы Group 1, роль Editor в организации org_bar, если он является членом группы Group 2, и роль Editor в организации org_baz (OrgID=3).
Конфигурация:
org_attribute_path = groups
org_mapping = ["Group 1:org_foo:Viewer", "Group 2:org_bar:Editor", "*:3:Editor"]
Настройка синхронизации команд
Note
Доступно в Grafana Enterprise и Grafana Cloud.
Используя синхронизацию команд, вы можете связать свои группы Okta с командами внутри Grafana. Это автоматически назначит пользователей соответствующим командам.
Сопоставьте свои группы Okta с командами в Grafana, чтобы ваши пользователи автоматически добавлялись в правильные команды.
На группы Okta можно ссылаться по именам групп, например Admins или Editors.
Чтобы узнать больше о синхронизации команд, см. Настройка синхронизации команд.
Параметры конфигурации
Следующая таблица описывает различные параметры конфигурации Okta OIDC. Вы можете применять эти параметры как переменные среды, как и любую другую конфигурацию в Grafana. Дополнительную информацию см. в разделе Переопределение конфигурации с помощью переменных среды.
Note
Если параметр конфигурации требует выражения JMESPath, которое содержит двоеточие, заключите всё выражение в кавычки, чтобы предотвратить ошибки разбора. Например
role_attribute_path: "role:view"