【问题标题】:Using Managed Identity in Azure Pipelines: GetUserAccessToken: Failed to obtain an access token of identity. AAD returned silent failure在 Azure Pipelines 中使用托管标识:GetUserAccessToken:无法获取标识的访问令牌。 AAD 返回静默失败
【发布时间】:2024-01-24 09:55:01
【问题描述】:

我正在尝试在 Azure Pipelines 中运行 Azure Resource Group Deployment task。我部署了一个Azure Pipelines self-hosted agent on an Azure VM running Windows,并在我的 Azure DevOps 组织中设置了一个Azure Resource Manager service connection to a VM with a managed service identity

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

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

截图:

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

服务连接也适用于 Azure 订阅:

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

【问题讨论】:

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


    【解决方案1】:

    我遇到此错误的场景是将服务连接添加到 Azure DevOps 中的管理组

    GetUserAccessToken:获取身份的访问令牌失败 {{GUID}}。 AAD 返回静默失败。

    对我的修复是在 DevOps 中将我的帐户添加为项目集合管理员...详细信息如下:

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

    我有一个有趣的差异,我的 Azure AD 主租户与我的 Azure 订阅 AD 租户不同(我是 B2B 来宾)。

    我实际上尝试使用一个不同的 DevOps 租户,该租户的 AAD 与 Azure 订阅租户相关联,并且它工作正常 :( 这使我进一步深入了解不同之处。除了 DevOps->AAD 链接,我也是COLLECTION 管理员在工作的一个,只有一个项目管理员在失败的那个。我确保我拥有管理组所有者权限,然后将我的帐户添加为项目集合管理员 - 工作!

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

          要解决这些问题:

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

          参考:

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

          【讨论】:

          • 不幸的是,简单地注销然后重新登录并不能解决问题。删除和读取服务连接也不会。
          • 这为我修好了
          最近更新 更多