使用 PowerShell 在 Azure VM 上配置 Azure 资源的托管标识

Azure 资源的托管标识是 Microsoft Entra ID 的一项功能。 支持 Azure 资源的托管标识的每个 Azure 服务都受其自己的时间线限制。 在开始之前,请务必查看资源的托管标识的可用性状态以及已知问题

Azure 资源的托管标识在 Microsoft Entra ID 中为 Azure 服务提供了一个自动托管标识。 可以使用此标识向支持 Microsoft Entra 身份验证的任何服务进行身份验证,这样就无需在代码中插入凭据了。

在本文中,你将了解如何在 Azure VM 上使用 PowerShell 执行 Azure 资源的托管标识的以下操作。

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

先决条件

系统分配的托管标识

在此部分,我们将介绍如何使用 Azure PowerShell 来启用和禁用系统分配的托管标识。

在创建 Azure VM 的过程中启用系统分配托管标识

若要创建启用了系统分配的托管标识的 Azure VM,你的帐户需要虚拟机参与者角色分配。 不需要其他 Microsoft Entra 目录角色分配。

  1. 请参阅以下 Azure VM 快速入门之一,仅完成必要部分(“登录到 Azure”、“创建资源组”、“创建网络组”、“创建 VM”)。

    转到“创建 VM”部分时,需要对 New-AzVMConfig cmdlet 语法稍做修改。 务必添加 -IdentityType SystemAssigned 参数,以预配启用了系统分配标识的 VM,例如:

    $vmConfig = New-AzVMConfig -VMName myVM -IdentityType SystemAssigned ...
    

在现有 Azure VM 上启用系统分配托管标识

若要在最初未预配系统分配的托管标识的 VM 上启用该托管标识,你的帐户需要虚拟机参与者角色分配。 不需要其他 Microsoft Entra 目录角色分配。

  1. 使用 Get-AzVM cmdlet 检索 VM 属性。 然后,若要启用系统分配的托管标识,请在 Update-AzVM cmdlet 中使用 -IdentityType 开关:

    $vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
    Update-AzVM -ResourceGroupName myResourceGroup -VM $vm -IdentityType SystemAssigned
    

将 VM 系统分配的标识添加到组

在 VM 上启用系统分配的标识后,可以将其添加到组中。 以下过程将 VM 的系统分配的标识添加到组。

  1. 检索并记下 VM 服务主体的 ObjectID(在返回值的 Id 字段中指定):

    Get-AzADServicePrincipal -displayname "myVM"
    
  2. 检索并记下组中的 ObjectID(在返回值的 Id 字段中指定):

    Get-AzADGroup -searchstring "myGroup"
    
  3. 将 VM 的服务主体添加到组:

    New-MgGroupMember -GroupId "<Id of group>" -DirectoryObjectId "<Id of VM service principal>" 
    

从 Azure VM 中禁用系统分配的托管标识

若要在 VM 上禁用系统分配的托管标识,你的帐户需要虚拟机参与者角色分配。 不需要其他 Microsoft Entra 目录角色分配。

如果某个虚拟机不再需要系统分配的托管标识,但仍需要用户分配的托管标识,请使用以下 cmdlet:

  1. 使用 Get-AzVM cmdlet 检索 VM 属性并将 -IdentityType 参数设置为 UserAssigned

    $vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
    Update-AzVm -ResourceGroupName myResourceGroup -VM $vm -IdentityType "UserAssigned" -IdentityID "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESROURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>..."
    

如果某个虚拟机不再需要系统分配的托管标识,且没有用户分配的托管标识,请使用以下命令:

$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
Update-AzVm -ResourceGroupName myResourceGroup -VM $vm -IdentityType None

用户分配的托管标识

在此部分中,你将了解如何使用 Azure PowerShell 在 VM 中添加和删除用户分配的托管标识。

在创建过程中向 VM 分配用户分配的托管标识

若要将用户分配的标识分配给 VM,你的帐户需要虚拟机参与者托管标识操作员角色分配。 不需要其他 Microsoft Entra 目录角色分配。

  1. 请参阅以下 Azure VM 快速入门之一,仅完成必要部分(“登录到 Azure”、“创建资源组”、“创建网络组”、“创建 VM”)。

    转到“创建 VM”部分时,需要对 New-AzVMConfig cmdlet 语法稍做修改。 添加 -IdentityType UserAssigned-IdentityID 参数,为 VM 预配用户分配的标识。 将 <VM NAME><SUBSCRIPTION ID><RESROURCE GROUP><USER ASSIGNED IDENTITY NAME> 替换为自己的值。 例如:

    $vmConfig = New-AzVMConfig -VMName <VM NAME> -IdentityType UserAssigned -IdentityID "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESROURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>..."
    

向现有 Azure VM 分配用户分配托管标识

若要将用户分配的标识分配给 VM,你的帐户需要虚拟机参与者托管标识操作员角色分配。 不需要其他 Microsoft Entra 目录角色分配。

  1. 使用 New-AzUserAssignedIdentity cmdlet 创建用户分配的托管标识。 请记下输出中的 Id,因为下一步需用到此信息。

    重要

    创建用户分配的托管标识时仅支持字母数字、下划线和连字符(0-9 或 a-z 或 A-Z、_ 或 -)字符。 此外,名称的长度应限制为 3 到 128 个字符,这样分配给 VM/VMSS 才能正常工作。 有关详细信息,请参阅 FAQ 和已知问题

    New-AzUserAssignedIdentity -ResourceGroupName <RESOURCEGROUP> -Name <USER ASSIGNED IDENTITY NAME>
    
  2. 使用 Get-AzVM cmdlet 检索 VM 属性。 然后,若要向 Azure VM 分配用户分配的托管标识,请在 Update-AzVM cmdlet 中使用 -IdentityType-IdentityID 开关。 -IdentityId 参数的值是在上一步中记下的 Id。 将 <VM NAME><SUBSCRIPTION ID><RESROURCE GROUP><USER ASSIGNED IDENTITY NAME> 替换为自己的值。

    警告

    若要保留分配给 VM 的任何以前用户分配的托管标识,请查询 VM 对象的 Identity 属性(例如,$vm.Identity)。 如果返回了任何用户分配的托管标识,请将其添加到以下命令以及要分配给 VM 的新用户分配的托管标识中。

    $vm = Get-AzVM -ResourceGroupName <RESOURCE GROUP> -Name <VM NAME>
    Update-AzVM -ResourceGroupName <RESOURCE GROUP> -VM $vm -IdentityType UserAssigned -IdentityID "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESROURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>"
    

从 Azure VM 中删除用户分配的托管标识

若要从 VM 中删除用户分配的标识,你的帐户需要虚拟机参与者角色分配。

如果 VM 具有多个用户分配的托管标识,则可以使用以下命令将这些标识删除到只剩一个。 请务必将 <RESOURCE GROUP><VM NAME> 参数值替换为自己的值。 <USER ASSIGNED IDENTITY NAME> 是用户分配的托管标识的名称属性,该属性应保留在 VM 上。 可以使用查询来搜索 VM 对象的 Identity 属性来发现此信息。 例如,$vm.Identity

$vm = Get-AzVm -ResourceGroupName myResourceGroup -Name myVm
Update-AzVm -ResourceGroupName myResourceGroup -VirtualMachine $vm -IdentityType UserAssigned -IdentityID <USER ASSIGNED IDENTITY NAME>

如果 VM 没有系统分配的托管标识,而你希望从中删除所有用户分配的托管标识,请使用以下命令:

$vm = Get-AzVm -ResourceGroupName myResourceGroup -Name myVm
Update-AzVm -ResourceGroupName myResourceGroup -VM $vm -IdentityType None

如果 VM 同时具有系统分配的托管标识和用户分配的托管标识,则可通过切换为仅使用系统分配的托管标识,删除所有用户分配的托管标识。

$vm = Get-AzVm -ResourceGroupName myResourceGroup -Name myVm
Update-AzVm -ResourceGroupName myResourceGroup -VirtualMachine $vm -IdentityType "SystemAssigned"

后续步骤