教程:使用 VM 上的系统分配的托管标识访问 Azure 资源管理器
本快速入门介绍了如何使用系统分配的标识作为虚拟机 (VM) 的标识来访问 Azure 资源管理器 API。 Azure 资源的托管标识由 Azure 自动管理,可用于向支持 Microsoft Entra 身份验证的服务进行身份验证,这样就无需在代码中插入凭据了。
Azure 资源的托管标识是 Microsoft Entra ID 的一项功能。 支持 Azure 资源的托管标识的每个 Azure 服务都受其自己的时间线限制。 在开始之前,请务必查看资源的托管标识的可用性状态以及已知问题。
将了解如何执行以下操作:
- 授予虚拟机 (VM) 对 Azure 资源管理器中资源组的访问权限
- 使用虚拟机 (VM) 标识获取访问令牌,并使用它调用 Azure 资源管理器
使用 Windows VM 系统分配的托管标识访问资源管理器
提示
本文中的步骤可能因开始使用的门户而略有不同。
本教程介绍了如何创建系统分配的标识、将其分配给 Windows 虚拟机 (VM),然后再使用该标识访问 Azure 资源管理器 API。 托管服务标识由 Azure 自动管理。 此标识可用于向支持 Microsoft Entra 身份验证的服务进行身份验证,这样就无需在代码中嵌入凭据了。
将了解如何执行以下操作:
- 授予 VM 对 Azure 资源管理器的访问权限。
- 使用 VM 的系统分配的托管标识获取访问令牌以访问资源管理器。
使用管理员帐户登录 Azure 门户。
导航到“资源组”选项卡。
选择要向其授予 VM 的托管标识访问权限的“资源组”。
在左侧面板中,选择“访问控制(IAM)”。
依次选择“+ 添加”和“添加角色分配” 。
在“角色”选项卡中,选择“读取者”。 使用此角色可以查看所有资源,但不能进行任何更改。
在“成员”选项卡中,对于“将访问权限分配给”选项,选择“托管标识”,然后选择“+ 选择成员”。
确保“订阅”下拉列表中列出的订阅正确无误。 对于“资源组”,请选择“所有资源组”。
在“管理标识”下拉列表中选择“虚拟机”。
对于“选择”,请选择下拉列表中的 VM 并选择“保存”。
获取访问令牌
使用 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/DevTest",
"name":"DevTest",
"location":"westus",
"properties":
{
"provisioningState":"Succeeded"
}
}
使用 Linux VM 系统分配的托管标识访问资源管理器中的资源组
提示
本文中的步骤可能因开始使用的门户而略有不同。
本教程介绍如何创建系统分配的标识、将其分配给 Linux 虚拟机 (VM),再使用此标识访问 Azure 资源管理器 API。 托管服务标识由 Azure 自动管理。 此标识可用于向支持 Microsoft Entra 身份验证的服务进行身份验证,这样就无需在代码中嵌入凭据了。
你将学习如何执行以下操作:
- 授予 VM 对 Azure 资源管理器的访问权限。
- 使用 VM 的系统分配的托管标识获取访问令牌以访问资源管理器。
使用管理员帐户登录 Azure 门户。
导航到“资源组”选项卡。
选择要向其授予 VM 的托管标识访问权限的“资源组”。
在左侧面板中,选择“访问控制(IAM)”。
依次选择“+ 添加”和“添加角色分配” 。
在“角色”选项卡中,选择“读取者”。 使用此角色可以查看所有资源,但不能进行任何更改。
在“成员”选项卡中,在“将访问权限分配给”选项中,选择“托管标识”,然后选择“+ 选择成员”。
确保“订阅”下拉列表中列出的订阅正确无误。 对于“资源组”,请选择“所有资源组”。
在“管理标识”下拉列表中选择“虚拟机”。
在“选择”选项中,选择下拉列表中的 VM 并选择“保存”。
获取访问令牌
使用 VM 的系统分配的托管标识并调用资源管理器以获取访问令牌。
若要完成这些步骤,需要使用 SSH 客户端。 如果使用的是 Windows,可以在适用于 Linux 的 Windows 子系统中使用 SSH 客户端。 如果需要有关配置 SSH 客户端密钥的帮助,请参阅如何在 Azure 上将 SSH 密钥与 Windows 配合使用或如何创建和使用适用于 Azure 中 Linux VM 的 SSH 公钥和私钥对。
- 在 Azure 门户中导航到你的 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/DevTest",
"name":"DevTest",
"location":"westus",
"properties":
{
"provisioningState":"Succeeded"
}
}
后续步骤
在本快速入门中,你已学习了如何使用 VM 上的系统分配的托管标识来访问 Azure 资源管理器 API。 若要详细了解 Azure 资源管理器,请参阅: