Подключение в Azure с помощью подключения службы Azure Resource Manager

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Подключение службы Azure Resource Manager можно использовать для подключения к ресурсам Azure с помощью проверки подлинности субъекта-службы или с помощью управляемого удостоверения службы Azure. Если вы используете подключение к службе Resource Manager, можно использовать конвейер для развертывания в ресурсе Azure, например в приложении службы приложение Azure без проверки подлинности каждый раз.

У вас есть несколько вариантов подключения к Azure с помощью подключений службы Azure Resource Manager:

  • Субъект-служба или управляемое удостоверение с федерацией удостоверений рабочей нагрузки
  • Субъект-служба с секретом
  • Управляемое удостоверение, назначаемое агентом

Дополнительные сведения о других типах подключений и общих сведениях о создании и использовании подключений см. в разделе "Подключения службы" для сборок и выпусков.

Создание подключения службы Azure Resource Manager, использующего федерацию удостоверений рабочей нагрузки

Федерация удостоверений рабочей нагрузки использует OpenID Подключение (OIDC) для проверки подлинности с помощью защищенных ресурсов Microsoft Entra без использования секретов.

Мы рекомендуем использовать этот подход, если для вашего сценария применяются все следующие элементы:

  • У вас есть роль владельца для подписки Azure.
  • Вы не подключаетесь к Azure Stack или к Azure для государственных организаций Cloud.
  • Все задачи расширения Marketplace, которые вы используете, обновляются для поддержки федерации удостоверений рабочей нагрузки.

Создание подключения службы федерации удостоверений рабочей нагрузки

  1. В проекте Azure DevOps перейдите к подключениям> службы параметров проекта.

    Дополнительные сведения см. в разделе "Открыть параметры проекта".

  2. Выберите новое подключение к службе и выберите Azure Resource Manager.

    Снимок экрана: выбор типа подключения службы удостоверений рабочей нагрузки.

  3. Выберите федерацию удостоверений рабочей нагрузки (автоматически).

    Снимок экрана: выбор типа подключения службы удостоверений рабочей нагрузки.

  4. Укажите следующие параметры:

    Параметр Описание
    Подписка Выберите существующую подписку Azure. Если подписки и экземпляры Azure не отображаются, см . статью "Устранение неполадок с подключениями к службе Azure Resource Manager".
    Группа ресурсов Оставьте пустым, чтобы пользователи могли получать доступ ко всем ресурсам, определенным в подписке. Чтобы ограничить доступ пользователей к ресурсам, введите имя группы ресурсов. Затем пользователи могут получить доступ только к ресурсам, определенным для этой группы ресурсов.
    Имя подключения службы Обязательный. Имя, которое вы используете для ссылки на это подключение к службе в свойствах задачи. Не имя подписки Azure.
  5. После создания нового подключения службы скопируйте имя подключения и вставьте его в код в качестве значения azureSubscription.

  6. Для развертывания в определенном ресурсе Azure задача нуждается в дополнительных данных об этом ресурсе. Перейдите к ресурсу в портал Azure, а затем скопируйте данные в код. Например, чтобы развернуть веб-приложение, скопируйте имя приложения службы приложение Azure и вставьте его в код в качестве значенияWebAppName.

Преобразование существующего подключения к службе Azure Resource Manager для использования федерации удостоверений рабочей нагрузки

Вы можете быстро преобразовать существующее подключение службы Azure Resource Manager для использования федерации удостоверений рабочей нагрузки для проверки подлинности вместо субъекта-службы. Вы можете использовать средство преобразования подключений службы в Azure DevOps, если подключение службы соответствует следующим требованиям:

  • Azure DevOps изначально создало подключение к службе. Если вы вручную создадите подключение к службе, вы не сможете преобразовать подключение службы с помощью средства преобразования подключений службы, так как Azure DevOps не имеет разрешений на изменение собственных учетных данных.
  • Только один проект использует подключение службы. Не удается преобразовать подключения между управление проектом.

Чтобы преобразовать подключение к службе, выполните приведенные действия.

  1. В проекте Azure DevOps перейдите к подключениям> службы параметров проекта.

    Дополнительные сведения см. в разделе "Открыть параметры проекта".

  2. Выберите подключение службы, которое необходимо преобразовать для использования удостоверения рабочей нагрузки.

  3. Выберите Преобразовать.

    Снимок экрана: выбор преобразования федеративных учетных данных.

    Если у вас есть существующие учетные данные субъекта-службы с истекшим сроком действия секрета, вы увидите другой вариант преобразования.

    Снимок экрана: параметр преобразования федеративных учетных данных при наличии сертификата с истекшим сроком действия.

  4. Нажмите кнопку "Преобразовать ", чтобы подтвердить, что вы хотите создать новое подключение к службе.

    Преобразование может занять несколько минут. Если вы хотите отменить изменения подключение, необходимо отменить изменения его в течение семи дней.

Преобразование нескольких подключений службы Azure Resource Manager с помощью скрипта

Используйте сценарий для одновременного обновления нескольких подключений к службе, чтобы использовать федерацию удостоверений рабочей нагрузки для проверки подлинности.

В этом примере скрипта PowerShell требуются два параметра: организация Azure DevOps (пример https://dev.azure.com/fabrikam-tailspin: ) и проект Azure DevOps (например: Space game web agent). Затем скрипт извлекает связанные подключения к службе для проекта и организации Azure DevOps. Вам будет предложено подтвердить, что необходимо преобразовать каждое связанное подключение к службе, которое не использует федерацию удостоверений рабочей нагрузки. При подтверждении скрипт использует REST API Azure DevOps для обновления каждого подключения к службе, чтобы теперь использовать федерацию удостоверений рабочей нагрузки. Для выполнения сценария требуется PowerShell 7.3 или более поздней версии и Azure CLI . Сохраните скрипт в PS1-файл и запустите его с помощью PowerShell 7.

#!/usr/bin/env pwsh
<# 
.SYNOPSIS 
    Convert multiple Azure Resource Manager service connection(s) to use Workload identity federation

.LINK
    https://aka.ms/azdo-rm-workload-identity-conversion

.EXAMPLE
    ./convert_azurerm_service_connection_to_oidc_simple.ps1 -Project <project> -OrganizationUrl https://dev.azure.com/<organization>
#> 

#Requires -Version 7.3

param ( 
    [parameter(Mandatory=$true,HelpMessage="Name of the Azure DevOps Project")]
    [string]
    [ValidateNotNullOrEmpty()]
    $Project,

    [parameter(Mandatory=$true,HelpMessage="Url of the Azure DevOps Organization")]
    [uri]
    [ValidateNotNullOrEmpty()]
    $OrganizationUrl
) 
$apiVersion = "7.1"
$PSNativeCommandArgumentPassing = "Standard" 

#-----------------------------------------------------------
# Log in to Azure
$azdoResource = "499b84ac-1321-427f-aa17-267ca6975798" # application id of Azure DevOps 
az login --allow-no-subscriptions --scope ${azdoResource}/.default
$OrganizationUrl = $OrganizationUrl.ToString().Trim('/')

#-----------------------------------------------------------
# Retrieve the service connection
$getApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints?authSchemes=ServicePrincipal&type=azurerm&includeFailed=false&includeDetails=true&api-version=${apiVersion}"
az rest --resource $azdoResource -u "${getApiUrl} " -m GET --query "sort_by(value[?authorization.scheme=='ServicePrincipal' && data.creationMode=='Automatic' && !(isShared && serviceEndpointProjectReferences[0].projectReference.name!='${Project}')],&name)" -o json `
        | Tee-Object -Variable rawResponse | ConvertFrom-Json | Tee-Object -Variable serviceEndpoints | Format-List | Out-String | Write-Debug
if (!$serviceEndpoints -or ($serviceEndpoints.count-eq 0)) {
    Write-Warning "No convertible service connections found"
    exit 1
}

foreach ($serviceEndpoint in $serviceEndpoints) {
    # Prompt user to confirm conversion
    $choices = @(
        [System.Management.Automation.Host.ChoiceDescription]::new("&Convert", "Converting service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Skip", "Skipping service connection '$($serviceEndpoint.name)'...")
        [System.Management.Automation.Host.ChoiceDescription]::new("&Exit", "Exit script")
    )
    $prompt = $serviceEndpoint.isShared ? "Convert shared service connection '$($serviceEndpoint.name)'?" : "Convert service connection '$($serviceEndpoint.name)'?"
    $decision = $Host.UI.PromptForChoice([string]::Empty, $prompt, $choices, $serviceEndpoint.isShared ? 1 : 0)

    if ($decision -eq 0) {

        Write-Host "$($choices[$decision].HelpMessage)"
    } elseif ($decision -eq 1) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        continue 
    } elseif ($decision -ge 2) {
        Write-Host "$($PSStyle.Formatting.Warning)$($choices[$decision].HelpMessage)$($PSStyle.Reset)"
        exit 
    }

    # Prepare request body
    $serviceEndpoint.authorization.scheme = "WorkloadIdentityFederation"
    $serviceEndpoint.data.PSObject.Properties.Remove('revertSchemeDeadline')
    $serviceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    $serviceEndpoint | ConvertTo-Json -Depth 4 -Compress | Set-Variable serviceEndpointRequest
    $putApiUrl = "${OrganizationUrl}/${Project}/_apis/serviceendpoint/endpoints/$($serviceEndpoint.id)?operation=ConvertAuthenticationScheme&api-version=${apiVersion}"
    # Convert service connection
    az rest -u "${putApiUrl} " -m PUT -b $serviceEndpointRequest --headers content-type=application/json --resource $azdoResource -o json `
            | ConvertFrom-Json | Set-Variable updatedServiceEndpoint

    $updatedServiceEndpoint | ConvertTo-Json -Depth 4 | Write-Debug
    if (!$updatedServiceEndpoint) {
        Write-Debug "Empty response"
        Write-Error "Failed to convert service connection '$($serviceEndpoint.name)'"
        exit 1
    }
    Write-Host "Successfully converted service connection '$($serviceEndpoint.name)'"
}

Восстановление существующего подключения к службе Azure Resource Manager, использующего секрет субъекта-службы.

Вы можете отменить изменения преобразованное автоматическое подключение к службе с его секретом в течение семи дней. Через семь дней вручную создайте новый секрет.

Если вы вручную создаете и преобразуете подключение к службе, вы не можете отменить изменения подключение службы с помощью средства преобразования подключений службы, так как Azure DevOps не имеет разрешений на изменение собственных учетных данных.

Чтобы отменить изменения подключение к службе:

  1. В проекте Azure DevOps перейдите к подключениям к службе Конвейеров>.

  2. Выберите существующее подключение к службе для отменить изменения.

  3. Выберите "Вернуть преобразование" в исходную схему.

    Снимок экрана: выбор отменить изменения федеративных учетных данных.

  4. Нажмите кнопку "Вернуться ", чтобы подтвердить свой выбор.

Создание подключения к службе Azure Resource Manager, использующего секрет субъекта-службы.

Мы рекомендуем использовать этот подход, если для вашего сценария применяются все следующие элементы:

  • Вы вошли в систему в качестве владельца организации Azure Pipelines и подписки Azure.
  • Вам не нужно дополнительно ограничить разрешения для ресурсов Azure, к которым пользователи получают доступ через подключение к службе.
  • Вы не подключаетесь к Azure Stack или к Azure для государственных организаций Cloud.
  • Вы не подключаетесь из Azure DevOps Server 2019 или более ранних версий Team Foundation Server.

Чтобы создать подключение к службе, выполните следующие действия.

  1. В проекте Azure DevOps перейдите к подключениям> службы параметров проекта.

    В Team Foundation Server выберите значок Параметры в верхней строке меню, чтобы перейти на страницу "Службы".

    Дополнительные сведения см. в разделе "Открыть параметры проекта".

  2. Выберите новое подключение к службе и выберите Azure Resource Manager.

    Снимок экрана: выбор типа подключения службы.

  3. Введите или выберите следующие параметры:

    Параметр Описание
    Имя подключения Обязательный. Имя, которое вы используете для ссылки на это подключение к службе в свойствах задачи. Не имя подписки Azure.
    Уровень области Выберите подписку или группу управления. Группы управления — это контейнеры, которые помогают управлять доступом, политикой и соответствием в нескольких подписках.
    Подписка Если выбрать подписку для область, выберите существующую подписку Azure. Если подписки и экземпляры Azure не отображаются, см . статью "Устранение неполадок с подключениями к службе Azure Resource Manager".
    Группа управления Если выбрать группу управления для область, выберите существующую группу управления Azure. Дополнительные сведения см. в разделе "Создание групп управления".
    Группа ресурсов Оставьте пустым, чтобы пользователи могли получать доступ ко всем ресурсам, определенным в подписке. Чтобы ограничить доступ пользователей к ресурсам, введите имя группы ресурсов. Затем пользователи могут получить доступ только к ресурсам, определенным для этой группы ресурсов.
  4. После создания нового подключения к службе:

    • Если вы используете классический редактор, выберите имя подключения, назначенное в параметре подписки Azure конвейера.
    • При использовании YAML-файла скопируйте имя подключения в код в качестве значения azureSubscription.
  5. Чтобы развернуть в определенном ресурсе Azure, добавьте дополнительные сведения о ресурсе в задачу:

    • Если вы используете классический редактор, выберите данные для добавления в задачу. Например, выберите имя Служба приложений.
    • Если вы используете YAML-файл, перейдите к ресурсу в портал Azure. Скопируйте необходимые данные и вставьте их в код задачи. Например, чтобы развернуть веб-приложение, скопируйте имя приложения Служба приложений и вставьте его в качестве значения в WebAppName yamL задачи.

Примечание.

При выполнении этого подхода Azure DevOps подключается к идентификатору Microsoft Entra и создает регистрацию приложения с секретом, действительным в течение трех месяцев. После истечения срока действия подключения к службе идентификатор Microsoft Entra отображает следующую строку: срок действия сертификата или секрета истекает в ближайшее время. Создайте новую. В этом сценарии необходимо обновить подключение службы.

Чтобы обновить подключение к службе, на портале Azure DevOps измените подключение и нажмите кнопку "Проверить". После сохранения изменения подключение службы действителен еще три месяца.

Рекомендуется использовать федерацию удостоверений рабочей нагрузки вместо создания секрета. Если вы используете федерацию удостоверений рабочей нагрузки, вам не нужно менять секреты, а регистрация приложений поддерживает ее предназначенную цель. Чтобы начать использовать федерацию удостоверений рабочей нагрузки, перейдите на страницу сведений о подключении к службе и нажмите кнопку "Преобразовать". Подключение службы преобразуется в использование федерации удостоверений рабочей нагрузки вместо секрета. Дополнительные сведения см. в разделе "Преобразование существующего подключения к службе Azure Resource Manager" для использования федерации удостоверений рабочей нагрузки.

Дополнительные сведения см. в статье "Устранение неполадок подключения службы Azure Resource Manager".

Если у вас возникли проблемы с этим подходом (например, нет подписок, отображаемых в раскрывающемся списке) или если вы хотите дополнительно ограничить разрешения пользователей, вместо этого можно использовать субъект-службу или виртуальную машину с управляемым удостоверением службы.

Создание подключения службы Azure Resource Manager, использующего существующий субъект-службу

  1. Если вы хотите использовать предопределенный набор разрешений доступа, и у вас еще нет субъекта-службы, определенного для этой цели, выполните одно из следующих руководств, чтобы создать новый субъект-службу:

  2. В проекте Azure DevOps перейдите к подключениям> службы параметров проекта.

    В Team Foundation Server выберите значок Параметры в верхней строке меню, чтобы перейти на страницу "Службы".

    Дополнительные сведения см. в разделе "Открыть параметры проекта".

  3. Выберите новое подключение к службе и выберите Azure Resource Manager.

    Снимок экрана: выбор типа подключения службы.

  4. Выберите параметр субъекта-службы (вручную), а затем введите сведения о субъекте-службе.

    Снимок экрана: открытие полной версии диалогового окна службы.

  5. Для имени Подключение ion введите отображаемое имя, которое будет использоваться для ссылки на это подключение к службе.

  6. Для среды выберите имя среды (Azure Cloud, Azure Stack или Azure для государственных организаций Cloud).

  7. Если вы не выберете Azure Cloud, введите URL-адрес среды. Для Azure Stack URL-адрес среды выглядит примерно так https://management.local.azurestack.external.

  8. Для уровня области выберите область для подключения:

    • Если выбрать подписку, выберите существующую подписку Azure. Если подписки и экземпляры Azure не отображаются, см . статью "Устранение неполадок с подключениями к службе Azure Resource Manager".
    • Если выбрать группу управления, выберите существующую группу управления Azure. Дополнительные сведения см. в разделе "Создание групп управления".
  9. В диалоговом окне подписки Azure введите следующие сведения о субъекте-службе:

    • Идентификатор подписки
    • Имя подписки
    • Идентификатор субъекта-службы
    • Либо ключ клиента субъекта-службы, либо, если выбран сертификат, введите содержимое сертификата и разделов закрытого ключа файла *.pem .
    • Идентификатор клиента

    Эти сведения можно получить, скачав и выполнив скрипт Azure PowerShell. При появлении запроса введите имя подписки, пароль, роль (необязательно) и тип облака, например Облако Azure (по умолчанию), Azure Stack или Azure для государственных организаций Cloud.

  10. Выберите "Проверить подключение", чтобы проверить введенные параметры.

  11. После создания нового подключения к службе:

    • Если вы используете подключение к службе в пользовательском интерфейсе, выберите имя подключения, назначенное в параметре подписки Azure конвейера.
    • Если вы используете подключение к службе в YAML-файле, скопируйте имя подключения и вставьте его в код в качестве значения azureSubscription.
  12. При необходимости измените субъект-службу, чтобы предоставить соответствующие разрешения.

    Дополнительные сведения об аутентификации с помощью субъекта-службы см. в статье "Использование управления доступом на основе ролей для управления доступом к ресурсам подписки Azure" или записи блога по автоматизации развертывания группы ресурсов Azure с помощью субъекта-службы в Visual Studio.

Дополнительные сведения см. в разделе "Устранение неполадок с подключениями к службе Azure Resource Manager".

Создание подключения службы Azure Resource Manager к виртуальной машине с использованием управляемого удостоверения службы

Примечание.

Чтобы использовать управляемое удостоверение службы для проверки подлинности, необходимо использовать локальный агент на виртуальной машине Azure.

Агенты на основе виртуальных машин Azure можно настроить для использования управляемого удостоверения службы Azure в идентификаторе Microsoft Entra. В этом сценарии вы используете назначаемое системой удостоверение (субъект-служба) для предоставления агентам на основе виртуальных машин Azure доступ к любому ресурсу Azure, который поддерживает идентификатор Microsoft Entra, например экземпляр Azure Key Vault, а не сохранять учетные данные в Azure DevOps для подключения.

  1. В проекте Azure DevOps перейдите к подключениям> службы параметров проекта.

    В Team Foundation Server выберите значок Параметры в верхней строке меню, чтобы перейти на страницу "Службы".

    Дополнительные сведения см. в разделе "Открыть параметры проекта".

  2. Выберите новое подключение к службе и выберите Azure Resource Manager.

    Снимок экрана: выбор типа подключения службы.

  3. Выберите параметр проверки подлинности управляемого удостоверения.

    Снимок экрана: переход к параметрам удостоверений управляемой службы.

  4. Для имени Подключение ion введите отображаемое имя, используемое при ссылке на это подключение к службе.

  5. Для среды выберите имя среды (Azure Cloud, Azure Stack или Azure для государственных организаций Cloud).

  6. В диалоговом окне подключений введите следующие значения из подписки:

    • Идентификатор подписки
    • Имя подписки
    • Идентификатор клиента
  7. После создания нового подключения к службе:

    • Если вы используете подключение к службе в пользовательском интерфейсе, выберите имя подключения, назначенное в параметре подписки Azure конвейера.
    • Если вы используете подключение к службе в yamL-файле, скопируйте имя подключения в код в качестве значения azureSubscription.
  8. Убедитесь, что виртуальная машина (агент) имеет соответствующие разрешения.

    Например, если коду нужно вызвать Azure Resource Manager, назначьте виртуальную машину соответствующей роли с помощью управления доступом на основе ролей (RBAC) в идентификаторе Microsoft Entra ID.

    Дополнительные сведения см. в статье "Как использовать управляемые удостоверения для ресурсов Azure" и управление доступом на основе ролей для управления доступом к ресурсам подписки Azure.

Дополнительные сведения об этом процессе см. в статье "Устранение неполадок с подключениями к службе Azure Resource Manager".

Подключение в облако Azure для государственных организаций

Сведения о подключении к Azure для государственных организаций Cloud см. в Подключение из Azure Pipelines (Azure для государственных организаций Cloud).

Подключение к Azure Stack

Сведения о подключении к Azure Stack см. в следующих статьях:

Справка и поддержка