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


Подключение к 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.
      Description Необязательно. Введите описание подключения службы.
    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.
    Description Необязательно. Введите описание подключения службы.
    Безопасность Выберите "Предоставить разрешение на доступ ко всем конвейерам ", чтобы разрешить всем конвейерам использовать это подключение к службе. Если этот параметр не выбран, необходимо вручную предоставить доступ каждому конвейеру, использующему это подключение к службе.
  8. Выберите " Проверить и сохранить ", чтобы проверить и создать подключение к службе.

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