Поделиться через


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

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

Примечание.

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

Подключение к службе Azure Resource Manager позволяет подключаться к ресурсам Azure, таким как Azure Key Vault из конвейера. Данное подключение позволяет использовать конвейер для развертывания в ресурсы Azure, такие как приложение Azure App Service, без необходимости проходить проверку подлинности каждый раз.

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

Рекомендуемые варианты:

Примечание.

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

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

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

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

При этом выборе Azure DevOps автоматически запрашивает подписку, группу управления или рабочую область Машинного обучения, к которой требуется подключиться, и создает федерацию удостоверений для аутентификации рабочей нагрузки.

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

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

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

    Снимок экрана, показывающий выбор Azure Resource Manager.

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

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

  4. Выберите уровень области. Выберите подписку, группу управления или рабочую область машинного обучения. Группы управления — это контейнеры, которые помогают управлять доступом, политикой и соответствием в нескольких подписках. Рабочая область машинного обучения — это место для создания артефактов машинного обучения.

    • В области подписки введите следующие параметры:

      Параметр Описание
      Подписка Обязательный. Выберите подписку Azure.
      Группа ресурсов Необязательно. Выберите группу ресурсов Azure.
    • В области группы управления выберите группу управления Azure.

    • В рамках рабочей области машинного обучения введите следующие параметры:

      Параметр Описание
      Подписка Обязательный. Выберите подписку Azure.
      Группа ресурсов Обязательный. Выберите группу ресурсов, содержащую рабочую область.
      Рабочая область машинного обучения Обязательный. Выберите рабочую область машинного обучения Azure.
  5. Введите имя подключения службы.

  6. При необходимости введите описание подключения к службе.

  7. Выберите "Предоставить разрешение на доступ ко всем конвейерам ", чтобы разрешить всем конвейерам использовать это подключение к службе. Если этот параметр не выбран, необходимо вручную предоставить доступ каждому конвейеру, использующему это подключение к службе.

  8. Нажмите кнопку "Сохранить".

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

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

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

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

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

    Снимок экрана, показывающий выбор Azure Resource Manager.

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

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

  4. На шаге 1. Сведения об управляемом удостоверении:

    1. Выберите подписку на управляемое удостоверение. Это подписка Azure, которая содержит ваше управляемое удостоверение.
    2. Выберите группу ресурсов для управляемой идентификации. Это группа ресурсов, содержащая ваше управляемое удостоверение.
    3. Выберите управляемое удостоверение. Это управляемое удостоверение в вашей группе ресурсов, которое вы будете использовать для доступа к ресурсам.
  5. На шаге 2: Область Azure:

    1. Выберите уровень области. Выберите подписку, группу управления или рабочую область машинного обучения. Группы управления — это контейнеры, которые помогают управлять доступом, политикой и соответствием в нескольких подписках. Рабочая область машинного обучения — это место для создания артефактов машинного обучения.

      • В области подписки введите следующие параметры:

        Параметр Описание
        Подписка на подключение к службе Обязательный. Выберите имя подписки Azure, к которой управляемое удостоверение получит доступ.
        Группа ресурсов для подключения к сервису Необязательно. Введите, чтобы ограничить доступ к управляемому удостоверению одной группе ресурсов.
      • В области группы управления введите следующие параметры:

        Параметр Описание
        Группа управления Обязательный. Выберите группу управления Azure.
      • В области проекта машинного обучения введите следующие параметры:

        Параметр Описание
        Подписка Обязательный. Выберите имя подписки Azure.
        Группа ресурсов для подключения к сервису Необязательно. Выберите группу ресурсов, содержащую рабочую область.
        Рабочее пространство ML Обязательный. Введите имя существующей рабочей области Машинное обучение Azure.
    2. На шаге 3. Сведения о подключении к службе: раздел, введите или выберите следующие параметры:

      Параметр Описание
      Имя подключения службы Обязательный. Имя, которое вы используете для ссылки на это подключение к службе в свойствах задачи. Не имя вашей подписки Azure.
      Справочник по управлению службами Необязательно. Сведения о контексте из базы данных ITSM.
      Описание Необязательно. Введите описание подключения службы.
    3. В разделе "Безопасность" выберите "Предоставить разрешение на доступ ко всем конвейерам ", чтобы разрешить всем конвейерам использовать это подключение к службе. Если этот параметр не выбран, необходимо вручную предоставить доступ каждому конвейеру, использующему это подключение к службе.

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

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

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

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

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

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

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

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

  3. Нажмите кнопку "Преобразовать".

    Снимок экрана, показывающий выбор опции «Преобразовать» для федеративных учетных данных.

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

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

  4. Выберите снова «Конвертировать», чтобы подтвердить, что вы хотите создать новое подключение к службе.

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

Преобразуйте несколько подключений к службе с помощью скрипта

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

В этом примере скрипта 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 DevOps не имеет разрешений на изменение собственных учетных данных.

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

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

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

  3. Выберите Вернуть схему в исходное состояние.

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

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

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

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

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

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

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

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

    Снимок экрана: выбор Azure Resource Manager.

  3. Выберите субъект-службу (вручную) и Далее.

    Снимок экрана: выбор метода аутентификации сервисного принципала (вручную).

  4. В диалоговом окне Новое подключение службы Azure выберите Среду. Если выбрать Azure Stack, введите URL-адрес среды, который похож на https://management.local.azurestack.external.

  5. Выберите уровень области. Выберите подписку или группу управления. Группы управления — это контейнеры, которые помогают управлять доступом, политикой и соответствием в нескольких подписках.

    • В области подписки введите следующие параметры:

      Параметр Описание
      Идентификатор подписки Обязательный. Введите идентификатор подписки Azure.
      Имя подписки Обязательный. Введите имя подписки Azure.
    • В области группы управления введите следующие параметры:

      Параметр Описание
      Идентификатор группы управления Обязательный. Введите идентификатор группы управления Azure.
      Имя группы управления Обязательный. Введите имя группы управления Azure.
  6. В разделе "Проверка подлинности" введите или выберите следующие параметры:

    Параметр Описание
    Идентификатор служебного принципала Обязательный. Введите идентификатор служебного принципала.
    Удостоверение Выберите ключ служебного принципала или сертификат. Если выбран ключ принципала службы, введите ключ (пароль). Если выбран сертификат, введите сертификат.
    Идентификатор клиента Обязательный. Введите идентификатор клиента.
    Проверять Выберите, чтобы проверить введенные параметры.
  7. В разделе "Сведения" введите следующие параметры:

    Параметр Описание
    Имя подключения Обязательный. Имя, которое вы используете для ссылки на это подключение к службе в свойствах задачи. Не имя вашей подписки Azure.
    Описание Необязательно. Введите описание подключения службы.
    Безопасность Выберите "Предоставить разрешение на доступ ко всем конвейерам ", чтобы разрешить всем конвейерам использовать это подключение к службе. Если этот параметр не выбран, необходимо вручную предоставить доступ каждому конвейеру, использующему это подключение к службе.
  8. Выберите "Проверить и сохранить ", чтобы проверить и создать подключение к службе.

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