排查 Azure 资源管理器工作负载标识服务连接问题

获取有关调试工作负载标识服务连接的常见问题的帮助。 如果需要,还了解如何手动创建服务连接。

故障排除清单

使用以下核对清单排查工作负载标识服务连接的问题:

  • 查看管道任务,确保它们支持工作负载标识。
  • 验证工作负载标识联合身份验证是否对租户处于活动状态。
  • 检查颁发者 URL 和联合主体的准确性。

以下各节介绍这些问题以及如何解决这些问题。

查看管道任务

并非所有管道任务都支持工作负载标识。 具体来说,只有任务上的 Azure Resource Manager 服务连接属性会使用工作负载联合身份验证。 下表列出了对 Azure DevOps 随附任务的工作负载联合身份验证支持。 有关从市场安装的任务,请联系扩展发布者以获取支持。

任务 工作负载联合身份验证支持
AutomatedAnalysis@0 Y
AzureAppServiceManage@0 Y
AzureAppServiceSettings@1 Y
AzureCLI@1 Y
AzureCLI@2 Y
AzureCloudPowerShellDeployment@1 使用 AzureCloudPowerShellDeployment@2
AzureCloudPowerShellDeployment@2 Y
AzureContainerApps@0 Y
AzureContainerApps@1 Y
AzureFileCopy@1 使用 AzureFileCopy@6
AzureFileCopy@2 使用 AzureFileCopy@6
AzureFileCopy@3 使用 AzureFileCopy@6
AzureFileCopy@4 使用 AzureFileCopy@6
AzureFileCopy@5 使用 AzureFileCopy@6
AzureFileCopy@6 Y
AzureFunctionApp@1 Y
AzureFunctionApp@2 Y
AzureFunctionAppContainer@1 Y
AzureFunctionOnKubernetes@0 使用 AzureFunctionOnKubernetes@1
AzureFunctionOnKubernetes@1 Azure 服务连接:Y
Docker 注册表服务连接:2024
使用 Azure 服务连接代替 Kubernetes 服务连接
AzureIoTEdge@2 Azure 服务连接:Y
Docker 注册表服务连接:2024
使用 Azure 服务连接代替 Kubernetes 服务连接
AzureKeyVault@1 Y
AzureKeyVault@2 Y
AzureMonitor@0 使用 AzureMonitor@1
AzureMonitor@1 Y
AzureMysqlDeployment@1 Y
AzureNLBManagement@1 N
AzurePolicyCheckGate@0 Y
AzurePowerShell@2 Y
AzurePowerShell@3 Y
AzurePowerShell@4 Y
AzurePowerShell@5 Y
AzureResourceGroupDeployment@2 Y
AzureResourceManagerTemplateDeployment@3 Y
AzureRmWebAppDeployment@3 Azure 服务连接:Y
Docker 注册表服务连接:2024
AzureRmWebAppDeployment@4 Y
AzureSpringCloud@0 Y
AzureVmssDeployment@0 Y
AzureWebApp@1 Y
AzureWebAppContainer@1 Y
ContainerBuild@0 N
ContainerStructureTest@0 N
Docker@0 Azure 服务连接:Y
Docker 注册表服务连接:2024
Docker@1 Azure 服务连接:Y
Docker 注册表服务连接:N
Docker@2 2024 年第二季度
Docker@0 Azure 服务连接:Y
Docker 注册表服务连接:2024
DockerCompose@0 Azure 服务连接:Y
Docker 注册表服务连接:2024
HelmDeploy@0 Azure 服务连接:Y
使用 Azure 服务连接代替 Kubernetes 服务连接
InvokeRESTAPI@1 Y
JavaToolInstaller@0 Y
JenkinsDownloadArtifacts@1 Y
Kubernetes@0 使用 Kubernetes@1
Kubernetes@1 Azure 服务连接:Y
Docker 注册表服务连接:2024
使用 Azure 服务连接代替 Kubernetes 服务连接
KubernetesManifest@0 使用 KubernetesManifest@1
KubernetesManifest@1 Azure 服务连接:Y
Docker 注册表服务连接:2024
使用 Azure 服务连接代替 Kubernetes 服务连接
Notation@0 2024
PackerBuild@0 2024
PackerBuild@1 2024
PublishToAzureServiceBus@1 PublishToAzureServiceBus@2 将支持工作负载联合身份验证
PublishToAzureServiceBus@2 2024 年第二季度
ServiceFabricComposeDeploy@0 N
ServiceFabricDeploy@1 N
SqlAzureDacpacDeployment@1 Y

验证工作负载联合身份验证是否处于活动状态

如果看到错误消息 AADSTS700223AADSTS700238,则工作负载联合身份验证已在 Microsoft Entra 租户中禁用。

验证是否存在阻止联合凭据的 Microsoft Entra 策略。

检查颁发者 URL 是否准确

如果看到一条消息指示未找到匹配的联合身份记录,则颁发者 URL 或联合主体不匹配。 正确的颁发者 URL 以 https://vstoken.dev.azure.com 开头。

可以通过编辑并保存服务连接来更新颁发者 URL,从而修复颁发者 URL。 如果 Azure DevOps 未创建标识,则必须手动更新颁发者 URL。 对于 Azure 标识,颁发者 URL 会自动更新。

常见问题

下一节将识别常见问题并描述原因和解决方法。

我没有在 Microsoft Entra 租户中创建服务主体的权限

如果没有正确的权限,则无法使用 Azure DevOps 服务连接配置工具。 如果你没有创建服务主体的权限,或者使用的是与 Azure DevOps 用户不同的 Microsoft Entra 租户,则你的权限级别不足以使用该工具。

你必须在 Microsoft Entra ID 中拥有创建应用注册的权限,或者拥有相应的角色(例如应用程序开发人员)。

有两个选项可解决此问题:

我使用了用于指定 Azure 容器注册表实例的容器资源

从 Azure 容器注册表拉取的容器资源尚不支持工作负载联合身份验证服务连接。

错误消息

下表标识了可能生成它们的常见错误消息和问题:

Message 可能的问题
无法请求令牌:获取 ?audience=api://AzureADTokenExchange: unsupported protocol scheme 任务不支持工作负载联合身份验证。
未找到标识 任务不支持工作负载联合身份验证。
无法提取 Azure 的访问令牌 任务不支持工作负载联合身份验证。
AADSTS700016:找不到带标识符“****”的应用程序 用于服务连接的标识不再存在,或者可能已从服务连接中删除。 在此方案中,创建新的服务连接。
AADSTS7000215:提供的客户端密码无效。 使用的服务连接的机密已过期。 将服务连接转换为工作负载联合身份验证,以将过期的机密替换为联合凭据。
AADSTS700024:客户端断言不在有效时间范围内 如果错误发生在大约 1 小时后,请改用带有工作负载标识联合身份验证和托管标识的服务连接。 托管标识令牌的生存期约为 24 小时
如果错误发生在 1 小时之前,但在 10 分钟之后,请将(隐式)请求访问令牌(例如,访问 Azure 存储)的命令移动到脚本的开头。 访问令牌将被缓存以用于后续命令。
AADSTS70021:未找到与提供的断言匹配的联合标识记录。 断言颁发者:https://app.vstoken.visualstudio.com 颁发者 URL 不正确。 正确的颁发者 URL 的格式为 https://vstoken.dev.azure.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。 可以通过编辑然后保存服务连接来修复颁发者 URL。 如果 Azure DevOps 未创建你的标识,你必须手动更新颁发者。 可以在服务连接的编辑对话框中找到正确的颁发者,也可以在使用 REST API 时在授权参数下的响应中找到正确的颁发者。
AADSTS70021:未找到与提供的断言匹配的联合标识记录。 断言颁发者:https://vstoken.dev.azure.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。 断言主题:sc://<org>/<project>/<service-connection>. 颁发者 URL 或联合主体不匹配。 Azure DevOps 组织或项目已重命名,或者已重命名手动创建的服务连接,但未更新标识上的联合身份验证使用者。
AADSTS700211:未找到与提供的断言颁发者匹配的联合身份记录 颁发者 URL 和/或联合主体遭到 Microsoft Entra 策略的拒绝。
AADSTS700223 Microsoft Entra 租户上的工作负载标识联合身份验证已被约束或禁用。 在此方案中,通常可以使用托管标识进行联合身份验证。 有关详细信息,请参阅带托管标识的工作负载标识
Microsoft Entra 拒绝了 Azure DevOps 颁发的令牌,错误代码为 AADSTS700238 Microsoft Entra 租户上的工作负载标识联合身份验证已被约束。 不允许组织 (https://vstoken.dev.azure.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) 的颁发者使用工作负载联合身份验证。 让 Microsoft Entra 租户管理员或管理团队允许 Azure DevOps 组织的工作负载联合身份验证。
无法使用服务主体客户端 ID 获取 JSON Web 令牌 (JWT) 你的联合身份验证凭据配置错误或 Microsoft Entra 租户阻止了 OpenID Connect (OIDC)。
脚本失败,出现错误:UnrecognizedArgumentError:无法识别的参数:--federated-token 你在安装了旧版 Azure CLI 的代理上使用 AzureCLI 任务。 工作负载联合身份验证需要 Azure CLI 2.30 或更高版本。
无法在 Microsoft Entra ID 中创建应用。 错误:权限不足,无法完成 Microsoft Graph 中的操作。 确保用户有权创建 Microsoft Entra 应用程序。 Microsoft Entra 租户中已禁用创建应用注册的功能。 将创建服务连接的用户分配到应用程序开发人员 Microsoft Entra 角色。 或者,使用托管标识手动创建服务连接。 有关详细信息,请参阅带托管标识的工作负载标识