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

Using Managed Identity in Azure Pipelines: GetUserAccessToken: Failed to obtain an access token of identity. AAD returned silent failure

我正在尝试 运行 Azure Resource Group Deployment task in Azure Pipelines. I have deployed an Azure Pipelines self-hosted agent on an Azure VM running Windows, and in my Azure DevOps organization I have set up an Azure Resource Manager service connection to a VM with a managed service identity

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

GetUserAccessToken:无法获取身份访问令牌。 AAD 返回静默失败。

截图:

我已经验证我已将对 VM 托管身份的访问权限(参与者)授予目标资源组:

服务连接也限定在 Azure 订阅范围内:

感谢任何有关诊断此问题的帮助。谢谢!

获取访问令牌失败通常发生在您的会话过期时。

要解决这些问题:

  1. 退出 Azure Pipelines 或 TFS。
  2. 打开 InPrivate 或隐身浏览器 window 并导航至 https://visualstudio.microsoft.com/team-services/
  3. 如果系统提示您退出,请执行此操作。
  4. 使用适当的凭据登录。
  5. 从列表中选择您要使用的组织。
  6. Select 您要添加服务连接的项目。
  7. 通过打开“设置”页面创建您需要的服务连接。然后,select 服务 > 新服务连接 > Azure 资源管理器。

参考:

https://docs.microsoft.com/en-us/azure/devops/pipelines/release/azure-rm-endpoint?view=azure-devops#sessionexpired

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

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

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

如果这对其他人有用,我在通过 Azure DevOps 修改服务连接时遇到了类似的问题。 Charlie Brown 提供的解决方案为我指出了正确的方向:AAD 中的用户不会自动添加到 Azure DevOps Enterprise Application,因此如果您 运行 加入其中,则可能意味着您需要添加用户或试图通过 DevOps 访问它的小组。

就我而言,我只是通过 Azure 门户 -> Azure Active Directory -> 企业应用程序 -> Azure DevOps 将自己添加为所有者和用户。

我不需要创建另一个用户,也不需要使用 MFA 修改任何内容。

我遇到此错误的情况是在 Azure DevOps 中向管理组添加服务连接

GetUserAccessToken: Failed to obtain an access token of identity {{GUID}}. AAD returned silent failure.

为我解决的问题是在 DevOps 中将我的帐户添加为项目集合管理员...详情如下:

尝试了所有可能的权限...GA、ROOT 管理组所有者(通过 AAD 设置)、目标管理组所有者、订阅所有者、应用程序管理员...在 devops 中,我是项目管理员,我有管理员安全角色在服务连接中。

这里有一个有趣的差异,我的 Azure AD 主租户不同于我的 Azure 订阅 AD 租户(我是 B2B 访客)。

我实际上尝试使用一个不同的 DevOps 租户,它有一个 AAD 绑定到 Azure 订阅租户并且它工作了:(这让我进一步深入研究不同之处。除了 DevOps->AAD link,我也是工作中的集合管理员,而失败的只是项目管理员。我确保我拥有管理组所有者权限,然后将我的帐户添加为项目集合管理员 - 成功了!

参考:https://developercommunity.visualstudio.com/solutions/1246044/view.html