排查 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 | Y |
AzureIoTEdge@2 | Y |
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 | Y |
AzureRmWebAppDeployment@4 | Y |
AzureSpringCloud@0 | Y |
AzureVmssDeployment@0 | Y |
AzureWebApp@1 | Y |
AzureWebAppContainer@1 | Y |
ContainerBuild@0 | Y |
ContainerStructureTest@0 | Y |
Docker@0 | Y |
Docker@1 | Azure 服务连接:Y Docker 注册表服务连接:N |
Docker@2 | Y |
DockerCompose@0 | Y |
DockerCompose@1 | Y |
DotNetCoreCLI@2 | Y |
HelmDeploy@0 | Azure 服务连接:Y |
HelmDeploy@1 | Azure 服务连接:Y |
InvokeRESTAPI@1 | Y |
JavaToolInstaller@0 | Y |
JenkinsDownloadArtifacts@1 | Y |
Kubernetes@0 | 使用 Kubernetes@1 |
Kubernetes@1 | Y |
KubernetesManifest@0 | 使用 KubernetesManifest@1 |
KubernetesManifest@1 | Y |
Maven@4 | Y |
Notation@0 | Y |
PackerBuild@0 | 使用 PackerBuild@1 |
PackerBuild@1 | Y |
PublishToAzureServiceBus@1 | 将 PublishToAzureServiceBus@2 与 Azure 服务连接配合使用 |
PublishToAzureServiceBus@2 | Y |
ServiceFabricComposeDeploy@0 | N |
ServiceFabricDeploy@1 | N |
SqlAzureDacpacDeployment@1 | Y |
VSTest@3 | Y |
验证工作负载联合身份验证是否处于活动状态
如果看到错误消息 AADSTS700223 或 AADSTS700238,则工作负载联合身份验证已在 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 中拥有创建应用注册的权限,或者拥有相应的角色(例如应用程序开发人员)。
有两个选项可解决此问题:
错误消息
下表标识了可能生成它们的常见错误消息和问题:
消息 | 可能的问题 |
---|---|
无法请求令牌:获取 ?audience=api://AzureADTokenExchange: unsupported protocol scheme |
任务不支持工作负载联合身份验证。 |
未找到标识 | 任务不支持工作负载联合身份验证。 |
无法提取 Azure 的访问令牌 | 任务不支持工作负载联合身份验证。 |
AADSTS700016:找不到带标识符“****”的应用程序 | 用于服务连接的标识不再存在,可能已从服务连接中删除,或者配置不正确。 如果使用预先创建的标识手动配置服务连接,请确保正确配置了 appID /clientId 。 |
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 不正确。 |
AADSTS700213:未找到与提供的断言主题匹配的联合身份记录 | 未创建联合凭据,或者主题不正确。 |
AADSTS700223 | Microsoft Entra 租户上的工作负载标识联合身份验证已被约束或禁用。 在此方案中,可以使用托管标识进行联合身份验证。 有关详细信息,请参阅带托管标识的工作负载标识。 |
AADSTS70025:客户端应用程序未配置联合标识凭据 | 确保在应用注册或托管标识上配置联合凭据。 |
Microsoft Entra 拒绝了 Azure DevOps 颁发的令牌,错误代码为 AADSTS700238 | Microsoft Entra 租户上的工作负载标识联合身份验证已被约束。 不允许组织 (https://vstoken.dev.azure.com/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ) 的颁发者使用工作负载联合身份验证。 让 Microsoft Entra 租户管理员或管理团队允许 Azure DevOps 组织的工作负载联合身份验证。 |
AADSTS900382:跨云不支持机密客户端 | 某些主权云会阻止工作负载标识联合。 |
无法使用服务主体客户端 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 角色。 或者,使用托管标识手动创建服务连接。 有关详细信息,请参阅带托管标识的工作负载标识。 |
上面是否未列出您看到的 AADSTS 错误? 检查 Microsoft Entra 身份验证和授权错误代码。