使用 Azure 资源管理器服务连接连接到 Azure

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

可以使用 Azure 资源管理器服务连接连接到 Azure 资源,例如 Azure 密钥库。 如果使用 Azure 资源管理器服务连接,可使用管道部署到 Azure 应用服务应用等 Azure 资源,不必每次重新进行身份验证。

可以使用 Azure 资源管理器服务连接对 Azure 进行身份验证,以便连接到 Azure:

  • 具有工作负荷标识联合的服务主体
  • 具有机密的服务主体
  • 系统分配的托管标识
  • 公共配置文件

服务连接使用服务主体对 Azure 资源进行身份验证。

使用工作负载标识联合身份验证创建 Azure 资源管理器服务连接

工作负载标识联合身份验证使用 OpenID Connect (OIDC) 对 Microsoft Entra 保护的资源进行身份验证,而不使用机密。 可以自动创建用于身份验证的工作负荷标识联合身份验证,也可以手动创建它。

如果以下所有项都适用于你的方案,建议使用此方法:

  • 你拥有 Azure 订阅的所有者角色。
  • 你未连接到 Azure StackAzure 美国政府 环境。
  • 你使用的任何市场扩展任务都经过了更新,以支持工作负载标识联合身份验证。

使用工作负荷标识联合创建服务连接(自动)

选择此项后,Azure DevOps 会自动查询要连接到的订阅、管理组或机器学习工作区,并创建用于身份验证的工作负荷标识联合身份验证。

  1. >在 Azure DevOps 项目中,转到“项目设置”“服务连接”。

    有关详细信息,请参阅打开项目设置

  2. 选择“新建服务连接”,然后选择“Azure 资源管理器”和下一步”。

    显示选择 Azure 资源管理器选择的屏幕截图。

  3. 选择“工作负荷标识联合” (自动)“下一步”。

    工作负荷联合身份验证(自动)身份验证方法选择的屏幕截图。

  4. 选择范围 级别。 选择订阅管理组机器学习工作区管理组是一些容器,可以帮助跨多个订阅管理访问权限、策略和符合性。 机器学习工作区用于创建机器学习项目。

    • 对于订阅范围,请输入以下参数:

      参数 说明
      订阅 必需。 选择 Azure 订阅。
      资源组 必需。 输入 Azure 订阅名称。
    • 对于管理组范围,请选择 Azure 管理组

    • 对于机器学习工作区范围,请输入以下参数:

      参数 说明
      订阅 必需。 选择 Azure 订阅。
      资源组 必需。 选择包含工作区的资源组。
      机器学习工作区 必需。 选择Azure 机器学习工作区。
  5. 输入服务连接名称

  6. (可选)输入服务连接的说明。

  7. 选择“ 授予对所有管道 的访问权限”,以允许所有管道使用此服务连接。 如果未选择此选项,则必须手动授予对使用此服务连接的每个管道的访问权限。

  8. 选择“保存”。

创建新的服务连接后,将连接名称作为 azureSubscription 值复制并粘贴到代码中。

若要部署到特定的 Azure 资源,该任务需要有关该资源的更多数据。 转到 Azure 门户中的资源,然后将数据复制到代码中。 例如,若要部署 Web 应用,请复制 Azure 应用服务应用的名称,并将其作为 WebAppName 值粘贴到代码中。

使用工作负荷标识联合创建服务连接(手动)

使用此选项手动创建使用现有工作负荷标识联合身份验证进行身份验证的服务连接。

  1. >在 Azure DevOps 项目中,转到“项目设置”“服务连接”。

    有关详细信息,请参阅打开项目设置

  2. 选择“新建服务连接”,然后选择“Azure 资源管理器”和下一步”。

    工作负荷联合身份验证(手动)身份验证方法选择的屏幕截图。

  3. 选择“工作负荷标识联合” (手动)“下一步”。

    显示选择工作负荷标识服务连接类型的屏幕截图。

  4. 步骤 1:基础知识

    1. 输入服务连接名称
    2. (可选)输入说明。
    3. 选择“ 授予对所有管道 的访问权限”,以允许所有管道使用此服务连接。 如果未选择此选项,则必须手动授予对使用此服务连接的每个管道的访问权限。
    4. 选择下一步
  5. 步骤 2:服务主体详细信息

    步骤 2:服务主体详细信息 包含以下参数。 可以输入或选择以下参数:

    参数 说明
    颁发者 必需。 DevOps 会自动创建颁发者 URL
    使用者标识符 必需。 DevOps 会自动创建主题标识符。
    环境 必需。 选择要连接到的云环境。 如果选择 Azure Stack,请输入环境 URL,如下所示 https://management.local.azurestack.external
    1. 选择 范围级别。 选择订阅管理组机器学习工作区管理组是一些容器,可以帮助跨多个订阅管理访问权限、策略和符合性。 机器学习工作区用于创建机器学习项目。

      • 对于订阅范围,请输入以下参数:

        参数 说明
        订阅 ID 必需。 输入 Azure 订阅 ID。
        订阅名称 必需。 输入 Azure 订阅名称。
      • 对于管理组范围,请输入以下参数:

        参数 说明
        管理组 ID 必需。 输入 Azure 管理组 ID。
        管理组名称 必需。 输入 Azure 管理组名称。
      • 对于机器学习工作区范围,请输入以下参数:

        参数 说明
        订阅 ID 必需。 输入 Azure 订阅 ID。
        订阅名称 必需。 输入 Azure 订阅名称。
        资源组 必需。 选择包含工作区的资源组。
        ML 工作区名称 必需。 输入现有Azure 机器学习工作区的名称。
        ML 工作区位置 必需。 输入现有Azure 机器学习工作区的位置。
    2. “身份验证 ”部分中,输入或选择以下参数:

      参数 说明
      服务主体 ID 必需。 输入服务主体 ID。
      Tenant Id 必需。 输入租户 ID。
    3. 在“详细信息”部分中,输入以下参数:

      参数 说明
      连接名称 必需。 在任务属性中引用此服务连接时将使用的名称。 不是 Azure 订阅的名称。
      描述 可选。 输入服务连接的说明。
    4. “安全 ”部分中,选择“ 授予对所有管道 的访问权限”,以允许所有管道使用此服务连接。 如果未选择此选项,则必须手动授予对使用此服务连接的每个管道的访问权限。

    5. 选择“ 验证并保存 ”以验证并创建服务连接。

创建新的服务连接后,将连接名称作为 azureSubscription 值复制并粘贴到代码中。

若要部署到特定的 Azure 资源,该任务需要有关该资源的更多数据。 转到 Azure 门户中的资源,然后将数据复制到代码中。 例如,若要部署 Web 应用,请复制 Azure 应用服务应用的名称,并将其作为 WebAppName 值粘贴到代码中。

转换现有的 Azure 资源管理器服务连接以使用工作负载标识联合身份验证

你可以快速转换现有的 Azure 资源管理器服务连接,以使用工作负载标识联合身份验证而不是服务主体进行身份验证。 如果服务连接满足这些要求,则可以在 Azure DevOps 中使用服务连接转换工具:

  • Azure DevOps 最初创建了服务连接。 如果你手动创建服务连接,则无法使用服务连接转换工具转换服务连接,因为 Azure DevOps 无权修改自己的凭据。
  • 只有一个项目使用服务连接。 无法转换跨项目服务连接

若要转换服务连接,请执行以下操作:

  1. >在 Azure DevOps 项目中,转到“项目设置”“服务连接”。

    有关详细信息,请参阅打开项目设置

  2. 选择要转换为使用工作负载标识的服务连接。

  3. 选择“转换”

    显示

    如果有具有过期机密的现有服务主体凭据,则会看到另一个选项进行转换。

    一个屏幕截图,其中显示了在证书过期时用于转换为使用联合凭据的选项。

  4. 再次选择“转换”,确认你想要创建新的服务连接。

    转换可能需要几分钟时间。 如果要还原连接,必须在七天内还原它。

使用脚本转换多个 Azure 资源管理器服务连接

使用脚本同时更新多个服务连接,以立即使用工作负荷标识联合身份验证进行身份验证。

此示例 PowerShell 脚本需要两个参数:Azure DevOps 组织(示例:https://dev.azure.com/fabrikam-tailspin)和 Azure DevOps 项目(示例:Space game web agent)。 然后,该脚本检索 Azure DevOps 项目和组织的相关服务连接。

将服务连接转换为使用工作负荷标识联合时,系统会提示你确认每个连接尚未使用它的更新。 确认后,脚本会通过 Azure DevOps REST API 更新这些服务连接,以利用工作负荷标识联合。

该脚本需要 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 资源管理器服务连接

你可以在七天内还原转换后的自动服务连接及其机密。 7 天后,手动创建新机密。

如果你手动创建和还原服务连接,则无法使用服务连接转换工具转换服务连接,因为 Azure DevOps 无权修改自己的凭据。

若要转换服务连接,请执行以下操作:

  1. >在 Azure DevOps 项目中,转到“管道”“服务连接”。

  2. 选择要还原的现有服务连接。

  3. 选择“将转换还原到原始方案”。

    显示

  4. 再次选择“还原”以确认所做选择。

使用服务主体机密创建 Azure 资源管理器服务连接

可以使用服务主体机密设置服务连接以使用 Azure 资源进行身份验证。 如果需要进一步限制用户通过服务连接访问的 Azure 资源的权限,此方法非常有用。

可以选择手动或自动配置服务连接。 如果以 Azure Pipelines 组织和 Azure 订阅的所有者身份登录,则最好使用自动方法,并且无需进一步限制用户通过服务连接访问的 Azure 资源的权限。

如果以下所有项都适用于你的方案,建议使用此方法:

  • 你已以 Azure Pipelines 组织和 Azure 订阅的所有者身份登录。
  • 不需要进一步限制用户通过服务连接访问的 Azure 资源的权限。
  • 未连接到 Azure StackAzure 政府云
  • 你不是从 Azure DevOps Server 2019 或早期版本的 Team Foundation Server 进行连接。

若要创建服务连接,请执行以下操作:

  1. >在 Azure DevOps 项目中,转到“项目设置”“服务连接”。

    有关详细信息,请参阅打开项目设置

  2. 选择“新建服务连接”,然后选择“Azure 资源管理器”和下一步”。

    显示 Azure 资源管理器选择的屏幕截图。

  3. 选择“服务主体(自动)”,然后选择“下一步”。

    显示选择服务主体(自动)身份验证方法选择的屏幕截图。

  4. 选择范围级别。 选择订阅管理组机器学习工作区管理组是一些容器,可以帮助跨多个订阅管理访问权限、策略和符合性。 机器学习工作区用于创建机器学习项目。

    • 对于订阅范围,请输入以下参数:

      参数 说明
      订阅 ID 必需。 输入 Azure 订阅 ID。
      订阅名称 必需。 输入 Azure 订阅名称。
    • 对于管理组范围,输入以下参数,选择 Azure 管理组。

    • 对于机器学习工作区范围,请输入以下参数:

      参数 说明
      订阅 ID 必需。 输入 Azure 订阅 ID。
      订阅名称 必需。 输入 Azure 订阅名称。
      资源组 必需。 选择包含工作区的资源组。
      ML 工作区名称 必需。 输入现有Azure 机器学习工作区的名称。
      ML 工作区位置 必需。 输入现有Azure 机器学习工作区的位置。
  5. 输入服务连接名称

  6. (可选)输入服务连接的说明。

  7. 选择“ 授予对所有管道 的访问权限”,以允许所有管道使用此服务连接。 如果未选择此选项,则必须手动授予对使用此服务连接的每个管道的访问权限。

  8. 选择“保存”。

创建新服务连接后:

  • 如果使用经典编辑器,请选择在管道的“Azure 订阅”设置中分配的连接名称。
  • 如果使用 YAML 文件,请将连接名称作为 azureSubscription 值复制到代码中。

若要部署到特定的 Azure 资源,请将有关该资源的详细信息添加到任务:

  • 如果使用经典编辑器,请选择要添加到任务的数据。 例如,选择应用服务名称。
  • 如果使用 YAML 文件,请转到 Azure 门户中的资源。 复制所需的数据并将其粘贴到任务代码中。 例如,若要部署 Web 应用,请复制应用服务应用的名称,并将其粘贴为任务 YAML 中 WebAppName 的值。

注意

采用此方法时,Azure DevOps 与 Microsoft Entra ID 进行连接,并使用有效期为 3 个月的机密创建应用注册。 当服务连接即将过期时,Microsoft Entra ID 会显示以下提示:证书或机密即将过期。请新建一个。 在这种情况下,必须刷新服务连接。

若要刷新服务连接,请在 Azure DevOps 门户中编辑连接,然后选择“验证”。 保存编辑后,服务连接的有效期将再延长 3 个月。

建议使用工作负载联合身份验证,而不是创建机密。 如果使用工作负载联合身份验证,则无需轮换机密,应用注册将保留其预期目的。 要开始使用工作负载联合身份验证,请转到服务连接详细信息页,然后选择“转换”。 这会将服务连接转换为使用工作负载联合身份验证,而非机密。 有关详细信息,请参阅转换现有的 Azure 资源管理器服务连接以使用工作负载联合身份验证

有关详细信息,请参阅排查 Azure 资源管理器服务连接问题

如果使用此方法时遇到问题(例如下拉列表中未显示任何订阅),或者想要限制用户权限,则可以改用具有托管标识的服务主体或虚拟机。

创建使用现有服务主体的 Azure 资源管理器服务连接

如果要使用一组预定义的访问权限,但尚未为此目的定义服务主体,请按照以下教程之一创建新的服务主体:

若要创建使用现有服务主体的服务连接,请执行以下操作:

  1. >在 Azure DevOps 项目中,转到“项目设置”“服务连接”。

    有关详细信息,请参阅打开项目设置

  2. 选择“新建服务连接”,然后选择“Azure 资源管理器”和下一步”。

    显示 Azure 资源管理器选择的屏幕截图。

  3. 选择“服务主体” (手动)“下一步”。

    显示选择服务主体(手动)身份验证方法选择的屏幕截图。

  4. 从“新建 Azure 服务连接”对话框中,选择“环境”。 如果选择 Azure Stack,请输入环境 URL,如下所示 https://management.local.azurestack.external

  5. 选择 范围级别。 选择订阅管理组机器学习工作区管理组是一些容器,可以帮助跨多个订阅管理访问权限、策略和符合性。 机器学习工作区用于创建机器学习项目。

    • 对于订阅范围,请输入以下参数:

      参数 说明
      订阅 ID 必需。 输入 Azure 订阅 ID。
      订阅名称 必需。 输入 Azure 订阅名称。
    • 对于管理组范围,请输入以下参数:

      参数 说明
      管理组 ID 必需。 输入 Azure 管理组 ID。
      管理组名称 必需。 输入 Azure 管理组名称。
    • 对于机器学习工作区范围,请输入以下参数:

      参数 说明
      订阅 ID 必需。 输入 Azure 订阅 ID。
      订阅名称 必需。 输入 Azure 订阅名称。
      资源组 必需。 选择包含工作区的资源组。
      ML 工作区名称 必需。 输入现有Azure 机器学习工作区的名称。
      ML 工作区位置 必需。 输入现有Azure 机器学习工作区的位置。
  6. “身份验证 ”部分中,输入或选择以下参数:

    参数 说明
    服务主体 ID 必需。 输入服务主体 ID。
    凭据 选择“服务主体密钥”或证书”。 如果选择了 服务主体密钥,请输入密钥(密码)。 如果选择“ 证书”,请输入证书。
    Tenant Id 必需。 输入租户 ID。
    验证 选择以验证输入的设置。
  7. 在“详细信息”部分中,输入以下参数:

    参数 说明
    连接名称 必需。 在任务属性中引用此服务连接时将使用的名称。 不是 Azure 订阅的名称。
    描述 可选。 输入服务连接的说明。
    安全性 选择“ 授予对所有管道 的访问权限”,以允许所有管道使用此服务连接。 如果未选择此选项,则必须手动授予对使用此服务连接的每个管道的访问权限。
  8. 选择“ 验证并保存 ”以验证并创建服务连接。

创建新服务连接后:

  • 如果在 UI 中使用此服务连接,请选择在管道的“Azure 订阅”设置中分配的连接名称。
  • 如果在 YAML 文件中使用服务连接,请复制连接名称并将其作为 azureSubscription 值粘贴到代码中。

如有必要,请修改服务主体以公开相应的权限。

有关使用服务主体进行身份验证的详细信息,请参阅使用基于角色的访问控制来管理对 Azure 订阅资源的访问权限,或在 Visual Studio 中使用服务主体自动执行 Azure 资源组部署博客文章。

有关详细信息,请参阅排查 Azure 资源管理器服务连接问题

创建与使用托管标识的 VM 的 Azure 资源管理器服务连接

注意

若要使用托管标识进行身份验证,必须在 Azure 虚拟机(VM)上使用自承载代理。

可以在 Azure VM 上配置自承载代理,以在 Microsoft Entra ID 中使用 Azure 托管标识 。 在此方案中,使用系统分配的托管标识(服务主体)向代理授予对支持Microsoft Entra ID 的任何 Azure 资源(例如 Azure 密钥库实例)的访问权限。

  1. >在 Azure DevOps 项目中,转到“项目设置”“服务连接”。

    有关详细信息,请参阅打开项目设置

  2. 选择“新建服务连接”,然后选择“Azure 资源管理器”和下一步”。

    显示选择服务连接类型的屏幕截图。

  3. 选择身份验证方法的托管标识

    显示转到托管服务标识身份验证方法选择的屏幕截图。

  4. 对于 环境,请选择环境名称(Azure 云Azure Stack 或政府云选项)。

  5. 选择范围级别。 选择订阅管理组机器学习工作区管理组是一些容器,可以帮助跨多个订阅管理访问权限、策略和符合性。 机器学习工作区用于创建机器学习项目。

    • 对于订阅范围,请输入以下参数:

      参数 说明
      订阅 ID 必需。 输入 Azure 订阅 ID。
      订阅名称 必需。 输入 Azure 订阅名称。
    • 对于管理组范围,请输入以下参数:

      参数 说明
      管理组 ID 必需。 输入 Azure 管理组 ID。
      管理组名称 必需。 输入 Azure 管理组名称。
    • 对于机器学习工作区范围,请输入以下参数:

      参数 说明
      订阅 ID 必需。 输入 Azure 订阅 ID。
      订阅名称 必需。 输入 Azure 订阅名称。
      资源组 必需。 选择包含工作区的资源组。
      ML 工作区名称 必需。 输入现有Azure 机器学习工作区的名称。
      ML 工作区位置 必需。 输入现有Azure 机器学习工作区的位置。
  6. 输入租户 ID

  7. 输入“服务连接名称”。

  8. (可选)输入服务连接的说明。

  9. 选择“ 授予对所有管道 的访问权限”,以允许所有管道使用此服务连接。 如果未选择此选项,则必须手动授予对使用此服务连接的每个管道的访问权限。

  10. 选择“保存”。

  11. 创建新服务连接后:

    • 如果在 UI 中使用此服务连接,请选择在管道的“Azure 订阅”设置中分配的连接名称。
    • 如果在 YAML 文件中使用服务连接,请将连接名称作为 azureSubscription 值复制到代码中。
  12. 确保 VM(代理)具有适当的权限。

    例如,如果你的代码需要调用 Azure 资源管理器,请在 Microsoft Entra ID 中使用基于角色的访问控制 (RBAC) 为 VM 分配适当的角色。

    有关详细信息,请参阅如何使用 Azure 资源的托管标识?使用基于角色的访问控制来管理对 Azure 订阅资源的访问

有关该过程的详细信息,请参阅排查 Azure 资源管理器服务连接问题

使用发布配置文件创建服务连接

可以使用发布配置文件创建服务连接。 可以使用发布配置文件创建与Azure App 服务的服务连接。

  1. >在 Azure DevOps 项目中,转到“项目设置”“服务连接”。

    有关详细信息,请参阅打开项目设置

  2. 选择“新建服务连接”,然后选择“Azure 资源管理器”和下一步”。

    Azure 资源管理器选择的屏幕截图。

  3. 为身份验证方法选择 “发布配置文件 ”,然后选择“ 下一步”。

    “发布配置文件身份验证方法”选择的屏幕截图。

  4. 输入以下参数:

    参数 说明
    订阅 必需。 选择现有的 Azure 订阅。 如果未显示任何 Azure 订阅或实例,请参阅排查 Azure 资源管理器服务连接问题
    WebApp 必需。 输入Azure App 服务应用的名称。
    服务连接名称 必需。 在任务属性中引用此服务连接时将使用的名称。 不是 Azure 订阅的名称。
    描述 可选。 服务连接的说明。
  5. 选择“ 授予对所有管道 的访问权限”,以允许所有管道使用此服务连接。 如果未选择此选项,则必须手动授予对使用此服务连接的每个管道的访问权限。

  6. 选择“保存”。

创建新服务连接后:

  • 如果在 UI 中使用此服务连接,请选择在管道的“Azure 订阅”设置中分配的连接名称。
  • 如果在 YAML 文件中使用服务连接,请复制连接名称并将其作为 azureSubscription 值粘贴到代码中。

连接到 Azure 政府云

有关连接到 Azure 政府云的信息,请参阅从 Azure Pipelines(Azure 政府云)进行连接

连接到 Azure Stack

有关连接到 Azure Stack 的信息,请参阅以下文章:

帮助和支持