Azure DevOps流水线中Service Principal凭据突然失效问题求助
Azure DevOps流水线中Service Principal Key为空的解决方法
问题现象
此前在Azure DevOps流水线的AZ CLI或PWSH任务中可正常使用Service Principal,从昨日起失效。配置addSpnToEnvironment: true后,发现servicePrincipalKey为空值。
流水线代码
- task: AzureCLI@2 displayName: 'Get Azure CLI credentials' inputs: azureSubscription: $(serviceConnection) scriptType: 'pscore' scriptLocation: inlineScript addSpnToEnvironment: true useGlobalConfig: true inlineScript: | $InformationPreference = "Continue" Write-Information "##vso[task.setvariable variable=CLIENT_ID]$env:servicePrincipalId" | Out-Null Write-Information "##vso[task.setvariable variable=CLIENT_SECRET]$env:servicePrincipalKey" | Out-Null if ([string]::IsNullOrEmpty($env:servicePrincipalKey)) { Write-Warning "Service principal key is empty" } elseif ([string]::IsNullOrEmpty($env:servicePrincipalId)) { Write-Warning "Service principal id is empty" } else { Write-Output "Service principal id and key are set" } - task: Powershell@2 displayName: Output SPN inputs: targetType: inline workingDirectory: '$(System.DefaultWorkingDirectory)' script: | Write-Host "CLIENT_ID: '$env:CLIENT_ID')" Write-Host "CLIENT_SECRET: '$env:CLIENT_SECRET'"
执行结果
AzureCLI@2 task: WARNING: Service principal key is empty Powershell@2 task: CLIENT_ID: '***') CLIENT_SECRET: ''
解决步骤
1. 检查服务连接的密钥与权限
- 进入Azure DevOps项目项目设置→服务连接,找到对应的
$(serviceConnection)服务连接 - 点击编辑,确认服务主体密钥是否过期:手动创建的SPN密钥可能已到期,需重新生成密钥并更新到服务连接中
- 确认服务主体拥有流水线所需的Azure资源权限(如Contributor角色)
2. 调整变量传递方式
addSpnToEnvironment并非在所有场景下都会暴露servicePrincipalKey,可改用Azure CLI内置命令获取凭据:
- task: AzureCLI@2 displayName: 'Get Azure CLI credentials' inputs: azureSubscription: $(serviceConnection) scriptType: 'pscore' scriptLocation: inlineScript inlineScript: | # 获取服务主体ID $spId = (az account show --query user.name -o tsv) Write-Information "##vso[task.setvariable variable=CLIENT_ID]$spId" # 若必须使用密钥,确保服务连接为密钥认证类型且密钥有效
3. 确认服务连接的认证类型
如果服务连接使用以下认证方式,servicePrincipalKey本身会为空:
- 托管标识:无需使用密钥,直接通过Azure CLI/SDK自动使用托管标识认证
- 证书认证:确保代理机器上证书可用,或改为密钥认证(场景允许的话)
4. 检查代理环境
- 确认代理机器网络正常,能连接Azure AD获取SPN凭据
- 升级Azure CLI到最新稳定版,旧版本可能存在环境变量暴露的问题
内容的提问来源于stack exchange,提问作者D K
相关产品推荐
相关产品推荐

