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

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

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

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

先决条件

  • 具备托管标识相关知识。 如果不熟悉 Azure 资源功能的托管标识,请参阅此概述
  • 一个 Azure 帐户,注册试用版
  • 还需要启用了系统分配的托管标识的 Linux 虚拟机。 如果你有 VM,但需要启用系统分配的托管标识,可以在虚拟机属性的标识部分中执行此操作。

授予访问权限

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

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

  2. 选择用于虚拟机的特定资源组。

  3. 转到左侧面板中的“访问控制(IAM)” 。

  4. 单击“添加” ,为 VM 添加新的角色分配。 选择“阅读器” 作为“角色” 。

  5. 在下一个下拉列表中,把“将访问权限分配给” 设置为资源“虚拟机” 。

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

  7. 最后,在“选择” 下拉列表中,选择 Linux 虚拟机,再单击“保存” 。

    Alt 图像文本

使用 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”参数值必须与 Azure AD 预期值完全一致。   若为资源管理器资源 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 资源管理器,请参阅: