Настройка аутентификации 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

  1. В консоли администратора Okta выберите Create App Integration в меню Applications.

  2. Для Sign-in method выберите OIDC - OpenID Connect.

  3. Для Application type выберите Web Application и нажмите Next.

  4. Настройте 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: выберите, назначать ли интеграцию приложения всем в вашей организации или только выбранным группам. Вы можете назначить этот параметр после создания приложения.
  5. Запишите следующее:

    • 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

  1. В Okta Admin Console выберите Directory > Profile Editor.

  2. Выберите профиль приложения Okta, который вы создали ранее (имя по умолчанию для него — <App name> User).

  3. Выберите 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

    Оставшиеся атрибуты необязательны и могут быть заданы по мере необходимости.

  4. Нажмите Save.

  5. (Необязательно) Вы можете добавить атрибут роли в профиль User по умолчанию. Для этого следуйте шагам в разделе Необязательно: добавление атрибута роли в профиль User (default) Okta.

Настройка утверждения Groups

  1. В Okta Admin Console выберите Application > Applications.
  2. Выберите приложение OpenID Connect, которое вы создали.
  3. Перейдите на вкладку Sign On и нажмите Edit в разделе OpenID Connect ID Token.
  4. В разделе Group claim type выберите Filter.
  5. В разделе Group claim filter оставьте имя по умолчанию groups (или добавьте его, если поле пустое), затем выберите Matches regex и добавьте следующее регулярное выражение: .*.
  6. Нажмите Save.
  7. Нажмите ссылку Back to applications в верхней части страницы.
  8. В выпадающем меню кнопки More нажмите Refresh Application Data.
  9. Включите область groups в поле Scopes в Grafana для интеграции Okta. Для Terraform или в файле конфигурации Grafana включите область groups в поле scopes.

Note

Если вы настраиваете утверждение groups иначе, убедитесь, что утверждение groups является строковым массивом.

Необязательно: добавление атрибута роли в профиль User (default) Okta

Если вы хотите настроить роль для всех пользователей в каталоге Okta, вы можете добавить атрибут роли в профиль User (default) Okta.

  1. Вернитесь в раздел Directory и выберите Profile Editor.
  2. Выберите профиль User (default) Okta и нажмите Add Attribute.
  3. Установите все атрибуты так же, как вы делали в Шаге 3.
  4. Выберите Add Mapping, чтобы добавить ваши новые атрибуты. Например, user.grafana_role -> grafana_role.
  5. Чтобы добавить роль пользователю, выберите пользователя в разделе Directory и нажмите Profile -> Edit.
  6. Выберите вариант из вашего нового атрибута и нажмите Save.
  7. Обновите интеграцию 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

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, выполните следующие шаги:

  1. Следуйте шагам из раздела Создание приложения Okta, чтобы создать приложение OIDC в Okta.

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

    Поле Описание
    client_id Эти значения должны совпадать с client ID вашего приложения Okta OIDC.
    auth_url Конечная точка авторизации вашего провайдера OIDC. https://<okta-tenant-id>.okta.com/oauth2/v1/authorize
    token_url Конечная точка токена вашего провайдера Okta OIDC. https://<okta-tenant-id>.okta.com/oauth2/v1/token
    api_url Конечная точка информации о пользователе вашего провайдера Okta OIDC. https://<tenant-id>.okta.com/oauth2/v1/userinfo
    enabled Включает аутентификацию Okta OIDC. Установите это значение в true.
  3. Просмотрите список других параметров конфигурации Okta OIDC и заполните их по мере необходимости.

  4. Необязательно: Настройте refresh-токен.

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

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

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

    Теперь вы должны увидеть кнопку входа Okta OIDC на странице входа и иметь возможность войти или зарегистрироваться у вашего провайдера OIDC.

Ниже приведён пример минимально работающей интеграции при настройке с помощью приведённых выше инструкций:

ini
[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 и:

  1. На вкладке General найдите раздел General Settings.
  2. В параметрах Grant Type установите флажок Refresh Token.

В файле конфигурации расширьте scopes в разделе [auth.okta] с помощью offline_access и установите use_refresh_token в true.

Настройка валидации ID-токена JWT

По умолчанию Grafana извлекает информацию о пользователе из ID-токенов, не проверяя их криптографические подписи. Для повышения безопасности вы можете включить валидацию подписи JWT, чтобы гарантировать, что ID-токены подлинны и не были подделаны.

Чтобы включить валидацию ID-токена JWT:

  1. Установите validate_id_token в true в разделе [auth.okta] файла конфигурации Grafana.

  2. Настройте jwk_set_url с URL конечной точки JSON Web Key Set (JWKS) вашего тенанта Okta. Эта конечная точка предоставляет публичные ключи, используемые для проверки подписей JWT.

    Для Okta конечная точка JWKS: https://<tenant-id>.okta.com/oauth2/v1/keys

Пример конфигурации:

ini
[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).

Конфигурация:

ini
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"

Параметр Обязательно Поддерживается в Cloud Описание По умолчанию
enabled Нет Да Включает аутентификацию Okta OIDC. false
name Нет Да Имя, которое ссылается на аутентификацию Okta OIDC из пользовательского интерфейса Grafana. Okta
icon Нет Да Значок, используемый для аутентификации Okta OIDC в пользовательском интерфейсе Grafana. okta
client_id Да Да Client ID, предоставленный вашим приложением Okta OIDC.
client_secret Да Да Client secret, предоставленный вашим приложением Okta OIDC.
auth_url Да Да Конечная точка авторизации вашего провайдера Okta OIDC.
token_url Да Да Конечная точка, используемая для получения access-токена Okta OIDC.
token_exchange_timeout Нет Да Тайм-аут в секундах для запроса обмена токена OAuth. Если установлено 0 или не задано, по умолчанию 15 секунд. 15
api_url Да Да Конечная точка, используемая для получения информации о пользователе.
scopes Нет Да Список областей Okta OIDC, разделённых запятыми или пробелами. openid profile email groups
allow_sign_up Нет Да Управляет созданием пользователей Grafana через вход Okta OIDC. Только существующие пользователи Grafana могут войти с Okta OIDC, если установлено false. true
auto_login Нет Да Установите true, чтобы позволить пользователям обойти экран входа и войти автоматически. Этот параметр игнорируется, если вы настроили несколько провайдеров аутентификации на использование автоматического входа. false
role_attribute_path Нет Да Выражение JMESPath, используемое для поиска роли Grafana. Grafana сначала вычислит выражение, используя ID-токен Okta OIDC. Если роль не найдена, выражение будет вычислено с использованием информации о пользователе, полученной от конечной точки UserInfo. Результат вычисления должен быть допустимой ролью Grafana (None, Viewer, Editor, Admin или GrafanaAdmin). Дополнительную информацию о сопоставлении ролей пользователей см. в разделе Настройка сопоставления ролей.
role_attribute_strict Нет Да Установите true, чтобы запретить вход пользователя, если роль организации Grafana не может быть извлечена с помощью role_attribute_path или org_mapping. Дополнительную информацию о сопоставлении ролей пользователей см. в разделе Настройка сопоставления ролей. false
org_attribute_path Нет Нет Выражение JMESPath, используемое для поиска роли организации Grafana. Результат вычисления будет сопоставлен с ролями организации на основе org_mapping. Дополнительную информацию о сопоставлении организации с ролью см. в разделе Пример сопоставления ролей организации.
org_mapping Нет Нет Список сопоставлений <ExternalOrgName>:<OrgIdOrName>:<Role>, разделённых запятыми или пробелами. Значение может быть *, что означает “Все пользователи”. Роль необязательна и может иметь следующие значения: None, Viewer, Editor или Admin. Дополнительную информацию о сопоставлении внешней организации с ролью см. в разделе Пример сопоставления ролей организации.
skip_org_role_sync Нет Да Установите true, чтобы прекратить автоматическую синхронизацию ролей пользователей. Это позволит вам вручную задавать роли организации для своих пользователей изнутри Grafana. false
allowed_groups Нет Да Список групп, разделённых запятыми или пробелами. Пользователь должен быть членом как минимум одной группы, чтобы войти.
allowed_domains Нет Да Список доменов, разделённых запятыми или пробелами. Пользователь должен принадлежать как минимум к одному домену, чтобы войти.
use_pkce Нет Да Установите true, чтобы использовать Proof Key for Code Exchange (PKCE). Grafana использует метод запроса S256 на основе SHA256 и верификатор кода размером 128 байт (в кодировке base64url). true
use_refresh_token Нет Да Установите true, чтобы использовать refresh-токен и проверять истечение access-токена. false
validate_id_token Нет Да Если включено, Grafana будет проверять подпись JWT ID-токенов, используя конечную точку JWKS. Это повышает безопасность, гарантируя, что токены подлинны и не были подделаны. false
jwk_set_url Нет Да URL конечной точки JSON Web Key Set (JWKS), используемой для проверки подписей ID-токенов JWT. Требуется, когда включена валидация ID-токена. Для Okta используйте https://<tenant-id>.okta.com/oauth2/v1/keys.
signout_redirect_url Нет Да URL для перенаправления после выхода пользователя из системы.