在 Azure Pipelines 中使用托管标识:GetUserAccessToken:无法获取标识的访问令牌。AAD 返回静默失败

Cha*_*own 6 azure azure-resource-manager azure-devops azure-pipelines azure-managed-identity

我正在尝试在 Azure Pipelines 中运行Azure 资源组部署任务。我已在运行 Windows 的 Azure VM 上部署了 Azure Pipelines 自托管代理,并且在我的 Azure DevOps 组织中,我已使用托管服务标识设置了与 VM 的 Azure 资源管理器服务连接

但是,当我尝试使用托管标识的服务连接配置 Azure 资源组部署任务时,出现以下错误:

GetUserAccessToken: 获取identity的访问令牌失败。AAD 返回无声失败。

截屏:

在此输入图像描述

我已经验证我已向目标资源组授予了对 VM 托管身份的访问权限(贡献者):

在此输入图像描述

服务连接的范围也仅限于 Azure 订阅:

在此输入图像描述

感谢您对诊断此问题的任何帮助。谢谢!

Cha*_*own 1

出现此问题的原因似乎是通过 Azure DevOps 身份验证的用户帐户正在检索订阅信息。Azure DevOps 是不使用托管标识来检索订阅信息。

特别是,我原来的 Azure DevOps 用户帐户已打开 MFA 以对 Azure 订阅(例如 Portal.azure.com)进行身份验证,但没有打开MFA 以对 Azure DevOps(如 dev.azure.com/)进行身份验证。我认为这是无法获取访问令牌时导致问题的原因:

在此输入图像描述

我在 Azure AD 中创建了一个不同的用户帐户,授予其访问我的 Azure DevOps 组织的权限,并确保这个新用户帐户对目标订阅具有“读者”权限,并且没有打开 MFA。这解决了使用托管身份时获取订阅信息的问题:

在此输入图像描述