【问题标题】:Failed to fetch the list of virtual machines from resource group无法从资源组中获取虚拟机列表
【发布时间】:2019-07-26 15:22:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: azure azure-devops azure-pipelines


    【解决方案1】:

    您还需要 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. 在连接对话框的这些字段中输入您的订阅值:

      • 订阅 ID
      • 订阅名称
      • 租户 ID
    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-a-vm-with-a-managed-service-identity

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      相关资源
      最近更新 更多