使用 Linux VM 系统分配的托管标识访问 Azure 资源管理器
Azure 资源的托管标识是 Microsoft Entra ID 的一项功能。 支持 Azure 资源的托管标识的每个 Azure 服务都受其自己的时间线限制。 在开始之前,请务必查看资源的托管标识的可用性状态以及已知问题。
本快速入门介绍了如何将系统分配的托管标识用作 Linux 虚拟机 (VM) 的标识来访问 Azure 资源管理器 API。 Azure 资源的托管标识由 Azure 自动管理,可用于向支持 Microsoft Entra 身份验证的服务进行身份验证,这样就无需在代码中插入凭据了。 学习如何:
- 授予 VM 对 Azure 资源管理器中资源组的访问权限
- 使用 VM 标识获取访问令牌,并使用它调用 Azure 资源管理器
先决条件
- 具备托管标识相关知识。 如果不熟悉托管标识,请参阅此概述。
- 一个 Azure 帐户,注册免费 Azure 帐户。
- 还需要启用了系统分配的托管标识的 Linux 虚拟机。 如果你有 VM,但需要启用系统分配的托管标识,可以在虚拟机属性的标识部分中执行此操作。
- 如需为本教程创建虚拟机,则可以按照标题为使用 Azure 门户创建 Linux 虚拟机的文章进行操作
授予访问权限
提示
本文中的步骤可能因开始使用的门户而略有不同。
使用 Azure 资源托管标识时,代码可以获取访问令牌,以向支持 Microsoft Entra 身份验证的资源进行身份验证。 Azure 资源管理器 API 支持 Microsoft Entra 身份验证。 首先,需要授予此 VM 的标识对 Azure 资源管理器中资源(在此示例中为包含 VM 的资源组)的访问权限。
使用管理员帐户登录 Azure 门户。
转到“资源组” 选项卡。
选择要向其授予 VM 的托管标识访问权限的资源组。
在左侧面板中,选择“访问控制(IAM)”。
依次选择“添加”、“添加角色分配”。
在“角色”选项卡中,选择“读取者”。 使用此角色可以查看所有资源,但不能进行任何更改。
在“成员”选项卡中,为“将访问权限分配给”选择“托管标识”。 然后选择“+ 选择成员”。
确保“订阅”下拉列表中列出的订阅正确无误。 对于“资源组” ,请选择“所有资源组” 。
在“管理标识”下拉列表中选择“虚拟机”。
最后,在“选择”中,从下拉列表中选择你的 Windows 虚拟机,然后选择“保存”。
使用 VM 的系统分配的托管标识获取访问令牌并使用它来调用资源管理器
若要完成这些步骤,需要使用 SSH 客户端。 如果使用的是 Windows,可以在适用于 Linux 的 Windows 子系统中使用 SSH 客户端。 如果需要有关配置 SSH 客户端密钥的帮助,请参阅如何在 Azure 上将 SSH 密钥与 Windows 配合使用或如何创建和使用适用于 Azure 中 Linux VM 的 SSH 公钥和私钥对。
在门户中导航到 Linux VM,然后在“概述”中选择“连接”。
使用所选的 SSH 客户端连接 到 VM。
在终端窗口中,使用
curl
向 Azure 资源终结点的本地托管标识发出请求,以获取 Azure 资源管理器的访问令牌。 下面是对访问令牌的curl
请求。
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -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.azure.com",
"token_type":"Bearer"
}
可以使用此访问令牌访问 Azure 资源管理器。例如,读取之前授予此 VM 有权访问的资源组的详细信息。 将值 <SUBSCRIPTION-ID>
、<RESOURCE-GROUP>
和 <ACCESS-TOKEN>
替换为之前创建的值。
注意
URL 区分大小写。因此,请确保大小写与之前在命名资源组时使用的大小写完全相同,并确保“resourceGroup”使用的是大写“G”。
curl https://management.azure.com/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":"westus",
"properties":
{
"provisioningState":"Succeeded"
}
}
后续步骤
在本快速入门中,你已学习了如何使用系统分配的标识来访问 Azure 资源管理器 API。 有关 Azure 资源管理器的详细信息,请参阅: