ARM 服务连接故障排除

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

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

创建 ARM 服务连接时发生了什么情况?

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

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

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

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

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

  3. 选择“服务主体(自动)”,然后选择“下一步”。

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

    显示新建 ARM 服务连接表单的屏幕截图。

保存新的 ARM 服务连接后,Azure DevOps 将会:

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

注意

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

故障排除方案

下面是创建服务连接时可能出现的一些问题:

权限不足,无法完成该操作

当系统尝试代表你在 Microsoft Entra ID 中创建应用程序时,通常会发生这种情况。

这是一个权限问题,可能是以下原因造成的:

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

此问题的最佳解决方法是提高来宾用户权限,同时仅向该用户授予最少量的附加权限,如下所述。

  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 订阅。 如果你正在设置服务连接并且 Azure 订阅数超过 50 个,则某些订阅不会列出。 在这种情况下,请完成以下步骤:

  1. 在 Azure 订阅的 Microsoft Entra 实例中创建新的本机 Microsoft Entra 用户。

  2. 设置 Microsoft Entra 用户,为其赋予适当权限来设置计费或创建新服务连接。 有关详细信息,请参阅为 Azure DevOps 添加可以设置计费的用户

  3. 将 Microsoft Entra 用户添加到具有利益干系人访问级别的 Azure DevOps 组织,然后将其添加到项目集合管理员组(用于计费)或确保用户在团队项目中有足够的权限创建服务连接。

  4. 使用新用户凭据登录到 Azure DevOps 并设置计费。 只能在列表中看到一个 Azure 订阅。

订阅列表中缺少某些订阅

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

  1. 登录到 Azure 门户。

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

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

  3. 在左侧窗格中选择 Microsoft Entra ID

  4. 选择“应用注册” 。

  5. 在已注册的应用程序列表中选择你的应用程序。

  6. 在“身份验证”下,选择“支持的帐户类型”。

  7. 在“支持的帐户类型”下,为“谁可以使用此应用程序或访问此 API?”选择“任何组织目录中的帐户”。

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

  8. 完成后,选择“保存”。

服务主体的令牌已过期

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

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

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

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

  3. 选择“保存”。

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

注意

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

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

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

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

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

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

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

    注意

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

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

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

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

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

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

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

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

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

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

注意

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