azure - 无法从资源组中获取虚拟机列表
问题描述
在我的 Azure DevOps 发布管道中,我想启动一个 VM。所以我有一个带有“启动虚拟机”操作的“Azure 资源组部署”任务。但是,当我运行此任务时,出现错误:
“无法从资源组中获取虚拟机列表:...错误:“无法获取托管服务主体的访问令牌。请为虚拟机“ https://aka.ms/azure-msi-docs ”配置托管服务标识 (MSI)。状态码:400,状态信息:Bad Request”
在我的虚拟机中,我已经启用了系统分配的托管标识,所以我不知道为什么会出现这个错误。有什么想法吗?
解决方案
您还需要 Azure DevOps 中的服务连接,以使用 MSI 连接到您的 Azure 订阅。
可以使用 Azure Active Directory (Azure AD) 中的 Azure 托管服务标识配置基于 Azure 虚拟机 (VM) 的代理。这使您可以使用系统分配的标识(服务主体)授予基于 Azure VM 的代理访问任何支持 Azure AD 的 Azure 资源(例如 Key Vault)的权限,而不是在 Azure DevOps 中为连接保留凭据。
在 Azure DevOps 中,从项目设置页面打开服务连接页面。在 TFS 中,从顶部菜单栏中的“设置”图标打开“服务”页面。
选择托管身份验证选项。
打开托管服务标识设置
输入一个用户友好的连接名称以在引用此服务连接时使用。
选择环境名称(例如 Azure Cloud、Azure Stack 或 Azure Government Cloud)。
在连接对话框的这些字段中输入您的订阅值:
- 订阅号
- 订阅名称
- 租户编号
创建新的服务连接后:
- 如果您在 UI 中使用它,请选择您在管道的 Azure 订阅设置中分配的连接名称。
- 如果您在 YAML 中使用它,请将连接名称作为 azureSubscription 值复制到您的代码中。
- 确保 VM(代理)具有适当的权限。例如,如果您的代码需要调用 Azure 资源管理器,请使用 Azure AD 中的基于角色的访问控制 (RBAC) 为 VM 分配适当的角色。有关更多详细信息,请参阅如何将托管标识用于 Azure 资源?使用基于角色的访问控制来管理对 Azure 订阅资源的访问。
推荐阅读
- javascript - JavaScript - 函数外的空数组
- php - Mysql Query 如果我们先调用两次获取计数然后列出,则需要更多时间
- java - 无法用 Java 实例化类型
- java - 停止、暂停和恢复由 Spring MVC 控制器中的队列运行的循环
- javascript - 使用纯 JavaScript 获取浏览器代理 IP 和端口
- swift - 更改 MKMapView 默认背景颜色
- python - python中的sqlite3详细日志记录
- uwp-xaml - DEP6200:引导失败。找不到设备。- 我如何阻止它寻找手机?
- python - len() 函数显示 45 个值,而不是它应该显示的 90 个值,我做错了什么?
- mysql - 左连接重复并计算所有行