无法从资源组获取虚拟机列表

时间:2019-07-26 15:22:18

标签: azure azure-devops azure-pipelines

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

  

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

在我的VM中,我已经启用了系统分配的托管身份,所以我不知道为什么会出现此错误。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您还需要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资源管理器。 enter image description here

  3. 选择服务连接类型 enter image description here

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

  5. 打开托管服务身份设置

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

  7. 选择环境名称(例如Azure云,Azure Stack或Azure政府云)。

  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