排查 Azure 资源管理器服务连接问题

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

本文介绍常用的故障排除方案,以帮助你解决在创建 Azure 资源管理器服务连接时可能遇到的问题。 请参阅管理服务连接来了解如何创建、编辑和保护服务连接。

创建 Azure 资源管理器服务连接时会发生什么情况?

如果你没有服务连接,可如下所述创建一个连接:

  1. 在项目中选择“项目设置”,然后选择“服务连接”。

    显示如何从项目设置访问服务连接的屏幕截图

  2. 选择“新建服务连接”以添加新的服务连接,然后选择“Azure 资源管理器”。 完成后选择“下一步”。

    显示服务连接类型的屏幕截图。

  3. 选择应用注册(自动)工作负荷联合身份验证作为凭据。

  4. 选择“订阅”,然后从下拉列表中选择你的订阅。 填写表单其余部分,完成后选择保存

保存新的 Azure 资源管理器服务连接时,Azure DevOps 执行以下操作:

  1. 连接到所选订阅的 Microsoft Entra 租户。
  2. 代表用户在 Microsoft Entra ID 中创建应用程序。
  3. 将应用程序分配为所选订阅的参与者。
  4. 使用此应用程序的详细信息创建 Azure 资源管理器服务连接。

注意

若要创建服务连接,需要在项目设置中将你添加到“终结点创建者”组:项目设置>服务连接>安全性。 默认情况下,会将参与者添加到此组。

故障排除方案

创建服务连接时,可能会出现以下问题:

用户在目录中仅拥有来宾权限

  1. 使用管理员帐户登录到 Azure 门户。 该帐户应该是所有者用户帐户管理员

  2. 在左侧导航栏中选择 Microsoft Entra ID

  3. 确保正在编辑与用户订阅相对应的适当目录。 如果不是这样,请选择切换目录并根据需要使用适当的凭据登录。

  4. 在“管理”部分选择“用户”。

  5. 选择“用户设置”。

  6. 在“外部用户”部分选择“管理外部协作设置”。

  7. 将“限制来宾用户权限”选项更改为“否”。

或者,如果你愿意为用户授予管理员级别权限,可以将该用户设为管理员角色的成员。 执行以下步骤:

警告

将用户分配为全局管理员角色允许他们读取和修改 Microsoft Entra 组织中的每项管理设置。 作为最佳做法,建议将此角色分配给组织中不超过五个人。

  1. 使用管理员帐户登录到 Azure 门户。 该帐户应该是所有者用户帐户管理员

  2. 从左侧导航窗格中选择 Microsoft Entra ID

  3. 确保正在编辑与用户订阅相对应的适当目录。 如果不是这样,请选择切换目录并根据需要使用适当的凭据登录。

  4. 在“管理”部分选择“用户”。

  5. 使用搜索框搜索你要管理的用户。

  6. 管理部分选择目录角色,然后更改角色。 完成时选择“保存”。

全局应用更改通常需要 15 到 20 分钟。 然后用户可以尝试重新创建服务连接。

用户无权在目录中添加应用程序

你必须有权在目录中添加集成的应用程序。 目录管理员有权更改此设置。

  1. 在左侧导航栏中选择 Microsoft Entra ID

  2. 确保正在编辑与用户订阅相对应的适当目录。 如果不是这样,请选择切换目录并根据需要使用适当的凭据登录。

  3. 选择“用户”,然后选择“用户设置”。

  4. 在“应用注册”下,将“用户可注册应用程序”选项更改为“是”。

你还可以使用在 Microsoft Entra ID 中已拥有所需权限的现有用户来创建服务主体。 有关详细信息,请参阅使用现有服务主体创建 Azure 资源管理器服务连接

无法获取访问令牌或找不到有效的刷新令牌

这些错误通常在会话过期时发生。 若要解决这些问题,请执行以下操作:

  1. 从 Azure DevOps 注销。
  2. 打开 InPrivate 或隐身模式的浏览器窗口并导航到 Azure DevOps
  3. 使用适当的凭据登录。
  4. 选择你的组织和项目。
  5. 创建服务连接

无法分配参与者角色

对所选 Azure 订阅不拥有写入权限时,通常会发生此错误。

若要解决此问题,请让订阅管理员在 Microsoft Entra ID 中为你分配适当的角色

创建服务连接时未列出订阅

  • 每个 Azure 订阅下拉菜单(计费、服务连接等)中最多列出了 50 个 Azure 订阅:如果要设置服务连接,并且有 50 个以上的 Azure 订阅,则不会列出某些订阅。 在这种情况下,请完成以下步骤:

    1. 在 Azure 订阅的 Microsoft Entra 实例中创建新的本机 Microsoft Entra 用户。
    2. 设置 Microsoft Entra 用户,为其赋予适当权限来设置计费或创建新服务连接。 有关详细信息,请参阅为 Azure DevOps 添加可以设置计费的用户
    3. 将 Microsoft Entra 用户添加到具有利益干系人访问级别的 Azure DevOps 组织,然后将其添加到项目集合管理员组(用于计费)或确保用户在团队项目中有足够的权限创建服务连接。
    4. 使用新用户凭据登录到 Azure DevOps 并设置计费。 只能在列表中看到一个 Azure 订阅。
  • Azure DevOps Services 中缓存的旧用户令牌:如果在创建 Azure 资源管理器 (ARM) 服务连接时未列出 Azure 订阅,则可能是由于 Azure DevOps Services 中缓存的旧用户令牌导致。 此方案并不是很明显,因为 Azure 订阅的列表屏幕不会显示任何错误或警告消息来指示用户令牌已过时。 若要解决此问题,请执行以下步骤,在 Azure DevOps Services 中手动更新缓存的用户令牌:

    1. 注销 Azure DevOps Services 并重新登录。 此操作可以刷新用户令牌。
    2. 清除浏览器缓存和 Cookie,以确保移除任何旧令牌。
    3. 从 Azure DevOps 门户转到服务连接,并重新授权与 Azure 的连接。 此步骤提示 Azure DevOps 使用新令牌。

订阅列表中缺少某些订阅

  • 更改支持帐户类型设置:可以通过更改支持的帐户类型设置并定义谁可以使用应用程序来解决此问题。 执行以下步骤:

    1. 登录到 Azure 门户。
    2. 如果你有权访问多个租户,请使用顶部菜单中的“目录 + 订阅”筛选器,选择要在其中注册应用程序的租户。

    显示 Azure 门户中的目录和订阅图标的屏幕截图。

    1. 在左侧窗格中选择 Microsoft Entra ID
    2. 选择“应用注册” 。
    3. 在已注册的应用程序列表中选择你的应用程序。
    4. 在“身份验证”下,选择“支持的帐户类型”。
    5. 在“支持的帐户类型”下,为“谁可以使用此应用程序或访问此 API?”选择“任何组织目录中的帐户”。

    显示支持的帐户类型的屏幕截图。

    1. 完成时选择“保存”。
  • Azure DevOps Services 中缓存的旧用户令牌:如果在创建 Azure 资源管理器 (ARM) 服务连接时未列出 Azure 订阅,则可能是由于 Azure DevOps Services 中缓存的旧用户令牌导致。 此方案并不是很明显,因为 Azure 订阅的列表屏幕不会显示任何错误或警告消息来指示用户令牌已过时。 若要解决此问题,请执行以下步骤,在 Azure DevOps Services 中手动更新缓存的用户令牌:

    1. 注销 Azure DevOps Services 并重新登录。 此操作可以刷新用户令牌。
    2. 清除浏览器缓存和 Cookie,以确保移除任何旧令牌。
    3. 从 Azure DevOps 门户转到服务连接,并重新授权与 Azure 的连接。 此步骤提示 Azure DevOps 使用新令牌。

服务主体的令牌已过期

自动创建的服务主体经常出现的一个问题是该服务主体的令牌过期并需要续订。 但是,如果你在刷新令牌时遇到问题,请参阅找不到有效的刷新令牌

如果令牌已过期,可能会看到以下错误消息之一:

  • AADSTS7000215: Invalid client secret is provided
  • AADSTS7000222: The provided client secret keys for app '***' are expired
  • Invalid client id or client secret

若要续订自动创建的服务主体的访问令牌,请执行以下操作:

  1. 转到“项目设置”>“服务连接”,然后选择要修改的服务连接。

  2. 选择右上角的“编辑”,然后选择“验证”。

  3. 选择“保存”。

服务主体令牌现已续订三个月。

注意

即使服务主体的令牌尚未过期,此操作也可用。

确保执行该操作的用户对订阅具有适当的权限,并Microsoft Entra ID,因为它将更新为服务主体注册的应用的机密。 有关详细信息,请参阅使用自动化安全性创建 Azure 资源管理器 服务连接,以及创建资源管理器服务连接时会发生什么情况?

无法使用服务主体客户端 ID 获取 JWT

尝试验证使用已过期机密的服务连接时,会出现此问题。

若要解决此问题,请执行下列操作:

  1. 转到“项目设置”>“服务连接”,然后选择要修改的服务连接。

  2. 选择右上角的“编辑”,然后对服务连接进行任何更改。 最简单且建议的更改是添加说明。

  3. 选择“保存”以保存服务连接。

    注意

    选择“保存”。 请不要尝试在此步骤中验证服务连接。

  4. 退出服务连接编辑窗口,然后刷新服务连接页。

  5. 选择右上角的“编辑”,并选择“验证”。

  6. 选择“保存”以保存服务连接。

未从上一个任务输出传递 Azure 订阅

为发布管道动态设置 Azure 订阅并使用前一任务的输出变量时,你可能会遇到此问题。

若要解决此问题,请确保在管道的变量部分定义了值。 然后,可以在管道的任务之间传递此变量。

支持哪些身份验证机制? 托管标识的工作原理是什么?

Azure 资源管理器服务连接可以使用服务主体身份验证 (SPA) 或托管标识身份验证连接到 Azure 订阅。 Azure 资源的托管标识在 Microsoft Entra ID 中为 Azure 服务提供了一个自动托管标识。 可以使用此标识对支持 Microsoft Entra 身份验证的任何服务进行身份验证,而无需在代码或服务连接中保留凭据。

若要了解虚拟机的托管标识,请参阅分配角色

注意

Microsoft 托管的代理不支持托管标识。 在这种情况下,必须在 Azure VM 上设置自托管代理并为该 VM 配置托管标识。