本文提供了关于使用 Azure 资源服务主体的托管标识进行登录的 PowerShell 和 CLI 脚本示例,并指导如何处理错误等重要主题。
注释
建议使用 Azure Az PowerShell 模块与Azure交互。 请参阅 Install Azure PowerShell 入门。 若要了解如何迁移到 Az PowerShell 模块,请参阅 Migrate Azure PowerShell从 AzureRM 迁移到 Az。
先决条件
如果打算使用本文中的Azure PowerShell或Azure CLI示例,请务必安装最新版本的 Azure PowerShell 或 Azure CLI。
重要
- 本文中的所有示例脚本都假定命令行客户端在启用了Azure资源的托管标识的 VM 上运行。 使用Azure门户中的 VM“连接”功能远程连接到 VM。 有关在 VM 上为Azure资源启用托管标识的详细信息,请参阅使用 Azure 门户或其中一篇变体文章(使用 PowerShell、CLI、模板或Azure SDK)为 VM 上的Azure资源配置托管标识。
- 若要防止资源访问期间出现错误,必须在适当的范围(VM 或更高级别)至少授予 VM 的托管标识“读取者”访问权限,以允许在 VM 上执行 Azure 资源管理器 操作。 有关详细信息,请参阅 通过Azure门户为Azure资源分配托管标识。
概述
Azure 资源的托管标识提供服务主体,在为 VM 启用 Azure 资源的托管标识时,会创建该对象。 可以将服务主体授予对 Azure 资源的访问权限,并使用它作为脚本或命令行客户端的身份来进行登录和资源访问。 传统上,为了根据自己的标识访问受保护的资源,脚本客户端需要:
- 注册并同意Microsoft Entra ID为机密/Web 客户端应用程序
- 使用应用的凭据(可能会嵌入在脚本中)以自身的服务主体登录
在 Azure 资源上使用托管标识后,脚本客户端不再需要处理这些繁琐的操作,因为它可以使用 Azure 资源服务主体的托管标识来登录。
Azure CLI
以下脚本演示如何:
请在用于 Azure 资源的虚拟机托管标识的服务主体下登录到 Microsoft Entra ID
调用Azure 资源管理器并获取 VM 的服务主体 ID。 CLI 会为您自动管理令牌的获取和使用。 请务必将虚拟机名称 替换为 。
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
以下脚本演示如何:
在虚拟机的托管标识(用于 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:无法从 检索令牌,出现错误 HTTPConnectionPool (主机='localhost',端口=50342)
如果收到其中一个错误,请返回到 Azure 门户中的 Azure 虚拟机,然后转到 标识页,并确保系统分配的设置为“是”。
后续步骤
- 若要在 Azure VM 上为 Azure 资源启用托管身份,请参阅 使用 PowerShell 配置 Azure VM 上的托管身份,或 使用 Azure CLI 配置 Azure VM 上的托管身份。