无法将托管服务标识 (MSI) 用于通过托管 Microsoft 代理进行应用服务部署?

时间:2021-07-01 22:26:17

标签: azure-devops azure-pipelines azure-resource-manager azure-managed-identity

我们有一个发布管道失败并显示以下消息:

<块引用>

资源类型“Microsoft.Web/Sites”的资源 ID 和资源名称 '应用服务名称'。错误:无法获取托管的访问令牌 服务校长。请配置托管服务标识 (MSI) 虚拟机“https://aka.ms/azure-msi-docs”。状态码:400, 状态消息:错误请求

我们有 2 个不同的服务连接:

  • Azure Resource Manager 使用服务主体身份验证
  • Azure Resource Manager 使用托管身份验证

第一个,就像一个魅力。然而,由于开发人员想要限制对 Azure AD 的管理员访问,他尝试创建一个托管身份验证服务连接,乍一看,因为它允许我们选择应用服务,似乎表明它正在工作,直到实际部署已触发,但根据上述错误消息失败。

经过大量在线搜索后,我认为 this 答案可能是为什么托管身份验证服务连接失败但服务主体连接成功的线索。

我只想确认,情况真的如此吗?托管代理不支持基于 MSI 的身份验证,这是我们正在使用的......或者已经改变了吗?

我们确实在使用 Microsoft 代理池

MS pool

我们的应用服务此时使用 VM 没有意义。该用例不适用于我们拥有的仪表板。

1 个答案:

答案 0 :(得分:2)

正如 the docs 所写:

<块引用>

您需要在 Azure VM 上使用自托管代理才能使用托管服务标识

我认为它一直都是这样。在这里,我们谈论的是分配给用作构建代理的 VM 的 MSI。不是 MSI,它是应用服务的标识。为什么?服务连接是一种抽象,可让您轻松对 Azure 订阅进行身份验证。因此,它为 VM 提供标识,然后当您对 Azure 执行某些操作时,由于 MSI Azure 知道可以执行该操作。另一个选项是通过服务主体进行身份验证,但是这可以从任何 VM(包括 MS 托管)完成,因为它依赖于保存在服务连接中的客户端 ID 和客户端机密。并且 MSI 必须分配给特定的 VM,而 MS Hosted 代理无法做到这一点。