如何在 Azure VM 上使用 Azure 资源的托管标识进行登录
Azure 资源的托管标识是 Microsoft Entra ID 的一项功能。 支持 Azure 资源的托管标识的每个 Azure 服务都受其自己的时间线限制。 在开始之前,请务必查看资源的托管标识的可用性状态以及已知问题。
本文提供有关使用 Azure 资源服务主体的托管标识进行登录的 PowerShell 和 CLI 脚本示例,以及有关错误处理等重要主题的指导。
注意
建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az。
先决条件
如果打算使用本文中的 Azure PowerShell 或 Azure CLI 示例,请务必安装最新版本的 Azure PowerShell 或 Azure CLI。
重要
- 本文中的所有示例脚本均假设命令行客户端在已启用 Azure 资源的托管标识的 VM 上运行。 在 Azure 门户中使用 VM 的“连接”功能远程连接到 VM。 有关在 VM 上启用 Azure 资源的托管标识的详细信息,请参阅使用 Azure 门户在 VM 上配置 Azure 资源的托管标识,或有关在不同工具(使用 PowerShell、CLI、模板或 Azure SDK)中执行此操作的文章之一。
- 为了防止访问资源期间出错,必须在相应的范围(VM 或更高)至少为 VM 的托管标识授予“读取者”的访问权限,从而能够在 VM 上执行 Azure 资源管理器操作。 有关详细信息,请参阅使用 Azure 门户授予 Azure 资源的托管标识对资源的访问权限。
概述
Azure 资源的托管标识提供一个服务主体对象,此对象是在 VM 上启用 Azure 资源的托管标识时创建的。 可向此服务主体授予对 Azure 资源的访问权限;脚本/命令行客户端可将此服务主体用作标识进行登录和资源访问。 传统上,若要使用自身的标识访问受保护资源,脚本客户端需要:
- 注册到 Microsoft Entra ID,并同意将其用作机密/Web 客户端应用程序
- 使用应用的凭据(可能会嵌入在脚本中)以自身的服务主体登录
凭借 Azure 资源的托管标识,脚本客户端无需再执行任何操作,因为它可以通过 Azure 资源服务主体的托管标识进行登录。
Azure CLI
以下脚本演示如何:
通过 VM 的 Azure 资源服务主体的托管标识登录 Microsoft Entra ID
调用 Azure 资源管理器并获取 VM 的服务主体 ID。 CLI 负责自动管理令牌的获取和使用。 请务必将
<VM-NAME>
替换为自己的虚拟机名称。az login --identity $spID=$(az resource list -n <VM-NAME> --query [*].identity.principalId --out tsv) echo The managed identity for Azure resources service principal ID is $spID
Azure PowerShell
以下脚本演示如何:
通过 VM 的 Azure 资源服务主体的托管标识登录 Microsoft Entra ID
调用 Azure 资源管理器 cmdlet 获取有关 VM 的信息。 PowerShell 负责自动管理令牌的使用。
Add-AzAccount -identity # Call Azure Resource Manager to get the service principal ID for the VM's managed identity for Azure resources. $vmInfoPs = Get-AzVM -ResourceGroupName <RESOURCE-GROUP> -Name <VM-NAME> $spID = $vmInfoPs.Identity.PrincipalId echo "The managed identity for Azure resources service principal ID is $spID"
Azure 服务的资源 ID
有关支持 Microsoft Entra 且已使用 Azure 资源的托管标识进行测试的资源列表及其相应资源 ID,请参阅支持 Microsoft Entra ID 身份验证的 Azure 服务。
有关错误处理的指导
如下所示的响应可能表示未正确配置 VM 的 Azure 资源的托管标识:
- PowerShell:Invoke-WebRequest:无法连接到远程服务器
- CLI:MSI:无法从
http://localhost:50342/oauth2/token
检索令牌,出现错误 HTTPConnectionPool (主机='localhost',端口=50342)
如果收到以下错误之一,请在 Azure 门户中返回到 Azure VM,转至“标识”页并确保将“系统分配”设为“是” 。
后续步骤
- 若要在 Azure VM 上启用 Azure 资源的托管标识,请参阅使用 PowerShell 在 Azure VM 上配置 Azure 资源的托管标识或使用 Azure CLI 在 Azure VM 上配置 Azure 资源的托管标识