You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux代理使用AzurePowerShell任务报错:仅支持SPN认证方案

问题原因及解决方案

错误原因

你遇到的问题核心在于:

  • AzurePowerShell@5 任务是为 PowerShell 的 Az/AzureRM 模块配置认证上下文的,它不会自动为 az CLI 设置登录信息。
  • Linux 代理环境下,该任务的认证机制无法兼容 az CLI 的认证需求,因此抛出了"Only SPN credential auth scheme is supported for non windows agent"的错误。

解决方案

方案一:改用 AzureCLI 任务执行脚本(推荐)

直接将 AzurePowerShell@5 替换为 AzureCLI@2 任务,这个任务会自动为 az CLI 配置跨平台的认证上下文,Linux 代理可直接使用:

- task: AzureCLI@2
  displayName: 'Add webapp OutboundIPs into SA FW'
  inputs:
    azureSubscription: ${{ parameters.serviceConnection }}
    scriptType: 'pscore' # Linux 代理使用 PowerShell Core
    scriptPath: '$(path)/update-SA-firewall.ps1'
    arguments: '-webappOutboundIPs "$(webappOutboundIPs)" -SAName $(SAName) -RG ${{ parameters.resourceGroupName }}'

你的原 PowerShell 脚本无需修改,AzureCLI@2 会自动完成 az CLI 的登录认证,脚本中的 az 命令可直接执行。

方案二:在 AzurePowerShell 任务中手动配置 az CLI 认证(不推荐)

如果必须保留 AzurePowerShell@5 任务,需要在脚本中手动导出 PowerShell 的 Azure 认证信息,再为 az CLI 完成登录:

Param(
    [string] [Parameter(Mandatory=$true)] $webappOutboundIPs,
    [string] [Parameter(Mandatory=$true)] $SAName,
    [string] [Parameter(Mandatory=$true)] $RG
)

# 从 PowerShell Azure 上下文提取认证信息
$azContext = Get-AzContext
$tenantId = $azContext.Tenant.Id
$subscriptionId = $azContext.Subscription.Id
$clientId = $azContext.Account.Id
# 注意:需要提前将服务主体密码存储在 Azure 密钥保管库中
$clientSecret = (Get-AzKeyVaultSecret -VaultName "你的密钥保管库名称" -Name "存储服务主体密码的密钥名称").SecretValueText

# 登录 az CLI 并切换到目标订阅
az login --service-principal -u $clientId -p $clientSecret --tenant $tenantId
az account set --subscription $subscriptionId

# 处理 IP 并添加到存储账户防火墙
$IPs = $webappOutboundIPs.Split(",")
foreach ($ip in $IPs) {
     az storage account network-rule add -g $RG --account-name $SAName --ip-address $ip | out-null
 }

此方案需要额外维护密钥保管库中的服务主体密码,复杂度较高,不建议使用。


内容的提问来源于stack exchange,提问作者4hbane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:45:37