使用 Linux VM 系统分配的托管标识访问 Azure 资源管理器

Azure 资源的托管标识是 Microsoft Entra ID 的一项功能。 支持 Azure 资源的托管标识的每个 Azure 服务都受其自己的时间线限制。 在开始之前,请务必查看资源的托管标识的可用性状态以及已知问题

本快速入门介绍了如何将系统分配的托管标识用作 Linux 虚拟机 (VM) 的标识来访问 Azure 资源管理器 API。 Azure 资源的托管标识由 Azure 自动管理,可用于向支持 Microsoft Entra 身份验证的服务进行身份验证,这样就无需在代码中插入凭据了。 学习如何:

  • 授予 VM 对 Azure 资源管理器中资源组的访问权限
  • 使用 VM 标识获取访问令牌,并使用它调用 Azure 资源管理器

先决条件

授予访问权限

提示

本文中的步骤可能因开始使用的门户而略有不同。

使用 Azure 资源托管标识时,代码可以获取访问令牌,以向支持 Microsoft Entra 身份验证的资源进行身份验证。 Azure 资源管理器 API 支持 Microsoft Entra 身份验证。 首先,需要授予此 VM 的标识对 Azure 资源管理器中资源(在此示例中为包含 VM 的资源组)的访问权限。

  1. 使用管理员帐户登录 Azure 门户

  2. 转到“资源组” 选项卡。

  3. 选择要向其授予 VM 的托管标识访问权限的资源组。

  4. 在左侧面板中,选择“访问控制(IAM)”。

  5. 依次选择“添加”、“添加角色分配”。

  6. 在“角色”选项卡中,选择“读取者”。 使用此角色可以查看所有资源,但不能进行任何更改。

  7. 在“成员”选项卡中,为“将访问权限分配给”选择“托管标识”。 然后选择“+ 选择成员”。

  8. 确保“订阅”下拉列表中列出的订阅正确无误。 对于“资源组” ,请选择“所有资源组” 。

  9. 在“管理标识”下拉列表中选择“虚拟机”。

  10. 最后,在“选择”中,从下拉列表中选择你的 Windows 虚拟机,然后选择“保存”。

    屏幕截图显示了向托管标识添加读取者角色。

使用 VM 的系统分配的托管标识获取访问令牌并使用它来调用资源管理器

若要完成这些步骤,需要使用 SSH 客户端。 如果使用的是 Windows,可以在适用于 Linux 的 Windows 子系统中使用 SSH 客户端。 如果需要有关配置 SSH 客户端密钥的帮助,请参阅如何在 Azure 上将 SSH 密钥与 Windows 配合使用如何创建和使用适用于 Azure 中 Linux VM 的 SSH 公钥和私钥对

  1. 在门户中导航到 Linux VM,然后在“概述”中选择“连接”。

  2. 使用所选的 SSH 客户端连接 到 VM。

  3. 在终端窗口中,使用 curl 向 Azure 资源终结点的本地托管标识发出请求,以获取 Azure 资源管理器的访问令牌。   下面是对访问令牌的 curl 请求。

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.chinacloudapi.cn/' -H Metadata:true

注意

resource 参数的值必须完全匹配 Microsoft Entra ID 预期的值。 若为资源管理器资源 ID,必须在 URI 的结尾添加斜线。

响应包括访问 Azure 资源管理器所需的访问令牌。

响应:

{
  "access_token":"eyJ0eXAiOi...",
  "refresh_token":"",
  "expires_in":"3599",
  "expires_on":"1504130527",
  "not_before":"1504126627",
  "resource":"https://management.chinacloudapi.cn",
  "token_type":"Bearer"
}

可以使用此访问令牌访问 Azure 资源管理器。例如,读取之前授予此 VM 有权访问的资源组的详细信息。 将值 <SUBSCRIPTION-ID><RESOURCE-GROUP><ACCESS-TOKEN> 替换为之前创建的值。

注意

URL 区分大小写。因此,请确保大小写与之前在命名资源组时使用的大小写完全相同,并确保“resourceGroup”使用的是大写“G”。  

curl https://management.chinacloudapi.cn/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS-TOKEN>" 

返回的响应包含具体的资源组信息:

{
"id":"/subscriptions/98f51385-2edc-4b79-bed9-7718de4cb861/resourceGroups/DevTest",
"name":"DevTest",
"location":"chinanorth",
"properties":
{
  "provisioningState":"Succeeded"
  }
} 

后续步骤

在本快速入门中,你已学习了如何使用系统分配的标识来访问 Azure 资源管理器 API。 有关 Azure 资源管理器的详细信息,请参阅: