Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
本文介绍常见的故障排除方案,可帮助你解决创建 Azure 资源管理器(ARM)服务连接时可能会遇到的问题。 请参阅管理服务连接来了解如何创建、编辑和保护服务连接。 请参阅 排查 Azure 资源管理器工作负荷标识服务连接 问题,了解如何修复工作负荷标识相关问题。
本文中术语“tenant”和“directory”的使用方式可能会存在重叠。 租户是 Microsoft Entra ID 的一个专用、隔离的实例,组织接收并管理所有用于云服务的标识和访问控制。 目录是该租户中的容器,其中包含用于管理对资源的访问的对象,如用户、组和应用程序。
小窍门
可以请求 Copilot 帮助排查错误消息。 若要了解详细信息,请参阅 使用 AI 排查 Azure DevOps 服务连接错误。
创建 Azure 资源管理器服务连接时会发生什么情况?
您有多种身份验证选项,可用于通过 Azure 资源管理器服务连接到 Azure。 建议将 工作负荷标识联合 与 应用注册 或 托管标识配合使用。
服务连接创建过程成功后,Azure DevOps 会在 Microsoft Entra 租户中自动执行这些步骤。 如果在此过程期间遇到错误,请参阅 下面的故障排除方案。
保存新的 Azure 资源管理器服务连接时,Azure DevOps 将执行以下作:
- 连接到所选订阅的 Microsoft Entra 租户。
- 代表用户在 Entra ID 中创建应用程序。
- 将应用程序分配为所选订阅的参与者。
- 使用此应用程序的详细信息创建 Azure 资源管理器服务连接。
注意
若要创建服务连接,需要在项目设置中为终结点创建者组分配创建者或管理员角色:项目设置>服务连接>更多操作>安全。 默认情况下,会将项目参与者添加到此组。
用户在目录中仅拥有来宾权限
当 Azure DevOps 尝试创建应用程序并在 Microsoft Entra ID 中分配权限( 创建 Azure 资源管理器服务连接时发生的情况中的步骤 2-3)时,在自动服务连接创建过程中发生此错误。 仅具有Microsoft Entra ID 目录中的来宾权限的用户尝试在 Azure DevOps 中创建 Azure 资源管理器服务连接,但权限不足时会发生此情况。
若要解决此问题,请执行下列操作:
在左侧导航栏中选择 Microsoft Entra ID。
请确保编辑与用户订阅对应的相应目录。 如果没有,请选择 “切换目录 ”,并在必要时使用相应的凭据登录。
在“管理”部分中选择“用户”。
选择“用户设置”。
在“外部用户”部分选择“管理外部协作设置”。
将“限制来宾用户权限”选项更改为“否”。
如果你已准备好授予用户管理员级权限,可以将用户加入管理员角色。 完成以下步骤:
警告
将用户分配为全局管理员角色允许他们读取和修改 Microsoft Entra 组织中的每项管理设置。 作为最佳做法,建议将此角色分配给组织中不超过五个人。
从左侧导航窗格中选择 Microsoft Entra ID。
请确保编辑与用户订阅对应的相应目录。 如果没有,请选择 “切换目录 ”,并在必要时使用相应的凭据登录。
在“管理”部分中选择“用户”。
使用搜索框查找要管理的用户。
在管理部分选择目录角色,然后更改角色。 完成时选择“保存”。
全局应用更改通常需要 15 到 20 分钟。 然后,用户可以尝试重新创建服务连接。
用户无权在目录中添加应用程序
当 Azure DevOps 尝试代表你以 Microsoft Entra ID 创建应用程序( 创建 Azure 资源管理器服务连接时会发生什么步骤 2)时,在自动服务连接创建过程中发生此错误。 你无权在目录中添加集成应用程序。 目录管理员有权更改此设置。
若要解决此问题,请执行下列操作:
在左侧导航栏中选择 Microsoft Entra ID。
请确保编辑与用户订阅对应的相应目录。 如果没有,请选择 “切换目录 ”,并在必要时使用相应的凭据登录。
选择 “用户”,然后选择“ 用户设置”。
在 “应用注册”下,将 “用户可以注册应用程序 ”选项更改为 “是”。
还可以使用已在 Entra ID 中具有所需权限的现有用户创建服务主体。 有关详细信息,请参阅使用现有服务主体创建 Azure 资源管理器服务连接。
无法获取访问令牌或找不到有效的刷新令牌
这些错误通常在会话过期时发生。
若要解决这些问题,请执行以下操作:
从 Azure DevOps 注销。
打开 InPrivate 或 incognito 浏览器窗口并转到 Azure DevOps。
使用相应的凭据登录。
选择你的组织和项目。
尝试再次创建服务连接。 有关详细步骤,请参阅 管理服务连接。
尝试编辑或创建新的服务连接时,您的 Azure 订阅似乎未激活。
当你是多个 Entra ID 租户的一部分时,通常会发生此错误。
若要解决此问题,请执行下列操作:
前往 VS 用户档案。
检查是否有多个租户。
选择每个租户,然后重新进行身份验证。
尝试创建服务连接,然后检查订阅是否已加载。
无法分配参与者角色
当 Azure DevOps 尝试将应用程序分配为订阅的参与者时( 创建 Azure 资源管理器服务连接时会发生什么步骤 3)在自动服务连接创建过程中发生此错误。 如果所选 Azure 订阅没有 写入 权限,通常会发生此错误。
若要解决此问题,请让订阅管理员在 Microsoft Entra ID 中为你分配适当的角色。
创建服务连接时未列出订阅
此问题有多种可能的原因。
在各种 Azure 订阅下拉菜单(计费、服务连接等)中,已超出最多 50 个 Azure 订阅:如果您正在设置服务连接,并且拥有超过 50 个 Azure 订阅,则不会列出某些订阅。 在这种情况下,请完成以下步骤:
在 Azure 订阅的 Microsoft Entra 实例中创建新的本地 Microsoft Entra 用户。
设置 Microsoft Entra 用户,为其赋予适当权限来设置计费或创建新服务连接。 有关详细信息,请参阅为 Azure DevOps 添加可以设置计费的用户。
将 Microsoft Entra 用户添加到具有利益干系人访问级别的 Azure DevOps 组织,然后将其添加到项目集合管理员组(用于计费)或确保用户在团队项目中有足够的权限创建服务连接。
使用新用户凭据登录到 Azure DevOps 并设置计费。 只能在列表中看到一个 Azure 订阅。
Azure DevOps Services 中缓存的旧用户令牌: 如果在创建 Azure 资源管理器(ARM)服务连接时未显示 Azure 订阅,则可能是因为 Azure DevOps Services 中缓存了旧用户令牌。 此情况并不明显,因为 Azure 订阅的列表页面不会显示任何错误或警告消息以指示用户令牌已过期。 若要解决此问题,请执行以下步骤,在 Azure DevOps Services 中手动更新缓存的用户令牌:
- 注销 Azure DevOps Services 并重新登录。 此操作可以刷新用户令牌。
- 清除浏览器缓存和 Cookies,以确保移除任何旧令牌。
- 从 Azure DevOps 门户转到服务连接,并重新授权与 Azure 的连接。 此步骤提示 Azure DevOps 使用新令牌。
不正确的支持帐户类型设置: 通过更改 支持的帐户类型 设置并定义谁可以使用应用程序来解决此问题。 执行以下步骤:
登录到 Azure 门户。
如果你有权访问多个租户,请使用顶部菜单中的“目录 + 订阅”筛选器,选择要在其中注册应用程序的租户。
在左侧窗格中选择 Microsoft Entra ID。
选择“应用注册” 。
在已注册的应用程序列表中选择你的应用程序。
在“身份验证”下,选择“支持的帐户类型”。
在“支持的帐户类型”下,为“谁可以使用此应用程序或访问此 API?”选择“任何组织目录中的帐户”。
完成时选择“保存”。
服务主体或机密已过期
Azure DevOps 自动创建的服务主体或机密过期,需要续订。 如果刷新令牌时遇到问题,请参阅 “未能获取访问令牌或找不到有效的刷新令牌”。 若要避免需要续订机密, 请使用与 Azure 资源管理器的工作负荷标识联合。
如果令牌过期,可能会看到以下错误消息之一:
AADSTS7000215: Invalid client secret is providedAADSTS7000222: The provided client secret keys for app '***' are expiredInvalid client id or client secret
若要续订自动创建的服务主体或机密的访问令牌,请执行以下操作:
转到 “项目设置>服务连接”,然后选择要刷新的服务连接。
选择轮换机密。
您的服务主体或机密的令牌现在又续期了三个月。
注意
即使服务主体的令牌尚未过期,此操作也可用。 确保执行该操作的用户对订阅和Microsoft Entra ID具有适当的权限,因为它更新注册到服务主体的应用程序的密钥。 有关详细信息,请参阅 使用机密创建应用注册 , 以及创建资源管理器服务连接时会发生什么情况?
无法使用服务主体客户端 ID 获取 JWT
尝试在 Microsoft Entra ID 级别保存具有过期机密或其他问题的服务连接时,会出现此问题。
若要解决此问题,请执行下列操作:
转到“项目设置”“服务连接”,然后选择要修改的服务连接。
选择右上角的“编辑”,然后对服务连接进行任何更改。 最简单且建议的更改是添加说明。
选择“保存”以保存服务连接。
注意
如果遇到类似 Failed to obtain the Json Web Token(JWT) using service principal client ID. Exception message: AADSTS7000112: Application is disabled.的错误,请与 Microsoft Entra ID 团队协作,确认与您的服务主体关联的企业应用程序中,用户登录启用选项 Enabled for users to sign-in 未被禁用。
未从上一个任务输出传递 Azure 订阅
为发布管道动态设置 Azure 订阅并使用前一任务的输出变量时,你可能会遇到此问题。
若要解决此问题,请确保在管道的变量部分定义了值。 然后,可以在管道的任务之间传递此变量。
支持哪些身份验证机制? 托管标识的工作原理是什么?
Azure 资源管理器服务连接可以使用服务主体身份验证(SPA)或托管标识身份验证连接到 Azure 订阅。
Azure 资源管理器服务连接可以连接到 Azure 订阅、管理组或机器学习工作区,方法包括:
- 应用注册(推荐):使用工作负载身份联合或密钥对连接进行身份验证。
- 托管标识:Azure 资源的托管标识在 Microsoft Entra ID 中为 Azure 服务提供了一个自动托管标识。 你还可以使用代理分配的托管标识。
将服务连接与托管标识设置为身份验证方法时,此过程不会创建新的托管标识。 它只是建立服务连接。 若要使此身份验证方法正常运行,必须满足某些条件。 具体而言,由于托管标识是所选的身份验证方法,因此所使用的虚拟机应具有系统分配的标识。 此外,此虚拟机需要在管道中充当自托管代理,使工作流能够完全执行,从而允许管道通过服务连接部署更改。 VM 上的系统分配标识识别同一 VM 在管道中作为代理,从而启用身份验证。 此设置允许你利用现有的托管标识。
若要了解虚拟机的托管标识,请参阅分配角色。
注意
Microsoft托管代理不支持托管标识。 在这种情况下,必须在 Azure VM 上设置自托管代理并为该 VM 配置托管标识。
使用 AI 排查 Azure DevOps 服务连接错误
此示例提示用于 Copilot Chat,可协助 Copilot 排查您的错误代码和信息。 将此提示复制并粘贴到 Copilot Chat 中,将占位符替换为特定的错误消息。
I'm getting this Azure DevOps service connection error: [PASTE YOUR ERROR MESSAGE HERE]
Can you help me troubleshoot this issue? Please provide step-by-step instructions to:
1. Identify the root cause
2. Fix the configuration in Azure or Entra ID
3. Verify the solution works
Context: This is for an Azure Resource Manager service connection in Azure DevOps.