首页 > 解决方案 > 无法从资源组中获取虚拟机列表

问题描述

在我的 Azure DevOps 发布管道中,我想启动一个 VM。所以我有一个带有“启动虚拟机”操作的“Azure 资源组部署”任务。但是,当我运行此任务时,出现错误:

“无法从资源组中获取虚拟机列表:...错误:“无法获取托管服务主体的访问令牌。请为虚拟机“ https://aka.ms/azure-msi-docs ”配置托管服务标识 (MSI)。状态码:400,状态信息:Bad Request”

在我的虚拟机中,我已经启用了系统分配的托管标识,所以我不知道为什么会出现这个错误。有什么想法吗?

标签: azureazure-devopsazure-pipelines

解决方案


您还需要 Azure DevOps 中的服务连接,以使用 MSI 连接到您的 Azure 订阅。

可以使用 Azure Active Directory (Azure AD) 中的 Azure 托管服务标识配置基于 Azure 虚拟机 (VM) 的代理。这使您可以使用系统分配的标识(服务主体)授予基于 Azure VM 的代理访问任何支持 Azure AD 的 Azure 资源(例如 Key Vault)的权限,而不是在 Azure DevOps 中为连接保留凭据。

  1. 在 Azure DevOps 中,从项目设置页面打开服务连接页面。在 TFS 中,从顶部菜单栏中的“设置”图标打开“服务”页面。

  2. 选择 + 新服务连接,然后选择 Azure 资源管理器。 在此处输入图像描述

  3. 选择服务连接类型 在此处输入图像描述

  4. 选择托管身份验证选项。

  5. 打开托管服务标识设置

  6. 输入一个用户友好的连接名称以在引用此服务连接时使用。

  7. 选择环境名称(例如 Azure Cloud、Azure Stack 或 Azure Government Cloud)。

  8. 在连接对话框的这些字段中输入您的订阅值:

    • 订阅号
    • 订阅名称
    • 租户编号
  9. 创建新的服务连接后:

    • 如果您在 UI 中使用它,请选择您在管道的 Azure 订阅设置中分配的连接名称。
    • 如果您在 YAML 中使用它,请将连接名称作为 azureSubscription 值复制到您的代码中。
  10. 确保 VM(代理)具有适当的权限。例如,如果您的代码需要调用 Azure 资源管理器,请使用 Azure AD 中的基于角色的访问控制 (RBAC) 为 VM 分配适当的角色。有关更多详细信息,请参阅如何将托管标识用于 Azure 资源?使用基于角色的访问控制来管理对 Azure 订阅资源的访问。

https://docs.microsoft.com/en-us/azure/devops/pipelines/library/connect-to-azure?view=azure-devops#create-an-azure-resource-manager-service-connection-to-带有托管服务标识的虚拟机


推荐阅读