Настройка Azure DevOps с использованием сервисного пользователя
Обзор сервисного пользователя
Сервисные пользователи больше не являются рекомендуемым методом аутентификации, и dbt постепенно внедряет новый вариант — service principal Microsoft Entra ID. Как только эта опция станет доступна в настройках вашего аккаунта, вам следует запланировать миграцию с сервисного пользователя на service principal. Service principal — это рекомендуемый Microsoft тип сервисной учетной записи для аутентификации приложений.
Чтобы использовать нативную интеграцию с Azure DevOps в dbt, администратор аккаунта должен настроить приложение Microsoft Entra ID. Мы рекомендуем создавать отдельное приложение Entra ID, отличное от используемого для SSO.
- Зарегистрировать приложение Entra ID.
- Добавить разрешения для нового приложения.
- Добавить дополнительный redirect URI.
- Подключить Azure DevOps к новому приложению.
- Добавить приложение Entra ID в dbt.
После добавления приложения Microsoft Entra ID в dbt, администратор аккаунта также должен подключить сервисного пользователя через OAuth. Этот пользователь будет использоваться для headless‑действий в dbt, таких как deployment‑запуски и CI.
После того как приложение Microsoft Entra ID добавлено в dbt и сервисный пользователь подключен, разработчики dbt смогут выполнять персональную аутентификацию в dbt через Azure DevOps. Подробнее см. Аутентификация с Azure DevOps.
Для выполнения шагов на этой странице требуются следующие роли:
- администратор Microsoft Entra ID
- администратор Azure DevOps
- администратор аккаунта dbt
- администратор Azure (если среды Entra ID и Azure DevOps не связаны)
Регистрация приложения Microsoft Entra ID
Администратор Microsoft Entra ID должен выполнить следующие шаги:
- Войдите в Azure portal и выберите Microsoft Entra ID.
- В левой панели выберите App registrations.
- Нажмите New registration. Откроется форма создания нового приложения Entra ID.
- Укажите имя приложения. Мы рекомендуем использовать, например,
dbt Labs Azure DevOps app. - В качестве Supported Account Types выберите Accounts in any organizational directory (Any Entra ID directory - Multitenant).
Многие клиенты спрашивают, почему необходимо выбирать Multitenant вместо Single tenant, и часто ошибаются на этом шаге. Microsoft рассматривает Azure DevOps (ранее Visual Studio) и Microsoft Entra ID как отдельные тенанты, поэтому для корректной работы приложения Entra ID необходимо выбрать Multitenant. - Добавьте redirect URI.
- Выберите платформу Web.
- В поле введите
https://YOUR_ACCESS_URL/complete/azure_active_directory. Обязательно заменитеYOUR_ACCESS_URLна соответствующий Access URL для вашего региона и плана.
- Нажмите Register.
Вот как должно выглядеть приложение перед регистрацией:
Добавление разрешений для нового приложения
Администратор Entra ID должен предоставить новому приложению доступ к Azure DevOps:
- В левой панели навигации выберите API permissions.
- Удалите разрешение Microsoft Graph / User Read.
- Нажмите Add a permission.
- Выберите Azure DevOps.
- Выберите разрешение user_impersonation. Это единственное доступное разрешение для Azure DevOps.
Добавление дополнительного redirect URI
Администратор Microsoft Entra ID должен добавить еще один redirect URI в приложение Entra ID. Этот redirect URI будет использоваться для аутентификации сервисного пользователя при headless‑действиях в средах деплоя.
Перед добавлением убедитесь, что при регистрации приложения Microsoft Entra ID в качестве платформы была выбрана Web.
- Перейдите к вашему приложению Microsoft Entra ID.
- Нажмите на ссылку рядом с Redirect URIs.
- Нажмите Add URI и добавьте URI, заменив
YOUR_ACCESS_URLна соответствующий Access URL для вашего региона и плана:
https://YOUR_ACCESS_URL/complete/azure_active_directory_service_user - Нажмите Save.
Создание client secret
Администратор Microsoft Entra ID должен выполнить следующие шаги:
- Перейдите к вашему приложению Microsoft Entra ID.
- В левой панели навигации выберите Certificates and Secrets.
- Выберите Client secrets и нажмите New client secret.
- Задайте описание секрета и выберите срок действия. Нажмите Add.
- Скопируйте значение поля Value и безопасно передайте его администратору аккаунта dbt, который завершит настройку.
Подключение Azure DevOps к новому приложению
Администратору Azure потребуется одно из следующих разрешений как в Microsoft Entra ID, так и в Azure DevOps:
- Azure Service Administrator
- Azure Co-administrator
Если ваш аккаунт Azure DevOps уже подключен к Entra ID, вы можете перейти к разделу Подключение сервисного пользователя. Если же вы только настраиваете интеграцию, подключите Azure DevOps к созданному приложению Microsoft Entra ID:
- В аккаунте Azure DevOps выберите Organization settings в левом нижнем углу.
- Перейдите в раздел Microsoft Entra ID.
- Нажмите Connect directory.
- Выберите каталог, который нужно подключить.
- Нажмите Connect.
Добавление приложения Microsoft Entra ID в dbt
Администратор аккаунта dbt должен выполнить следующие шаги.
После подключения приложения Microsoft Entra ID и Azure DevOps необходимо предоставить dbt информацию о приложении:
- Перейдите в настройки аккаунта в dbt.
- Выберите Integrations.
- Прокрутите до раздела Azure DevOps и нажмите на значок карандаша для редактирования интеграции.
- Заполните форму:
- Azure DevOps Organization: должно в точности совпадать с именем вашей организации Azure DevOps. Не включайте префикс
dev.azure.com/. ✅ Используйтеmy-devops-org❌ Не используйтеdev.azure.com/my-devops-org - Application (client) ID: указывается из приложения Microsoft Entra ID.
- Client Secrets: скопируйте значение поля Value из client secret приложения Microsoft Entra ID и вставьте его в поле Client Secret в dbt. Администраторы Entra ID отвечают за срок действия секрета, а администраторы dbt должны учитывать дату его истечения для ротации.
- Directory(tenant) ID: указывается из приложения Microsoft Entra ID.
- Azure DevOps Organization: должно в точности совпадать с именем вашей организации Azure DevOps. Не включайте префикс
Теперь приложение Microsoft Entra ID должно быть добавлено в ваш аккаунт dbt. Участники команды, которые хотят разрабатывать в Studio IDE или использовать CLI dbt, могут персонально авторизовать Azure DevOps из своего профиля.
Подключение сервисного пользователя
Сервисный пользователь — это псевдо‑пользователь, который настраивается аналогично реальному пользователю‑администратору, но получает разрешения, специально ограниченные для взаимодействия сервис‑к‑сервису. Следует избегать привязки аутентификации к реальному пользователю Azure DevOps, поскольку при его уходе из организации dbt потеряет доступ к репозиториям dbt в Azure DevOps, что приведет к сбоям production‑запусков.
dbt обновляет аутентификацию сервисного пользователя при каждом запуске, инициированном планировщиком, API или CI. Если в аккаунте не было активных запусков более 90 дней, администратору потребуется вручную обновить аутентификацию сервисного пользователя, отключив и повторно подключив его профиль через OAuth‑процесс, описанный выше, чтобы возобновить headless‑взаимодействия, такие как настройка проектов, deployment‑запуски и CI.
Разрешения сервисного пользователя
Аккаунт сервисного пользователя должен иметь следующие разрешения Azure DevOps для всех проектов и репозиториев, к которым требуется доступ в dbt. Ниже описано, как dbt использует каждое из этих разрешений.
- Project Reader
- ViewSubscriptions
- EditSubscriptions
- DeleteSubscriptions *
- PullRequestContribute
- GenericContribute
* Примечание: разрешение DeleteSubscriptions может входить в EditSubscriptions в зависимости от версии Azure.
Некоторые из этих разрешений доступны только через Azure DevOps API или CLI. Ниже мы также привели дополнительную информацию об использовании Azure DevOps API, чтобы ускорить настройку. Альтернативно вы можете включить разрешения через UI Azure DevOps, однако в этом случае нельзя добиться минимально необходимого набора разрешений.
- Обязательные разрешения для сервисных пользователей
- Отключение MFA для сервисного пользователя
Разрешения сервисного пользователя также определяют, какие репозитории команда сможет выбрать при создании dbt‑проекта. Поэтому администратор Azure DevOps должен предоставить сервисному пользователю как минимум доступ Project Reader до создания нового проекта в dbt. Если вы мигрируете существующий dbt‑проект на нативную интеграцию с Azure DevOps, сервисный пользователь аккаунта dbt должен иметь корректные разрешения на репозиторий до начала миграции.
Хотя для обычных пользовательских аккаунтов часто требуется многофакторная аутентификация (MFA), аутентификация сервисного пользователя не должна требовать дополнительного фактора. Если включить второй фактор для сервисного пользователя, это может прервать production‑запуски и привести к ошибкам при клонировании репозитория. Для корректной работы OAuth‑токена рекомендуется максимально упростить подтверждение личности для сервисных пользователей.
В результате MFA должно быть явно отключено в панели администрирования Office 365 или Microsoft Entra ID для сервисного пользователя. Простого «неподключенного» состояния недостаточно, так как dbt будет запрашивать настройку MFA вместо использования учетных данных по назначению.
Чтобы отключить MFA для одного пользователя через консоль администрирования Office 365:
- Перейдите в Microsoft 365 admin center -> Users -> Active users -> выберите пользователя -> Manage multifactor authentication -> выберите пользователя -> Disable multi-factor authentication.
Использование интерфейса Microsoft Entra ID:
Обратите внимание: эта процедура включает отключение Security Defaults в среде Entra ID.
- Перейдите в Azure Admin Center. Откройте Microsoft Entra ID и в разделе Manage левой панели выберите Properties, прокрутите до Manage Security defaults, затем выберите No в пункте "Enable Security Defaults" и нажмите Save.
- Перейдите в Microsoft Entra ID -> Manage -> Users -> нажмите на многоточие (...) и выберите ссылку Multi-Factor Authentication. Если ссылка неактивна, убедитесь, что Security Defaults были отключены на предыдущем шаге.
- Если MFA включена для пользователей, выберите нужного пользователя (или пользователей) и в разделе Quick steps нажмите Disable.
- Подтвердите изменения, выбрав Yes.
Чтобы снова включить MFA для пользователя, выберите его и нажмите Enable. Обратите внимание, что после этого может потребоваться повторная настройка MFA для данного пользователя.
ViewSubscriptions
Security Namespace ID: cb594ebe-87dd-4fc9-ac2c-6a10a4c92046
Namespace: ServiceHooks
Permission:
{
"bit": 1,
"displayName": "View Subscriptions",
"name": "ViewSubscriptions"
}
Uses: Для просмотра существующих подписок service hooks в Azure DevOps
Token (where applicable - API only):
- PublisherSecurity для доступа ко всем проектам
- PublisherSecurity/<azure_devops_project_object_id> для доступа к отдельному проекту
UI/API/CLI: только API/CLI
Sample CLI code snippet
az devops security permission update --organization https://dev.azure.com/<org_name> --namespace-id cb594ebe-87dd-4fc9-ac2c-6a10a4c92046 --subject <service_account>@xxxxxx.onmicrosoft.com --token PublisherSecurity/<azure_devops_project_object_id> --allow-bit 1
EditSubscriptions
Security Namespace ID: cb594ebe-87dd-4fc9-ac2c-6a10a4c92046
Namespace: ServiceHooks
Permission:
{
"bit": 2,
"displayName": "Edit Subscription",
"name": "EditSubscriptions"
}
Uses: Для добавления или обновления существующих подписок service hooks в Azure DevOps
Token (where applicable - API only):
- PublisherSecurity для доступа ко всем проектам
- PublisherSecurity/<azure_devops_project_object_id> для доступа к отдельному проекту
UI/API/CLI: только API/CLI
Sample CLI code snippet
az devops security permission update --organization https://dev.azure.com/<org_name> --namespace-id cb594ebe-87dd-4fc9-ac2c-6a10a4c92046 --subject <service_account>@xxxxxx.onmicrosoft.com --token PublisherSecurity/<azure_devops_project_object_id> --allow-bit 2
DeleteSubscriptions
Security Namespace ID: cb594ebe-87dd-4fc9-ac2c-6a10a4c92046
Namespace: ServiceHooks
Permission:
{
"bit": 4,
"displayName": "Delete Subscriptions",
"name": "DeleteSubscriptions"
}
Uses: Для удаления избыточных подписок service hooks в Azure DevOps
Token (where applicable - API only):
- PublisherSecurity для доступа ко всем проектам
- PublisherSecurity/<azure_devops_project_object_id> для доступа к отдельному проекту
UI/API/CLI: только API/CLI
Sample CLI code snippet
az devops security permission update --organization https://dev.azure.com/<org_name> --namespace-id cb594ebe-87dd-4fc9-ac2c-6a10a4c92046 --subject <service_account>@xxxxxx.onmicrosoft.com --token PublisherSecurity/<azure_devops_project_object_id> --allow-bit 4
Additional Notes: В последних версиях Azure DevOps это разрешение признано устаревшим. Разрешение Edit Subscriptions (bit 2) включает права на удаление.
PullRequestContribute
Security Namespace ID: 2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87
Namespace: Git Repositories
Permission:
{
"bit": 16384,
"displayName": "Contribute to pull requests",
"name": "PullRequestContribute"
}
Uses: Для публикации статусов Pull Request в Azure DevOps
Token (where applicable - API only):
- repoV2 для доступа ко всем проектам
- repoV2/<azure_devops_project_object_id> для доступа к отдельному проекту
- repoV2/<azure_devops_project_object_id>/<azure_devops_repository_object_id> для доступа к отдельному репозиторию
UI/API/CLI: UI, API и CLI
Sample CLI code snippet
az devops security permission update --organization https://dev.azure.com/<org_name> --namespace-id 2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87 --subject <service_account>@xxxxxx.onmicrosoft.com --token repoV2/<azure_devops_project_object_id>/<azure_devops_repository_object_id> --allow-bit 16384
Additional Notes: Это разрешение автоматически наследуется, если в UI установлен Project Reader/Contributor/Administrator.
GenericContribute
Security Namespace ID: 2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87
Namespace: Git Repositories
Permission:
{
"bit": 4,
"displayName": "Contribute",
"name": "GenericContribute"
}
Uses: Для публикации статусов коммитов в Azure DevOps
Token (where applicable - API only):
- repoV2 для доступа ко всем проектам
- repoV2/<azure_devops_project_object_id> для доступа к одному проекту
- repoV2/<azure_devops_project_object_id>/<azure_devops_repository_object_id> для доступа к одному репозиторию
UI/API/CLI: UI, API и CLI
Sample CLI code snippet
az devops security permission update --organization https://dev.azure.com/<org_name> --namespace-id 2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87 --subject <service_account>@xxxxxx.onmicrosoft.com --token repoV2/<azure_devops_project_object_id>/<azure_devops_repository_object_id> --allow-bit 4
Additional Notes: Это разрешение автоматически наследуется, если в UI установлен Project Contributor/Administrator.
Вы должны подключить сервисного пользователя до настройки проекта dbt, так как разрешения сервисного пользователя определяют, какие проекты dbt может импортировать.
Администратор аккаунта dbt, имеющий доступ к аккаунту сервисного пользователя в Azure DevOps, должен выполнить следующие шаги для подключения сервисного пользователя:
- Войдите в аккаунт сервисного пользователя в Azure DevOps.
- В dbt перейдите в Account settings > Integrations.
- Перейдите в раздел Azure DevOps и выберите Service User.
- Введите значения в обязательные поля.
- Нажмите Save.
- Нажмите Link Azure service user.
- Вы будете перенаправлены в Azure DevOps, где необходимо принять разрешения приложения Microsoft Entra ID.
- После этого вы будете перенаправлены обратно в dbt, и сервисный пользователь будет подключен.
После подключения dbt отображает email‑адрес сервисного пользователя, чтобы было понятно, учетная запись какого пользователя обеспечивает headless‑действия в средах деплоя. Чтобы изменить подключенный аккаунт, отключите профиль в dbt, войдите в альтернативный сервисный аккаунт Azure DevOps и повторно свяжите его с dbt.
dbt использует сервисного пользователя для генерации временных токенов доступа — PATs.
Эти токены имеют ограниченную область действия, действительны только 5 минут и становятся недействительными после одного API‑вызова.
Токены ограничены следующими scopes:
vso.code_full: предоставляет полный доступ к исходному коду и метаданным системы контроля версий (коммиты, ветки и т.д.), а также возможность создавать и управлять репозиториями, pull request’ами и code review, и получать уведомления о событиях контроля версий через service hooks. Также включает ограниченную поддержку Client OM API.vso.project: предоставляет возможность читать проекты и команды.vso.build_execute: предоставляет возможность доступа к артефактам сборки, включая результаты сборок, определения и запросы, а также возможность ставить сборки в очередь, обновлять их свойства и получать уведомления о событиях сборки через service hooks.






