Настройка аутентификации Microsoft Entra ID OAuth
Аутентификация Microsoft Entra ID позволяет использовать тенант Microsoft Entra ID (ранее известный как Azure Active Directory) в качестве провайдера идентификации для Grafana. Вы можете использовать роли приложения Entra ID, чтобы назначать пользователей и группы ролям Grafana из Azure Portal.
Caution
Если вы используете один и тот же адрес электронной почты в Microsoft Entra ID и в других провайдерах аутентификации (например, Grafana.com), вам нужно выполнить дополнительную настройку, чтобы гарантировать правильное сопоставление ваших пользователей.
Дополнительную информацию см. в разделе Использование одного и того же адреса электронной почты для входа через разных провайдеров идентификации.
Регистрация приложения в Microsoft Entra ID
Чтобы включить Entra ID OAuth, зарегистрируйте своё приложение в Entra ID.
-
Войдите в портал Azure, затем нажмите Microsoft Entra ID в боковом меню.
-
Если у вас есть доступ к более чем одному тенанту, выберите свою учётную запись в правом верхнем углу. Установите свою сессию для того тенанта Entra ID, который хотите использовать.
-
В разделе Manage бокового меню нажмите App Registrations > New Registration. Введите описательное имя.
-
В разделе Redirect URI выберите тип приложения Web.
-
Добавьте URL-адреса перенаправления
https://<grafana domain>/login/azureadиhttps://<grafana domain>, затем нажмите Register. Откроется страница Overview приложения. -
Запомните Application ID. Это OAuth client ID.
-
Нажмите Endpoints в верхнем меню.
- Запомните URL OAuth 2.0 authorization endpoint (v2). Это authorization URL.
- Запомните OAuth 2.0 token endpoint (v2). Это token URL.
-
Нажмите Certificates & secrets в боковом меню, затем добавьте новую запись в разделе поддерживаемого варианта аутентификации клиента, который хотите использовать. Ниже перечислены поддерживаемые варианты аутентификации клиента с соответствующими шагами настройки.
-
Client secrets
-
Добавьте новую запись в разделе Client secrets со следующей конфигурацией.
- Description: Grafana OAuth 2.0
- Expires: выберите период истечения
-
Нажмите Add, затем скопируйте Value ключа. Это client secret OAuth 2.0.
Note
Убедитесь, что вы скопировали строку из поля Value, а не из поля Secret ID.
- Чтобы это работало, вы должны установить
client_authenticationв разделе[auth.azuread]в значениеclient_secret_postв конфигурации сервера Grafana.
-
-
Federated credentials
-
Managed Identity
-
См. Настройка приложения для доверия управляемой идентичности (предварительная версия) для полного руководства по настройке управляемой идентичности в качестве федеративных учётных данных. Добавьте новую запись в разделе Federated credentials со следующей конфигурацией.
- Federated credential scenario: выберите Other issuer.
- Issuer: URL издателя OAuth 2.0 / OIDC центра Microsoft Entra ID. Например:
https://login.microsoftonline.com/{tenantID}/v2.0. - Subject identifier: GUID Object (Principal) ID управляемой идентичности.
- Name: уникальное описательное имя для учётных данных.
- Description: Grafana OAuth.
- Audience: значение audience, которое должно появиться во внешнем токене. Для публичного облака это будет
api://AzureADTokenExchange. Полный список доступных audience см. в упомянутой документации.
-
Нажмите Add, затем скопируйте значения Managed Identity Client ID и Audience федеративных учётных данных. Это ваши федеративные учётные данные OAuth 2.0.
-
Чтобы это работало, вы должны установить
client_authenticationв разделе[auth.azuread]в значениеmanaged_identityв конфигурации сервера Grafana.
Note
Управляемые идентичности в качестве федеративных учётных данных применимы только к рабочим нагрузкам, размещённым в Azure.
Вы можете добавлять в качестве федеративных учётных данных на приложения Entra ID только управляемые идентичности, назначенные пользователем.
-
-
Workload Identity (K8s/AKS)
-
См. Федеративные учётные данные идентичности для приложения Entra ID для полного руководства по настройке федеративных учётных данных для рабочих нагрузок идентичности. Добавьте новую запись в разделе Federated credentials со следующей конфигурацией.
- Federated credential scenario: выберите Kubernetes accessing Azure resources.
- Cluster issuer URL: URL издателя OIDC, с которым интегрирован ваш кластер. Например:
https://{region}.oic.prod-aks.azure.com/{tenant_id}/{uuid}. - Namespace: пространство имён вашего развёртывания Grafana. Например:
grafana. - Service account name: имя сервисной учётной записи вашего развёртывания Grafana. Например:
grafana. - Subject identifier: ожидаемая идентичность (subject claim) из токена OIDC, которую Azure использует для проверки и авторизации выдачи токена запрашивающей рабочей нагрузке. Например:
system:serviceaccount:grafana:grafana. - Name: уникальное описательное имя для учётных данных.
- Description: Grafana OAuth.
- Audience: значение audience, которое должно появиться во внешнем токене. Для публичного облака это будет
api://AzureADTokenExchange. Полный список доступных audience см. в упомянутой документации.
-
Чтобы это работало, вы должны установить
client_authentication(переменная средыGF_AUTH_AZUREAD_CLIENT_AUTHENTICATION) в разделе[auth.azuread]в значениеworkload_identityв конфигурации сервера Grafana. -
Чтобы это работало, вы можете дополнительно установить
workload_identity_token_file(переменная средыGF_AUTH_AZUREAD_WORKLOAD_IDENTITY_TOKEN_FILE) в разделе[auth.azuread]в/var/run/secrets/azure/tokens/azure-identity-tokenв конфигурации сервера Grafana. (Необязательно, по умолчанию/var/run/secrets/azure/tokens/azure-identity-token) -
Чтобы это работало, вы должны установить
client_id(переменная средыGF_AUTH_AZUREAD_CLIENT_ID) в разделе[auth.azuread]в конфигурации сервера Grafana. Он должен совпадать с Application (client) ID регистрации приложения Entra ID/Entra ID. -
Чтобы это работало, вы должны установить
token_url(переменная средыGF_AUTH_AZUREAD_TOKEN_URL) в разделе[auth.azuread]вhttps://login.microsoftonline.com/{tenantID}/oauth2/v2.0/tokenв конфигурации сервера Grafana. -
Чтобы это работало, вы должны установить
auth_url(переменная средыGF_AUTH_AZUREAD_AUTH_URL) в разделе[auth.azuread]вhttps://login.microsoftonline.com/{tenantID}/oauth2/v2.0/authorizeв конфигурации сервера Grafana. -
Чтобы это работало, вы должны установить
federated_credential_audience(переменная средыGF_AUTH_AZUREAD_FEDERATED_CREDENTIAL_AUDIENCE) в разделе[auth.azuread]вapi://AzureADTokenExchangeв конфигурации сервера Grafana.
-
Note
Управляемые идентичности в качестве федеративных учётных данных применимы только к рабочим нагрузкам, размещённым в Azure.
Вы можете добавлять в качестве федеративных учётных данных на приложения Entra ID только управляемые идентичности, назначенные пользователем.
-
-
-
Определите необходимые роли приложения для Grafana с помощью портала Azure или с помощью файла манифеста.
-
Перейдите в Microsoft Entra ID, а затем в Enterprise Applications в разделе Manage.
-
Найдите своё приложение и нажмите на него.
-
Нажмите Users and Groups.
-
Нажмите Add user/group, чтобы добавить пользователя или группу в роли Grafana.
Note
При назначении группы на роль Grafana убедитесь, что пользователи являются прямыми участниками группы. Пользователи во вложенных группах не будут иметь доступа к Grafana из-за ограничений на стороне Entra ID. Дополнительную информацию см. в разделе Ограничения и лимиты службы Microsoft Entra.
Настройка ролей приложения для Grafana на портале Microsoft Entra ID
В этом разделе описана настройка базовых ролей приложения для Grafana на портале Entra ID. Дополнительную информацию см. в разделе Добавление ролей приложения в приложение и их получение в токене.
-
Перейдите в App Registrations, найдите своё приложение и нажмите на него.
-
Нажмите App roles, а затем Create app role.
-
Определите роль, соответствующую каждой роли Grafana: Viewer, Editor и Admin.
-
Выберите Display name для роли. Например, “Grafana Editor”.
-
Установите Allowed member types в значение Users/Groups.
-
Убедитесь, что поле Value совпадает с именем роли Grafana. Например, “Editor”.
-
Выберите Description для роли. Например, “Grafana Editor Users”.
-
Нажмите Apply.
-
Настройка ролей приложения для Grafana в файле манифеста
Если вы предпочитаете настроить роли приложения для Grafana в файле манифеста, выполните следующие шаги:
-
Перейдите в App Registrations, найдите своё приложение и нажмите на него.
-
Нажмите Manifest.
-
Добавьте универсально уникальный идентификатор (Universally Unique Identifier) для каждой роли.
Note
Каждой роли требуется универсально уникальный идентификатор, который можно сгенерировать в Linux с помощью
uuidgen, а в Windows через Microsoft PowerShell с помощьюNew-Guid.
-
Замените каждый “SOME_UNIQUE_ID” на сгенерированный ID в файле манифеста:
"appRoles": [ { "allowedMemberTypes": [ "User" ], "description": "Grafana org admin Users", "displayName": "Grafana Org Admin", "id": "SOME_UNIQUE_ID", "isEnabled": true, "lang": null, "origin": "Application", "value": "Admin" }, { "allowedMemberTypes": [ "User" ], "description": "Grafana read only Users", "displayName": "Grafana Viewer", "id": "SOME_UNIQUE_ID", "isEnabled": true, "lang": null, "origin": "Application", "value": "Viewer" }, { "allowedMemberTypes": [ "User" ], "description": "Grafana Editor Users", "displayName": "Grafana Editor", "id": "SOME_UNIQUE_ID", "isEnabled": true, "lang": null, "origin": "Application", "value": "Editor" } ], -
Нажмите Save.
Назначение привилегий администратора сервера
Используйте роль приложения GrafanaAdmin, чтобы предоставить пользователям привилегии администратора сервера. Это полезно, если вы хотите предоставить привилегии администратора сервера подмножеству пользователей.
Grafana также назначает пользователю роль Admin организации по умолчанию.
Чтобы это работало, установите параметр allow_assign_grafana_admin в разделе [auth.azuread] в true.
Если параметр установлен в false, пользователю назначается роль Admin организации по умолчанию, но не привилегии администратора сервера.
{
"allowedMemberTypes": ["User"],
"description": "Grafana server admin Users",
"displayName": "Grafana Server Admin",
"id": "SOME_UNIQUE_ID",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "GrafanaAdmin"
}
Настройка клиента аутентификации Entra ID через интерфейс Grafana
После того как вы зарегистрировали своё приложение в Entra Id, как администратор Grafana вы можете настроить клиент Entra ID OAuth изнутри Grafana через интерфейс Grafana. Для этого перейдите на страницу Administration > Authentication > Entra ID и заполните форму. Если у вас есть текущая конфигурация в файле конфигурации Grafana, форма будет предварительно заполнена этими значениями. В противном случае форма будет содержать значения по умолчанию.
После того как вы заполнили форму, нажмите Save, чтобы сохранить конфигурацию. Если сохранение прошло успешно, Grafana применит новые конфигурации.
Если вам нужно сбросить изменения, сделанные в интерфейсе, обратно к значениям по умолчанию, нажмите Reset. После сброса изменений Grafana применит конфигурацию из файла конфигурации Grafana (если есть какая-либо конфигурация) или значения по умолчанию.
Note
Если вы запускаете Grafana в режиме высокой доступности, изменения конфигурации могут примениться не ко всем экземплярам Grafana сразу. Возможно, вам придётся подождать несколько минут, пока конфигурация распространится на все экземпляры Grafana.
Настройка клиента аутентификации Entra ID с помощью провайдера Terraform
resource "grafana_sso_settings" "azuread_sso_settings" {
provider_name = "azuread"
oauth2_settings {
name = "Entra ID"
auth_url = "https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/authorize"
token_url = "https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/token"
client_authentication = "CLIENT_AUTHENTICATION_OPTION"
client_id = "APPLICATION_ID"
client_secret = "CLIENT_SECRET"
managed_identity_client_id = "MANAGED_IDENTITY_CLIENT_ID"
federated_credential_audience = "FEDERATED_CREDENTIAL_AUDIENCE"
allow_sign_up = true
auto_login = false
scopes = "openid email profile"
allowed_organizations = "TENANT_ID"
role_attribute_strict = false
allow_assign_grafana_admin = false
skip_org_role_sync = false
use_pkce = true
custom = {
domain_hint = "contoso.com"
force_use_graph_api = "true"
}
}
}
Полное справочное руководство по использованию ресурса grafana_sso_settings см. в Terraform Registry.
Настройка клиента аутентификации Entra ID с помощью файла конфигурации Grafana
Убедитесь, что у вас есть доступ к файлу конфигурации Grafana.
Включение Entra ID OAuth в Grafana
Добавьте следующее в файл конфигурации Grafana:
[auth.azuread]
name = Entra ID
enabled = true
allow_sign_up = true
auto_login = false
client_authentication = CLIENT_AUTHENTICATION_OPTION
client_id = APPLICATION_ID
client_secret = CLIENT_SECRET
managed_identity_client_id = MANAGED_IDENTITY_CLIENT_ID
federated_credential_audience = FEDERATED_CREDENTIAL_AUDIENCE
scopes = openid email profile
auth_url = https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/authorize
token_url = https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/token
allowed_domains =
allowed_groups =
allowed_organizations = TENANT_ID
role_attribute_strict = false
allow_assign_grafana_admin = false
skip_org_role_sync = false
use_pkce = true
Вы также можете использовать следующие переменные среды для настройки client_authentication, client_id, client_secret, managed_identity_client_id и federated_credential_audience:
GF_AUTH_AZUREAD_CLIENT_AUTHENTICATION
GF_AUTH_AZUREAD_CLIENT_ID
GF_AUTH_AZUREAD_CLIENT_SECRET
GF_AUTH_AZUREAD_MANAGED_IDENTITY_CLIENT_ID
GF_AUTH_AZUREAD_FEDERATED_CREDENTIAL_AUDIENCE
Note
Убедитесь, что root_url Grafana задан в URL-адресах перенаправления вашего приложения Azure.
Настройка refresh-токена
Когда пользователь входит в систему с помощью провайдера OAuth, Grafana проверяет, что access-токен не истёк. Когда access-токен истекает, Grafana использует предоставленный refresh-токен (если он есть) для получения нового access-токена.
Grafana использует refresh-токен для получения нового access-токена без необходимости для пользователя входить в систему снова. Если refresh-токен не существует, Grafana выполняет выход пользователя из системы после истечения access-токена.
Получение refresh-токена и проверка истечения access-токена включены по умолчанию для провайдера Entra ID начиная с Grafana v10.1.0. Если вы хотите отключить проверку истечения access-токена, установите значение конфигурации use_refresh_token в false.
Note
Переключатель функции
accessTokenExpirationCheckбыл удалён в Grafana v10.3.0, и вместо него для настройки получения refresh-токена и проверки истечения access-токена будет использоваться значение конфигурацииuse_refresh_token.
Настройка разрешённых тенантов
Чтобы ограничить доступ аутентифицированных пользователей, которые являются членами одного или нескольких тенантов, установите allowed_organizations
в список ID тенантов, разделённых запятыми или пробелами. ID тенантов можно найти на портале Azure в разделе Microsoft Entra ID -> Overview.
Обязательно включите ID тенантов корневого каталога всех федеративных пользователей, если ваш Entra ID содержит внешние идентичности.
Например, если вы хотите предоставить доступ только членам тенанта example с ID 8bab1c86-8fba-33e5-2089-1d1c80ec267d, установите следующее:
allowed_organizations = 8bab1c86-8fba-33e5-2089-1d1c80ec267d
Настройка разрешённых групп
Группы Microsoft Entra ID можно использовать для ограничения доступа пользователей к Grafana. Дополнительную информацию об управлении группами в Entra ID см. в разделе Управление группами и членством в группах Microsoft Entra.
Чтобы ограничить доступ аутентифицированных пользователей, которые являются членами одной или нескольких групп Entra ID, установите allowed_groups
в список object ID групп, разделённых запятыми или пробелами.
-
Чтобы найти object ID для конкретной группы на портале Azure, перейдите в Microsoft Entra ID > Manage > Groups.
Вы можете найти Object Id группы, нажав на группу и затем нажав Properties. Object ID указан в разделе Object ID. Если вы хотите предоставить доступ только членам группы
exampleс Object Id8bab1c86-8fba-33e5-2089-1d1c80ec267d, установите следующее:allowed_groups = 8bab1c86-8fba-33e5-2089-1d1c80ec267d -
Вы должны включить добавление атрибута группы в токены в вашей регистрации приложения Entra ID либо из портала Azure, либо из файла манифеста.
Настройка утверждений о членстве в группах на портале Azure
Чтобы гарантировать, что утверждение groups включено в токен, добавьте утверждение groups в конфигурацию токена либо через интерфейс портала Azure, либо путём редактирования файла манифеста.
Чтобы настроить утверждения о членстве в группах из интерфейса портала Azure, выполните следующие шаги:
- Перейдите на страницу App Registrations и выберите своё приложение.
- В разделе Manage бокового меню выберите Token configuration.
- Нажмите Add groups claim и выберите подходящий вариант для вашего случая использования (например, Security groups и Groups assigned to the application).
Дополнительную информацию см. в разделе Настройка необязательных утверждений групп.
Note
Если пользователь является членом более 200 групп, Entra ID не выдаёт утверждение groups в токене, а вместо этого выдаёт утверждение group overage. Чтобы настроить утверждение group overage, см. Пользователи с более чем 200 назначениями групп.
Настройка утверждения о членстве в группах в файле манифеста
-
Перейдите в App Registrations, найдите своё приложение и нажмите на него.
-
Нажмите Manifest.
-
Добавьте следующее в корень файла манифеста:
"groupMembershipClaims": "ApplicationGroup, SecurityGroup"
Настройка разрешённых доменов
Параметр allowed_domains ограничивает доступ пользователями, которые принадлежат к определённым доменам. Разделяйте домены пробелом или запятой. Например,
allowed_domains = mycompany.com mycompany.org
PKCE
RFC 7636 от IETF вводит “proof key for code exchange” (PKCE), который обеспечивает дополнительную защиту от некоторых форм атак перехвата кода авторизации. PKCE будет требоваться в OAuth 2.1.
Вы можете отключить PKCE в Grafana, установив
use_pkceвfalseв разделе[auth.azuread].
Настройка автоматического входа
Чтобы обойти экран входа и войти автоматически, включите функцию “auto_login”. Этот параметр игнорируется, если несколько провайдеров аутентификации настроены на использование автоматического входа.
auto_login = true
Синхронизация команд
Note
Доступно в Grafana Enterprise и для клиентов на отдельных планах Grafana Cloud. Информацию о ценах см. на странице цены или свяжитесь с нашей командой продаж.
С синхронизацией команд вы можете сопоставить ваши группы Entra ID с командами в Grafana, чтобы ваши пользователи автоматически добавлялись в правильные команды.
Вы можете ссылаться на группы Entra ID по object ID группы, например 8bab1c86-8fba-33e5-2089-1d1c80ec267d.
Чтобы узнать больше, см. документацию Синхронизация команд.
Пропуск синхронизации ролей организации
Если вы не хотите, чтобы аутентификация Entra ID синхронизировала роли пользователей и членство в организациях, и хотите предотвратить синхронизацию ролей организации из Entra ID, установите skip_org_role_sync в true. Используйте это, если хотите управлять ролями организации для своих пользователей изнутри Grafana или если ваши роли организации синхронизируются из другого провайдера.
См. Настройка Grafana для более подробной информации.
[auth.azuread]
# ..
# prevents the sync of org roles from Entra ID
skip_org_role_sync = true
Параметры конфигурации
Следующая таблица описывает различные параметры конфигурации Entra ID. Вы можете применять эти параметры как переменные среды, как и любую другую конфигурацию в Grafana. Дополнительную информацию см. в разделе Переопределение конфигурации с помощью переменных среды.
Распространённые проблемы
Вот некоторые распространённые проблемы и особенности, с которыми вы можете столкнуться при настройке аутентификации Entra ID в Grafana.
Пользователи с более чем 200 назначениями групп
Чтобы гарантировать, что размер токена не превышает лимиты размера заголовка HTTP, Entra ID ограничивает количество object ID, включаемых в утверждение groups. Если пользователь является членом большего числа групп, чем лимит покрытия (200), то Entra ID не выдаёт утверждение groups в токене, а вместо этого выдаёт утверждение group overage.
Больше информации в Groups overage claim
Если Grafana получает токен с утверждением group overage вместо утверждения groups, Grafana пытается получить членство пользователя в группах, вызывая включённую конечную точку.
Регистрация приложения Entra ID должна включать следующие разрешения API, чтобы вызовы утверждения group overage были успешными:
Согласие администратора требуется для разрешения GroupMember.Read.All. Чтобы предоставить согласие администратора, перейдите в API permissions в App registration и выберите Grant admin consent for [your-organization].
Note
Вы можете заставить Grafana всегда получать информацию о группах из Microsoft Graph API, включив параметр
force_use_graph_apiв конфигурации.
Настройка необходимых разрешений Graph API
- Перейдите в Microsoft Entra ID > Manage > App registrations и выберите своё приложение.
- Выберите API permissions, а затем нажмите Add a permission.
- Выберите Microsoft Graph из списка API.
- Выберите Delegated permissions.
- В разделе GroupMember выберите GroupMember.Read.All.
- Нажмите Add permissions.
- Выберите Microsoft Graph из списка API.
- Выберите Delegated permissions.
- В области Select permissions в разделе User выберите User.Read.
- Нажмите кнопку Add permissions в нижней части страницы.
Note
Для этого разрешения может потребоваться согласие администратора.
Принудительное получение групп из Microsoft Graph API
Чтобы принудительно получать группы из Microsoft Graph API вместо id_token, можно использовать параметр конфигурации force_use_graph_api.
[auth.azuread]
force_use_graph_api = true
Сопоставление ролей
По умолчанию аутентификация Entra ID сопоставляет пользователей с ролями организации на основе наиболее привилегированной роли приложения, назначенной пользователю в Entra ID.
Если роль приложения не найдена, пользователю назначается роль, указанная
параметром auto_assign_org_role.
Вы можете отключить это назначение роли по умолчанию, установив role_attribute_strict = true. Этот параметр запрещает доступ пользователю, если не возвращена роль или возвращена недопустимая роль, а выражение org_mapping вычисляется в пустое сопоставление.
Вы можете использовать параметр конфигурации org_mapping для назначения пользователя нескольким организациям и указания его роли на основе его членства в группах Entra ID. Дополнительную информацию см. в разделе Пример сопоставления ролей организации. Если сопоставление роли организации (org_mapping) указано и Entra ID возвращает допустимую роль, то пользователь получит более высокую из двух ролей.
При каждом входе роль организации пользователя будет сброшена в соответствии с ролью приложения Entra ID, а его членство в организации будет сброшено на организацию по умолчанию.
Пример сопоставления ролей организации
Интеграция Entra ID использует группы внешних пользователей в конфигурации org_mapping для сопоставления организаций и ролей на основе их членства в группах Entra ID.
В этом примере пользователю предоставлена роль Viewer в организации org_foo и роль Editor в организациях org_bar и org_baz.
Внешний пользователь является частью следующих групп Entra ID: 032cb8e0-240f-4347-9120-6f33013e817a и bce1c492-0679-4989-941b-8de5e6789cb9.
Конфигурация:
org_mapping = ["032cb8e0-240f-4347-9120-6f33013e817a:org_foo:Viewer", "bce1c492-0679-4989-941b-8de5e6789cb9:org_bar:Editor", "*:org_baz:Editor"]