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


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

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

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

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

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

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

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

Создание регистрации приложений Azure Resource Manager (автоматически)

При создании подключения к службе 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. Выберите Сохранить.

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

Создание регистрации приложения Azure Resource Manager с помощью секрета (автоматически)

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

Предупреждение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. Выберите Сохранить.

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

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

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

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

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

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

Преобразование существующего подключения к службе 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, использующего существующий субъект-службу

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

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

  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. Выберите " Проверить и сохранить ", чтобы проверить и создать подключение к службе.

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

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

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

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

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

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

    1. Введите имя подключения.

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

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

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

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

        Параметр Описание
        Идентификатор группы управления Обязательный. Введите идентификатор группы управления Azure.
        Имя группы управления Обязательный. Введите имя группы управления Azure.
    4. Введите идентификатор субъекта-службы.

    5. Выберите тип учетных данных:

      • Ключ субъекта-службы: введите ключ субъекта-службы (пароль).
      • Сертификат. Введите содержимое perm-файла , включая разделы сертификата и закрытого ключа.
    6. Введите идентификатор клиента.

    7. Выберите "Проверить подключение", чтобы проверить подключение службы.

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

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

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

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

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

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

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

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