本文提供了有关使用 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,并同意将 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 服务,以获取支持 Microsoft Entra ID 并已与 Azure 资源托管标识一起测试的资源列表及其各自的资源 ID。
有关错误处理的指导
如下所示的响应可能指示未正确配置 Azure 资源的 VM 托管标识:
- PowerShell: Invoke-WebRequest:无法连接到远程服务器
- CLI:MSI:无法从
http://localhost:50342/oauth2/token
检索令牌,出现错误 HTTPConnectionPool (主机='localhost',端口=50342)
如果收到其中一个错误,请返回到 Azure 门户 中的 Azure 的虚拟机,然后转到 标识 页,确保 系统分配 设置为“是”。
后续步骤
- 若要为 Azure VM 上的 Azure 资源启用托管标识,请参阅 使用 PowerShell 在 Azure VM 上为 Azure 资源配置托管标识,或使用 Azure CLI 为 Azure VM 上的 Azure 资源配置托管标识