Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Службы Azure DevOps
Замечание
Эта функция развертывается на этой и следующей неделе. Если вы еще не видите эту функцию в проекте служб Azure DevOps, вернитесь обратно через несколько дней.
Подключение службы Azure DevOps позволяет конвейерам проходить аутентификацию в Azure DevOps без использования личных токенов доступа (PATs) через рабочие удостоверения Microsoft Entra. Субъекты-службы и управляемые удостоверения обращаются к Azure DevOps через федерацию удостоверений рабочего процесса, которая устраняет необходимость в управлении и смене секретов.
Преимущества
- Аутентификация без PAT: устранение необходимости создавать, хранить и выполнять ротацию личных маркеров доступа.
- Наименьшие привилегии: используйте разрешения для каждого конвейера вместо общих разрешений учетной записи службы сборки.
- Улучшенная безопасность: Используйте федеративные учетные данные Entra с автоматической сменой токенов.
- Кросс-организационный доступ: доступ к ресурсам Azure DevOps в разных организациях с помощью одного подключения к службе.
- Audit trail: все попытки проверки подлинности регистрируются в журналах аудита Azure DevOps.
Поддерживаемые сценарии
Подключение службы Azure DevOps поддерживает следующие сценарии:
- Ресурсы репозитория: ознакомьтесь с кодом из репозиториев в организациях Azure DevOps.
- Artifact feeds: Доступ к веб-каналам Azure Artifacts (NuGet, npm, Maven, Python, Cargo, Conda) между организациями без paTs.
- Вызовы API REST: аутентификация к REST API Azure DevOps из встроенных скриптов.
- Extension publishing: публикация расширений в Visual Studio Marketplace.
Необходимые условия
Чтобы создать подключение службы Azure DevOps, вам потребуется:
- Организация Azure DevOps
- Учетная запись службы Entra или управляемая идентификация, используемая для аутентификации
- Creator или Administrator роли для соединений с сервисами в проекте Azure DevOps, где вы создаете соединение с сервисом. По умолчанию члены группы Endpoint Creators имеют роль Создателя. Дополнительные сведения см. в разделе "Настройка безопасности подключения службы".
- При доступе к ресурсам в разных организациях субъект-служба или управляемое удостоверение нужно добавить как пользователя в каждую целевую организацию.
Шаг 1. Создание подключения к службе в одной организации
Если ваш служебный принципал находится в той же организации Azure DevOps, что и подключение к службе:
Добавьте субъект-службу в вашу организацию
В организации Azure DevOps перейдите в раздел Организация параметров>Users.
Выберите "Добавить пользователей".
Введите сведения об учетной записи службы:
- Имя: основной службы или имя управляемой идентичности или идентификатор объекта
- Уровень доступа: выберите соответствующий уровень доступа. Использование "Базовый" для стандартного доступа
Назначьте служебный принципал или управляемое удостоверение проекту, где вы создадите подключение к службе, например, добавив его в группу Читатели.
Нажмите кнопку "Добавить ", чтобы подтвердить.
Назначьте любые дополнительные разрешения уровня ресурса для субъектов-служб или управляемых удостоверений.
Шаг 2. Создание подключения к службе
В Azure DevOps project перейдите к Project settings>Service connections.
Выберите новое подключение к службе.
Выберите Azure DevOps в качестве типа подключения службы.
Заполните форму:
- Удостоверение: Выберите служебный принципал, добавленный в организацию
-
Имя подключения службы: введите описательное имя подключения (например,
my-azdo-connection) - Описание (необязательно): добавление сведений о назначении подключения
Нажмите кнопку "Сохранить", чтобы создать подключение службы.
Создание подключения службы для доступа между организациями
Чтобы получить доступ к ресурсам в организации Azure DevOps, присоединенной к тому же клиенту Azure Entra ID:
Выполните действия, описанные в разделе "Создание подключения к службе" в одной организации, но выберите другую организацию при создании подключения к службе.
Введите имя целевой Azure DevOps организации.
Необходимо также добавить субъект-службу в качестве пользователя в целевой организации.
Использование подключения к службе в конвейере
Ознакомьтесь с репозиториями из разных организаций
pool:
vmImage: 'ubuntu-latest'
resources:
repositories:
- repository: external-repo
type: git
endpoint: my-azdo-connection
name: 'external-project/external-repo'
ref: 'refs/heads/main'
steps:
- checkout: self
- checkout: external-repo
Ссылка на шаблон из другой организации
resources:
repositories:
- repository: templates
type: git
endpoint: my-azdo-connection
name: 'external-project/external-repo'
ref: "refs/heads/main"
steps:
- template: azdosc-template.yml@templates
Доступ к потокам артефактов
Используйте подключение службы для задач аутентификации артефактов:
- task: NuGetAuthenticate@1
inputs:
nuGetServiceConnections: 'my-azdo-connection'
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
projects: '**/*.csproj'
Вызов Azure DevOps из скрипта
- task: AzureCLI@3
displayName: Secret-less
inputs:
connectionType: 'azureDevOps'
azureDevOpsServiceConnection: 'my-azdo-connection'
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
az rest --method get `
--url "https://status.dev.azure.com/_apis/status/health?api-version=7.1-preview.1" `
--resource 499b84ac-1321-427f-aa17-267ca6975798 `
--query "sort_by(services[?id=='Pipelines'].geographies | [], &name)" `
-o table
az devops configure -l
az devops project list --query "value[].{Name:name, Id:id}" `
-o table
az pipelines pool list --query "[].{Id:id, Name:name}" `
-o table
- task: AzureCLI@3
displayName: Use Entra access token
inputs:
connectionType: 'azureDevOps'
azureDevOpsServiceConnection: 'my-azdo-connection'
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
# Get access token for Azure DevOps
$token = az account get-access-token --resource "499b84ac-1321-427f-aa17-267ca6975798" `
--query "accessToken" `
--output tsv
# Use token in REST API call
$headers = @{
Authorization = "Bearer $token"
"Content-Type" = "application/json"
}
$body = @{
name = "Test Build"
} | ConvertTo-Json
Invoke-RestMethod -Uri "$(System.CollectionUri)$(System.TeamProject)/_apis/build/definitions?api-version=7.1" `
-Method POST `
-Headers $headers `
-Body $body
Задача AzureCLI@3 использует интерфейс командной строки Azure DevOps, который предварительно установлен для агентов, размещенных в Microsoft. Для локально размещенных агентов требуется Azure CLI с azure-devops расширением.
azure-devops Если расширение не установлено, задача AzureCLI@3 устанавливает его во время выполнения.
Лучшие практики обеспечения безопасности
- Минимальные разрешения. Назначьте субъекту-службе только необходимые разрешения для конкретных задач конвейера.
- Доступ к аудиту: регулярно просматривайте журналы аудита для мониторинга использования подключения к службе.
- Область применения: Используйте отдельные подключения к службам для разных проектов или организаций, чтобы ограничить общие разрешения.
Troubleshooting
Подсказка
Для повышения безопасности назначьте субъекту-службе только необходимые разрешения, регулярно просматривайте журналы аудита и используйте отдельные подключения служб для различных проектов или организаций.
Ошибка создания подключения службы
Причина: Служебный принципал не добавлен в вашу организацию, или у вас нет необходимых разрешений.
Исправление:
- Убедитесь, что вы добавили учетную запись службы в качестве пользователя в вашу организацию.
- Убедитесь, что у вас есть соответствующие разрешения для создания подключений к службе.
- Убедитесь, что субъект-служба имеет необходимый уровень доступа в организации.
Не удается выполнить проверку подлинности конвейера
Причина: Имя сервисного подключения не совпадает со ссылкой в YAML, или учетная запись службы не имеет разрешений на целевые ресурсы.
Исправление:
- Убедитесь, что имя подключения к службе в YAML конвейера соответствует имени, которое вы создали.
- Убедитесь, что субъект-служба имеет соответствующие разрешения для доступных ресурсов.
- Проверьте аудиторские журналы Azure DevOps для ошибок аутентификации.
- Перейдите к часто задаваемым вопросам о служебных учетных записях и управляемых удостоверениях.
- Для кодов состояния AADSTS Microsoft Entra ознакомьтесь с списком сообщений ошибок.
Доступ между организациями не работает
Причина: Вы не добавили сервисный принципал в качестве пользователя в обе организации или неправильно указали название целевой организации.
Исправление:
- Добавьте субъект-службу в качестве пользователя в обеих организациях.
- Убедитесь, что имя целевой организации правильно указано в конфигурации подключения службы.
- Убедитесь, что служебный принципал имеет необходимые права доступа в целевой организации.
Распространенные сообщения об ошибках
| Message | Значение и устранение рисков |
|---|---|
| ОШИБКА: TF401444: выполните вход по крайней мере один раз как 72f988bf-86f1-41af-91ab-2d7cd011db47\72f988bf-86f1-41af-91ab-2d7cd011db47\115c3ab3-943b-4e0c-96ed-1a1763fbaa44 в веб-браузере, чтобы включить доступ к службе. | Убедитесь, что вы добавили учетную запись службы в качестве пользователя в вашу организацию. |
Управляемая идентификация или принципал службы <sp/msi name> не имеет доступа к организации Azure DevOps <org>. Убедитесь, что учетная запись добавлена в организацию. См. https://aka.ms/azdosc#prerequisites |
Добавьте учетную запись службы в качестве пользователя целевой организации и назначьте его требуемому проекту. |
| У вас нет разрешения на выбранный идентификатор. Подключение службы сохраняется в виде черновика. Чтобы завершить настройку, свяжитесь с владельцем идентичности, чтобы создать федеративные учетные данные в портале Azure с использованием издателя и идентификатора субъекта, указанных ниже. | У пользователя, вошедшего в систему, недостаточно разрешений для создания федеративных учетных данных. Следуйте инструкциям, отображаемым для создания федеративных учетных данных непосредственно в удостоверении. |
| VS800075. Проект с идентификатором "vstfs:///Classification/TeamProject/00000000-0000-00000000-000000000000" не существует или у вас нет разрешения на доступ к нему. | Идентификатор подключения услуги не добавлен в проект. Перейдите на страницу |
сообщения об ошибках Microsoft Entra ID
В следующей таблице перечислены распространенные коды ошибок Microsoft Entra ID и возможные проблемы, связанные с установлением подключений службы идентификации рабочих нагрузок.
| Message | Возможная проблема |
|---|---|
| AADSTS700016: приложение с идентификатором "****" не найдено | Учетная запись, используемая для подключения к службе, больше не существует, могла быть удалена, или настроена неправильно. Если вы настраиваете подключение службы вручную с предварительно созданным удостоверением, убедитесь, что appID/clientId настроено правильно. |
| AADSTS7000215: указан недействительный секрет клиента. | Вы используете подключение к службе с истекшим сроком действия секрета. Преобразуйте подключение службы в федерацию удостоверений рабочей нагрузки и замените истекший секрет учетными данными федерации. |
| AADSTS700024. Утверждение клиента не вписывается в допустимый временной интервал | Если ошибка возникает примерно через 1 час, используйте подключение к сервису с федерацией удостоверений рабочей нагрузки и управляемыми удостоверениями. Токены управляемой идентификации имеют время существования около 24 часов. Если ошибка возникает менее чем через 1 час, но более чем через 10 минут, переместите команды, которые (неявно) запрашивают токен доступа (например, для доступа к хранилищу Azure), в начало вашего скрипта. Маркер доступа кэшируется для последующих команд. |
Для представленного утверждения не найдена соответствующая запись федеративной идентичности. Издатель утверждения: https://app.vstoken.visualstudio.com. |
Федеративные учетные данные не были созданы или URL-адрес издателя не является правильным. Правильный URL-адрес издателя имеет формат https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. URL издателя можно исправить, изменив его и сохранив подключение к службе. Если Azure DevOps не создал ваше удостоверение личности, необходимо вручную обновить издателя. Вы можете найти правильного издателя в диалоговом окне редактирования подключения к службе или в ответе, если вы используете REST API. |
Для представленного утверждения не найдена соответствующая запись федеративной идентичности. Издатель утверждения: https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Тема утверждения: sc://<org>/<project>/<service-connection>. |
URL-адрес издателя или тема федерации не совпадают. Организация или проект Azure DevOps были переименованы, или вручную созданное подключение службы было переименовано без обновления темы федерации на удостоверении. |
| AADSTS700211: не найдена соответствующая федеративная запись данных удостоверения для представленного эмитента утверждения | Федеративные учетные данные не были созданы или URL-адрес издателя не является правильным. |
| AADSTS700213: не найдена соответствующая федеративная запись идентичности для представленного субъекта утверждения | Федеральные учетные данные не были созданы или субъект указан неверно. |
| AADSTS700223 | Федерация удостоверений рабочей нагрузки ограничена или отключена в клиенте Microsoft Entra. В этом сценарии можно использовать управляемое удостоверение для федерации. Для получения дополнительной информации см. Идентификация рабочих нагрузок с управляемой идентификацией. |
| AADSTS70025. Клиент не имеет настроенных удостоверений федеративной идентификации | Убедитесь, что федеративные учетные данные правильно настроены для регистрации приложения или управляемой идентичности. |
| Microsoft Entra отклонил токен, выданный Azure DevOps с кодом ошибки AADSTS700238 | Федерация удостоверений рабочей нагрузки ограничена клиентом Microsoft Entra. Издатель вашей организации (https://login.microsoftonline.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) не может использовать федерацию удостоверений рабочей нагрузки с типом удостоверения рабочей нагрузки (регистрация приложения и /или управляемое удостоверение), которое вы используете. Попросите администратора клиента Microsoft Entra или административную команду разрешить федерацию удостоверений для рабочих нагрузок в вашей организации Azure DevOps. |
| AADSTS70052. Удостоверение должно быть управляемым удостоверением, однопользовательским приложением или учетной записью службы. | Многотенантные регистрации приложений с signInAudience: AzureADMultipleOrgs в настоящее время не поддерживаются издателем Microsoft Entra. Вместо этого используйте signInAudience: AzureADMyOrg и разделите доступ к нескольким арендаторам, чтобы для каждого арендатора использовать разные подключения к службам. Если вы зависите от операций ARM, которые обращаются к нескольким клиентам в одном запросе (например, межклиентское пиринг виртуальных сетей), вы можете обратиться в службу поддержки, чтобы ваша организация Azure DevOps использовала эмитент Azure DevOps. |
| AADSTS900382: конфиденциальный клиент не поддерживается в Кросс-облаке | Некоторые независимые облака блокируют федерацию удостоверений рабочей нагрузки. |
Вы видите ошибку AADSTS, которая не указана выше? Проверьте коды ошибок проверки подлинности и авторизации Microsoft Entra.