共用方式為


在 Azure 虛擬機器 (VM) 上配置託管標識

Azure 資源的受管理身分識別會在 Microsoft Entra ID 中為 Azure 服務提供自動管理的身分識別。 您可以使用此身分識別來向任何支援 Microsoft Entra 驗證的服務進行驗證,不需要任何您程式碼中的認證。

有關 Azure Policy 定義和詳細資訊的資訊,請參閱使用 Azure Policy 分配託管標識(預覽版)。

在本文中,您將瞭解如何使用 Azure 門戶為 Azure 虛擬機器 (VM) 啟用和禁用系統和使用者分配的託管身份。

先決條件

  • 如果您不熟悉 Azure 資源的受控識別,請參閱 概觀一節
  • 如果您還沒有 Azure 帳戶,請先註冊免費帳戶,再繼續進行。

系統指派的管理身份識別

在本部分中,你將瞭解如何使用 Azure 門戶為 VM 啟用和禁用系統分配的託管標識。

在創建 VM 期間啟用系統分配的託管標識

若要在創建 VM 期間在 VM 上啟用系統分配的託管標識,你的帳戶需要虛擬機 參與者 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

建立 Windows 虛擬機Linux 虛擬機時,請選取 [管理] 索引卷標。

在 [身分識別] 區段中,選取 [啟用系統指派的受控識別] 複選框。

屏幕截圖顯示了如何在 VM 建立期間啟用系統分配的標識。

在現有 VM 上啟用系統分配的託管標識

若要在最初預配時未預配的系統分配的託管標識的 VM 上啟用系統分配的託管標識,你的帳戶需要虛擬機 參與者 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 使用與包含 VM 的 Azure 訂閱關聯的帳戶登錄到 Azure 門戶

  2. 流覽至所需的虛擬機,然後在 [安全性] 區段中,選取 [身分識別]。

  3. System assigned, Status (系統分配)、Status (狀態) 下,選擇 On (打開),然後按兩下 Save (保存):

    螢幕快照顯示 [身分識別] 頁面,且 [系統指派的狀態] 設定為 [開啟]。

從 VM 中刪除系統分配的託管標識

若要從 VM 中刪除系統分配的託管標識,你的帳戶需要分配虛擬機 參與者 角色。 不需要其他 Microsoft Entra 目錄角色指派。

如果你的虛擬機不再需要系統分配的託管標識:

  1. 使用與包含 VM 的 Azure 訂閱關聯的帳戶登錄到 Azure 門戶

  2. 流覽至所需的虛擬機,然後在 [安全性] 區段中,選取 [身分識別]。

  3. System assigned, Status 下,選擇 Off ,然後按兩下 Save

    配置頁面的屏幕截圖。

使用者指派的受管理的身分識別

在本部分中,你將瞭解如何使用 Azure 門戶在 VM 中添加和刪除使用者分配的託管標識。

在創建 VM 期間分配使用者分配的標識

若要將使用者分配的標識分配給 VM,你的帳戶需要虛擬機 參與者託管標識作員 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

目前,Azure 門戶不支援在創建 VM 期間分配使用者分配的託管標識。 首先,建立 Windows 虛擬機Linux 虛擬機,然後將使用者指派的受控身分識別指派給 VM。

將使用者分配的託管標識分配給現有 VM

若要將使用者分配的標識分配給 VM,你的帳戶需要虛擬機 參與者託管標識作員 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 使用與包含 VM 的 Azure 訂閱關聯的帳戶登錄到 Azure 門戶

  2. 流覽至所需的 VM,然後按兩下 [安全性>身分識別]、[使用者指派],然後 [+新增]。 按兩下要添加到 VM 的使用者分配的標識,然後按下 Add

  3. 從清單中選取先前建立的 使用者分配的管理識別

    螢幕快照,其中顯示已選取 [使用者指派] 的 [身分識別] 頁面,並醒目提示 [新增] 按鈕。

從 VM 中刪除使用者分配的託管標識

若要從 VM 中刪除使用者分配的標識,你的帳戶需要虛擬機 參與者 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

使用與包含 VM 的 Azure 訂閱關聯的帳戶登錄到 Azure 門戶

流覽至所需的 VM,然後選取 [安全性>身分識別]、[使用者指派]、並選擇您要刪除的使用者指派受控識別名稱,然後按一下 [移除](在確認窗格中按一下 [])。

顯示如何從 VM 移除使用者指派受控識別的螢幕快照。

後續步驟

在本文中,你將使用 Azure CLI 瞭解如何在 Azure VM 上為 Azure 資源作執行以下託管標識:

  • 在 Azure VM 上啟用和禁用系統分配的託管標識
  • 在 Azure VM 上添加和刪除使用者分配的託管標識

如果您還沒有 Azure 帳戶,請先註冊免費帳戶,再繼續進行。

先決條件

系統指派的管理身份識別

在本部分中,您將瞭解如何使用 Azure CLI 在 Azure VM 上啟用和禁用系統分配的託管標識。

在創建 Azure VM 期間啟用系統分配的託管標識

若要創建啟用了系統分配的託管標識的 Azure VM,你的帳戶需要分配 “虛擬機參與者” 角色。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 使用 az group create 建立用於包含和部署 VM 及其相關資源的資源組。 如果您已經有想要改用的資源組,則可以跳過此步驟:

    az group create --name myResourceGroup --location westus
    
  2. 使用 az vm create 建立 VM。 以下範例根據參數的請求,使用系統分配的託管標識創建名為 --assign-identity 的 VM,並指定 --role--scope--admin-username--admin-password 參數會指定虛擬機器登入的系統管理使用者名稱和密碼帳戶。 根據您的環境更新這些值:

    az vm create --resource-group myResourceGroup --name myVM --image win2016datacenter --generate-ssh-keys --assign-identity --role contributor --scope /Subscriptions/mySubscriptionId/resourceGroups/myResourceGroup --admin-username azureuser --admin-password myPassword12
    

在現有 Azure VM 上啟用系統分配的託管標識

若要在 VM 上啟用系統分配的託管標識,你的帳戶需要分配 「虛擬機參與者」 角色。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 如果您在本地控制台中使用 Azure CLI,請先使用 az login 登錄到 Azure。 使用與包含 VM 的 Azure 訂閱關聯的帳戶。

    az login
    
  2. az vm identity assignidentity assign 命令 enable the system-assigned identity to an existing VM 結合使用:

    az vm identity assign -g myResourceGroup -n myVm
    

從 Azure VM 禁用系統分配的標識

若要在 VM 上禁用系統分配的託管標識,你的帳戶需要虛擬機 參與者 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

如果您的虛擬機不再需要系統分配的標識,但仍需要使用者分配的標識,請使用以下命令:

az vm update -n myVM -g myResourceGroup --set identity.type='UserAssigned' 

如果您的虛擬機器不再需要系統分配的標識,並且沒有使用者分配的標識,請使用以下命令:

備註

該值 none 區分大小寫。 它必須是小寫的。

az vm update -n myVM -g myResourceGroup --set identity.type="none"

使用者指派的受管理的身分識別

在本部分中,你將瞭解如何使用 Azure CLI 在 Azure VM 中添加和刪除使用者分配的託管標識。 如果在與 VM 不同的 RG 中創建使用者分配的託管標識。 必須使用託管標識的 URL 將其分配給 VM。 例如:

--identities "/subscriptions/<SUBID>/resourcegroups/<RESROURCEGROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER_ASSIGNED_ID_NAME>"

在創建 Azure VM 期間分配使用者分配的託管標識

若要在創建 VM 期間將使用者分配的標識分配給 VM,你的帳戶需要虛擬機器 參與者託管標識作員 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 如果您已經有要使用的資源組,則可以跳過此步驟。 使用 az group create 建立資源組,用於包含和部署使用者分配的託管標識。 請務必將 and <RESOURCE GROUP> 參數值替換為<LOCATION>您自己的值。 :

    az group create --name <RESOURCE GROUP> --location <LOCATION>
    
  2. 使用 az identity create 創建使用者分配的託管標識。 -g 參數會指定建立使用者指派受控識別的資源群組,而 -n 參數會指定其名稱。

    這很重要

    建立使用者指派的受控識別時,名稱必須以字母或數字開頭,並且包含英數字元、連字號 (-) 和底線 (_) 的組合。 若要讓虛擬機器或虛擬機器擴展集的指派正常運作,名稱長度上限為 24 個字元。 如需詳細資訊,請參閱 常見問題和已知問題

    az identity create -g myResourceGroup -n myUserAssignedIdentity
    

    回應包含創建的使用者分配的託管標識的詳細資訊,類似於以下內容。 以下步驟使用分配給使用者分配的託管標識的資源ID值。

    {
        "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
        "clientSecretUrl": "https://control-westcentralus.identity.azure.net/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<myUserAssignedIdentity>/credentials?tid=5678&oid=9012&aid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "id": "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>",
        "location": "westcentralus",
        "name": "<USER ASSIGNED IDENTITY NAME>",
        "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
        "resourceGroup": "<RESOURCE GROUP>",
        "tags": {},
        "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
        "type": "Microsoft.ManagedIdentity/userAssignedIdentities"    
    }
    
  3. 使用 az vm create 建立 VM。 以下範例使用指定的 --assign-identity--role創建與新的使用者分配身份關聯的 VM,如參數所指定--scope。 請務必將、 、 、 <RESOURCE GROUP><VM NAME><USER NAME><PASSWORD><USER ASSIGNED IDENTITY NAME><ROLE> 參數值取代為<SUBSCRIPTION>您自己的值。

    az vm create --resource-group <RESOURCE GROUP> --name <VM NAME> --image <SKU linux image>  --admin-username <USER NAME> --admin-password <PASSWORD> --assign-identity <USER ASSIGNED IDENTITY NAME> --role <ROLE> --scope <SUBSCRIPTION> 
    

將使用者分配的託管標識分配給現有 Azure VM

若要將使用者分配的標識分配給 VM,你的帳戶需要虛擬機 參與者託管標識作員 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 使用 az identity create 創建使用者分配的標識。 該 -g 參數指定在其中創建使用者分配的標識的資源組,參數指定 -n 其名稱。 請務必將 and <RESOURCE GROUP> 參數值替換為<USER ASSIGNED IDENTITY NAME>您自己的值:

    這很重要

    目前不支援創建名稱中包含特殊字元(即下劃線)的使用者分配的託管身份。 請使用字母數位字元。 請回來查看更新。 有關更多資訊,請參閱 常見問題和已知問題

    az identity create -g <RESOURCE GROUP> -n <USER ASSIGNED IDENTITY NAME>
    

    回應包含創建的使用者分配的託管標識的詳細資訊,類似於以下內容。

    {
      "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "clientSecretUrl": "https://control-westcentralus.identity.azure.net/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/credentials?tid=5678&oid=9012&aid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
      "id": "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>",
      "location": "westcentralus",
      "name": "<USER ASSIGNED IDENTITY NAME>",
      "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
      "resourceGroup": "<RESOURCE GROUP>",
      "tags": {},
      "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"    
    }
    
  2. 使用 az vm identity assign 將使用者分配的標識分配給 VM。 請務必將 and <RESOURCE GROUP> 參數值替換為<VM NAME>您自己的值。 這是 <USER ASSIGNED IDENTITY NAME> 使用者分配的託管標識的 resource name 屬性,如上一步中創建的。 如果在與 VM 不同的 RG 中創建了使用者分配的託管標識。 您必須使用託管身份的 URL。

    az vm identity assign -g <RESOURCE GROUP> -n <VM NAME> --identities <USER ASSIGNED IDENTITY>
    

從 Azure VM 中刪除使用者分配的託管標識

若要刪除使用者分配的標識到 VM,你的帳戶需要虛擬機 參與者 角色分配。

如果這是分配給虛擬機的唯一使用者分配的託管標識, UserAssigned 則會從標識類型值中刪除該標識。 請務必將 and <RESOURCE GROUP> 參數值替換為<VM NAME>您自己的值。 這將 <USER ASSIGNED IDENTITY> 是使用者分配的標識的屬性 name ,可以使用以下方法 az vm identity show在虛擬機的 identity 部分中找到該屬性:

az vm identity remove -g <RESOURCE GROUP> -n <VM NAME> --identities <USER ASSIGNED IDENTITY>

如果 VM 沒有系統分配的託管標識,並且你想要從中刪除所有使用者分配的標識,請使用以下命令:

備註

該值 none 區分大小寫。 它必須是小寫的。

az vm update -n myVM -g myResourceGroup --set identity.type="none" identity.userAssignedIdentities=null

如果您的 VM 同時具有系統分配的標識和使用者分配的標識,則可以通過切換為僅使用系統分配的標識來刪除所有使用者分配的標識。 使用下列命令:

az vm update -n myVM -g myResourceGroup --set identity.type='SystemAssigned' identity.userAssignedIdentities=null 

後續步驟

在本文中,你將瞭解如何使用 PowerShell 對 Azure VM 上的 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 屬性。 然後,若要啟用系統分配的託管標識,請使用 -IdentityTypeUpdate-AzVM cmdlet 上的開關:

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

將 VM 系統分配的標識添加到組

在 VM 上啟用系統分配的標識後,可以將其添加到組中。 以下過程將 VM 的系統分配身份添加到組。

  1. 檢索並記下 ObjectID VM 的服務主體的 (在返回值的欄位中指定 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 屬性,並將參數設置為-IdentityTypeUserAssigned

    $vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
    Update-AzVm -ResourceGroupName myResourceGroup -VM $vm -IdentityType "UserAssigned" -IdentityID "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE 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添加 and -IdentityID 參數以使用使用者分配的標識預配 VM。 將、<VM NAME><SUBSCRIPTION ID><RESOURCE GROUP> 取代為<USER ASSIGNED IDENTITY NAME>您自己的值。 例如:

    $vmConfig = New-AzVMConfig -VMName <VM NAME> -IdentityType UserAssigned -IdentityID "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE 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 正常工作。 有關更多資訊,請參閱 常見問題和已知問題

    New-AzUserAssignedIdentity -ResourceGroupName <RESOURCEGROUP> -Name <USER ASSIGNED IDENTITY NAME>
    
  2. 使用 Get-AzVM cmdlet 檢索 VM 屬性。 然後,若要將使用者分配的託管標識分配給 Azure VM,請使用 -IdentityType-IdentityID cmdlet 上的 和開關。 該-IdentityId 參數的值是 Id 您在上一步中記下的值。 將、 、 <VM NAME><SUBSCRIPTION ID><RESOURCE GROUP> 取代為<USER ASSIGNED IDENTITY NAME>您自己的值。

    警告

    要保留以前分配給 VM 的任何使用者分配的託管身份,請查詢 Identity VM 物件的屬性(例如)。 $vm.Identity 如果返回任何使用者分配的託管標識,請將它們與要分配給 VM 的新使用者分配的託管標識一起包含在以下命令中。

    $vm = Get-AzVM -ResourceGroupName <RESOURCE GROUP> -Name <VM NAME>
    
    # Get the list of existing identity IDs and then append to it
    $identityIds = $vm.Identity.UserAssignedIdentities.Keys
    $uid = "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>"
    $identityIds = $identityIds + $uid 
    
    # Update the VM with added identity IDs
    Update-AzVM -ResourceGroupName <RESOURCE GROUP> -VM $vm -IdentityType UserAssigned -IdentityID $uid 
    

從 Azure VM 中刪除使用者分配的託管標識

若要刪除使用者分配的標識到 VM,你的帳戶需要虛擬機 參與者 角色分配。

如果 VM 具有多個使用者分配的託管標識,則可以使用以下命令刪除除最後一個標識之外的所有標識。 請務必將 and <RESOURCE GROUP> 參數值替換為<VM NAME>您自己的值。 這是 <USER ASSIGNED IDENTITY NAME> 使用者分配的託管標識的 name 屬性,該屬性應保留在 VM 上。 可以使用查詢來搜索 Identity VM 物件的屬性來發現此資訊。 例如,$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"

後續步驟

在本文中,使用 Azure Resource Manager 部署範本,瞭解如何在 Azure VM 上對 Azure 資源作執行以下託管標識:

先決條件

Azure 資源管理員範本

與 Azure 門戶和腳本一樣, Azure 資源管理器 範本允許您部署由 Azure 資源組定義的新資源或修改的資源。 有幾個選項可用於範本編輯和部署,包括本地和基於門戶,包括:

無論選擇哪個選項,範本語法在初始部署和重新部署期間都是相同的。 在新 VM 或現有 VM 上啟用系統或使用者分配的託管標識的方式相同。 此外,預設情況下,Azure Resource Manager 會對部署執行 增量更新

系統指派的管理身份識別

在本部分中,你將使用 Azure 資源管理器範本啟用和禁用系統分配的託管標識。

在創建 Azure VM 期間或在現有 VM 上啟用系統分配的託管標識

若要在 VM 上啟用系統分配的託管標識,你的帳戶需要分配 「虛擬機參與者」 角色。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 無論您是在本機登入 Azure 或透過 Azure 入口網站登入,都請使用與包含虛擬機器的 Azure 訂用帳戶相關聯的帳戶。

  2. 若要啟用系統指派的受控識別,請將範本載入到編輯器、在 Microsoft.Compute/virtualMachines 區段中找出感興趣的 resources 資源,然後在與 "identity" 屬性相同的層級上新增 "type": "Microsoft.Compute/virtualMachines" 屬性。 使用下列語法:

    "identity": {
        "type": "SystemAssigned"
    },
    
  3. 完成後,應將以下部分添加到範本的 resource 部分中,它應類似於以下內容:

     "resources": [
         {
             //other resource provider properties...
             "apiVersion": "2018-06-01",
             "type": "Microsoft.Compute/virtualMachines",
             "name": "[variables('vmName')]",
             "location": "[resourceGroup().location]",
             "identity": {
                 "type": "SystemAssigned",
                 }                        
         }
     ]
    

為 VM 分配系統分配的託管標識

在 VM 上啟用系統分配的託管標識後,可能需要向其授予一個角色,例如對在其中創建該標識的資源組的 讀取者 訪問許可權。 可以在 使用 Azure 資源管理器範本分配 Azure 角色 一文中找到有助於完成此步驟的詳細資訊。

從 Azure VM 禁用系統分配的託管標識

若要從 VM 中刪除系統分配的託管標識,你的帳戶需要分配虛擬機 參與者 角色。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 無論您是在本機登入 Azure 或透過 Azure 入口網站登入,都請使用與包含虛擬機器的 Azure 訂用帳戶相關聯的帳戶。

  2. 將範本載入到編輯器中,並在該Microsoft.Compute/virtualMachines部分中找到resources感興趣的資源。 如果你的 VM 只有系統分配的託管標識,則可以通過將標識類型更改為 None來禁用它。

    Microsoft.Compute/virtualMachines API 版本 2018-06-01

    如果您的 VM 同時具有系統分配的託管身份和使用者分配的託管身份,請從身份類型中刪除SystemAssigned並保留UserAssigneduserAssignedIdentities字典值。

    Microsoft.Compute/virtualMachines API 版本 2018-06-01

    如果您的 apiVersion VM 2017-12-01 同時具有系統分配的託管身份和使用者分配的託管身份,請從身份類型中刪除SystemAssigned,並保留UserAssignedidentityIds使用者分配的託管身份的數位。

以下範例演示如何從沒有使用者分配的託管標識的 VM 中移除系統分配的託管識別:

{
    "apiVersion": "2018-06-01",
    "type": "Microsoft.Compute/virtualMachines",
    "name": "[parameters('vmName')]",
    "location": "[resourceGroup().location]",
    "identity": {
        "type": "None"
    }
}

使用者指派的受管理的身分識別

在本部分中,你將使用 Azure 資源管理器範本將使用者分配的託管標識分配給 Azure VM。

備註

若要使用 Azure 資源管理器範本創建使用者分配的託管標識,請參閱 創建使用者分配的託管標識

將使用者分配的託管標識分配給 Azure VM

若要將使用者分配的標識分配給 VM,帳戶需要分配 託管標識作員 角色。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 在該 resources 元素下,添加以下條目,以將使用者分配的託管標識分配給 VM。 請務必替換為 <USERASSIGNEDIDENTITY> 你創建的使用者分配的託管標識的名稱。

    Microsoft.Compute/virtualMachines API 版本 2018-06-01

    如果是 apiVersion2018-06-01,則使用者分配的託管身份以 userAssignedIdentities 字典格式存儲, <USERASSIGNEDIDENTITYNAME> 並且值必須存儲在範本部分中定義的 variables 變數中。

     {
         "apiVersion": "2018-06-01",
         "type": "Microsoft.Compute/virtualMachines",
         "name": "[variables('vmName')]",
         "location": "[resourceGroup().location]",
         "identity": {
             "type": "userAssigned",
             "userAssignedIdentities": {
                 "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('<USERASSIGNEDIDENTITYNAME>'))]": {}
             }
         }
     }
    

    Microsoft.Compute/virtualMachines API 版本 2017-12-01

    如果是 apiVersion2017-12-01則使用者分配的託管身份存儲在數位中 identityIds ,並且 <USERASSIGNEDIDENTITYNAME> 該值必須存儲在範本部分中定義的 variables 變數中。

    {
        "apiVersion": "2017-12-01",
        "type": "Microsoft.Compute/virtualMachines",
        "name": "[variables('vmName')]",
        "location": "[resourceGroup().location]",
        "identity": {
            "type": "userAssigned",
            "identityIds": [
                "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('<USERASSIGNEDIDENTITYNAME>'))]"
            ]
        }
    }
    
  2. 完成後,應將以下部分添加到範本的 resource 部分中,它應類似於以下內容:

    Microsoft.Compute/virtualMachines API 版本 2018-06-01

      "resources": [
         {
             //other resource provider properties...
             "apiVersion": "2018-06-01",
             "type": "Microsoft.Compute/virtualMachines",
             "name": "[variables('vmName')]",
             "location": "[resourceGroup().location]",
             "identity": {
                 "type": "userAssigned",
                 "userAssignedIdentities": {
                    "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('<USERASSIGNEDIDENTITYNAME>'))]": {}
                 }
             }
         }
     ] 
    

    Microsoft.Compute/virtualMachines API 版本 2017-12-01

    "resources": [
         {
             //other resource provider properties...
             "apiVersion": "2017-12-01",
             "type": "Microsoft.Compute/virtualMachines",
             "name": "[variables('vmName')]",
             "location": "[resourceGroup().location]",
             "identity": {
                 "type": "userAssigned",
                 "identityIds": [
                    "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('<USERASSIGNEDIDENTITYNAME>'))]"
                 ]
             }
         }
    ]
    

從 Azure VM 中刪除使用者分配的託管標識

若要從 VM 中刪除使用者分配的標識,你的帳戶需要虛擬機 參與者 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 無論您是在本機登入 Azure 或透過 Azure 入口網站登入,都請使用與包含虛擬機器的 Azure 訂用帳戶相關聯的帳戶。

  2. 將範本載入到編輯器中,並在該Microsoft.Compute/virtualMachines部分中找到resources感興趣的資源。 如果你的 VM 只有使用者分配的託管標識,則可以通過將標識類型更改為 None來禁用它。

    以下範例演示如何從沒有系統分配的託管標識的 VM 中刪除所有使用者分配的託管識別:

     {
       "apiVersion": "2018-06-01",
       "type": "Microsoft.Compute/virtualMachines",
       "name": "[parameters('vmName')]",
       "location": "[resourceGroup().location]",
       "identity": {
           "type": "None"
           },
     }
    

    Microsoft.Compute/virtualMachines API 版本 2018-06-01

    若要從 VM 中刪除單個使用者分配的託管標識,請將其從 userAssignedIdentities 字典中刪除。

    如果您有系統分配的託管標識,請將其保留在值下的 value 中typeidentity

    Microsoft.Compute/virtualMachines API 版本 2017-12-01

    若要從 VM 中刪除單個使用者分配的託管標識,請將其從 identityIds 陣列中刪除。

    如果您有系統分配的託管標識,請將其保留在值下的 value 中typeidentity

後續步驟

在本文中,使用 CURL 調用 Azure 資源管理器 REST 終結點,你將瞭解如何在 Azure VM 上對 Azure 資源作執行以下託管標識:

  • 在 Azure VM 上啟用和禁用系統分配的託管標識
  • 在 Azure VM 上添加和刪除使用者分配的託管標識

如果您還沒有 Azure 帳戶,請先註冊免費帳戶,再繼續進行。

先決條件

系統指派的管理身份識別

在本部分中,你將瞭解如何使用 CURL 在 Azure VM 上啟用和禁用系統分配的託管標識,以調用 Azure 資源管理員 REST 終結點。

在創建 Azure VM 期間啟用系統分配的託管標識

若要創建啟用了系統分配的託管標識的 Azure VM,你的帳戶需要分配 “虛擬機參與者” 角色。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 使用 az group create 建立用於包含和部署 VM 及其相關資源的資源組。 如果您已經有想要改用的資源組,則可以跳過此步驟:

    az group create --name myResourceGroup --location westus
    
  2. 為您的 VM 建立 網路介面

     az network nic create -g myResourceGroup --vnet-name myVnet --subnet mySubnet -n myNic
    
  3. 檢索 Bearer 訪問令牌,您將在下一步的 Authorization 標頭中使用該令牌,以使用系統分配的託管標識創建 VM。

    az account get-access-token
    
  4. 使用 Azure Cloud Shell,使用 CURL 創建 VM 以調用 Azure 資源管理員 REST 終結點。 以下示例使用系統分配的託管標識創建名為 myVM 的 VM,該標識在請求正文中由值 "identity":{"type":"SystemAssigned"}標識。 替換為 <ACCESS TOKEN> 您在上一步中請求 Bearer 訪問令牌時收到的值,以及 <SUBSCRIPTION ID> 適合您環境的值。

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01' -X PUT -d '{"location":"westus","name":"myVM","identity":{"type":"SystemAssigned"},"properties":{"hardwareProfile":{"vmSize":"Standard_D2_v2"},"storageProfile":{"imageReference":{"sku":"2016-Datacenter","publisher":"MicrosoftWindowsServer","version":"latest","offer":"WindowsServer"},"osDisk":{"caching":"ReadWrite","managedDisk":{"storageAccountType":"StandardSSD_LRS"},"name":"myVM3osdisk","createOption":"FromImage"},"dataDisks":[{"diskSizeGB":1023,"createOption":"Empty","lun":0},{"diskSizeGB":1023,"createOption":"Empty","lun":1}]},"osProfile":{"adminUsername":"azureuser","computerName":"myVM","adminPassword":"<SECURE PASSWORD STRING>"},"networkProfile":{"networkInterfaces":[{"id":"/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic","properties":{"primary":true}}]}}}' -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
    
    PUT https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

      {
        "location":"westus",
        "name":"myVM",
        "identity":{
           "type":"SystemAssigned"
        },
        "properties":{
           "hardwareProfile":{
              "vmSize":"Standard_D2_v2"
           },
           "storageProfile":{
              "imageReference":{
                 "sku":"2016-Datacenter",
                 "publisher":"MicrosoftWindowsServer",
                 "version":"latest",
                 "offer":"WindowsServer"
              },
              "osDisk":{
                 "caching":"ReadWrite",
                 "managedDisk":{
                    "storageAccountType":"StandardSSD_LRS"
                 },
                 "name":"myVM3osdisk",
                 "createOption":"FromImage"
              },
              "dataDisks":[
                 {
                    "diskSizeGB":1023,
                    "createOption":"Empty",
                    "lun":0
                 },
                 {
                    "diskSizeGB":1023,
                    "createOption":"Empty",
                    "lun":1
                 }
              ]
           },
           "osProfile":{
              "adminUsername":"azureuser",
              "computerName":"myVM",
              "adminPassword":"myPassword12"
           },
           "networkProfile":{
              "networkInterfaces":[
                 {
                    "id":"/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic",
                    "properties":{
                       "primary":true
                    }
                 }
              ]
           }
        }
     }  
    

在現有 Azure VM 上啟用系統分配的標識

若要在最初預配時未預配的系統分配的託管標識的 VM 上啟用系統分配的託管標識,你的帳戶需要虛擬機 參與者 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 檢索 Bearer 訪問令牌,您將在下一步的 Authorization 標頭中使用該令牌,以使用系統分配的託管標識創建 VM。

    az account get-access-token
    
  2. 使用以下 CURL 命令調用 Azure 資源管理員 REST 終結點,以在 VM 上啟用系統分配的託管標識,如請求正文中名為 {"identity":{"type":"SystemAssigned"} 的 VM 的值標識。 替換為 <ACCESS TOKEN> 您在上一步中請求 Bearer 訪問令牌時收到的值,以及 <SUBSCRIPTION ID> 適合您環境的值。

    這很重要

    要確保不會刪除分配給 VM 的任何現有使用者分配的託管標識,您需要使用以下 CURL 命令列出使用者分配的託管標識: curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/virtualMachines/<VM NAME>?api-version=2018-06-01' -H "Authorization: Bearer <ACCESS TOKEN>"。 如果已將任何使用者分配的託管標識分配給 VM(如回應中的值所示 identity ),請跳至步驟 3,該步驟演示如何在 VM 上啟用系統分配的託管標識時保留使用者分配的託管標識。

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01' -X PATCH -d '{"identity":{"type":"SystemAssigned"}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
    
    PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {  
        "identity":{  
           "type":"SystemAssigned"
        }
     }
    
  3. 若要在具有現有使用者分配的託管標識的 VM 上啟用系統分配的託管標識,需要將SystemAssigned該值添加type為「系統分配的託管標識」。

    例如,如果你的 VM 具有使用者分配的託管標識 ID1ID2 分配給它,並且你想要將系統分配的託管標識添加到 VM,請使用以下 CURL 調用。 將 <ACCESS TOKEN> and <SUBSCRIPTION ID> 替換為適合您環境的值。

    API 版本 2018-06-01 以字典格式將使用者分配的託管身份 userAssignedIdentities 儲存在值中,而不是 identityIds 以 API 版本 2017-12-01中使用的數位格式儲存值。

    API 版本 2018-06-01

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01' -X PATCH -d '{"identity":{"type":"SystemAssigned, UserAssigned", "userAssignedIdentities":{"/subscriptions/<<SUBSCRIPTION ID>>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1":{},"/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID2":{}}}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
    
    PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {  
        "identity":{  
           "type":"SystemAssigned, UserAssigned",
           "userAssignedIdentities":{  
              "/subscriptions/<<SUBSCRIPTION ID>>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1":{  
    
              },
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID2":{  
    
              }
           }
        }
     }
    

    API 版本 2017-12-01

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2017-12-01' -X PATCH -d '{"identity":{"type":"SystemAssigned, UserAssigned", "identityIds":["/subscriptions/<<SUBSCRIPTION ID>>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1","/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID2"]}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
    
    PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2017-12-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {  
        "identity":{  
           "type":"SystemAssigned, UserAssigned",
           "identityIds":[  
              "/subscriptions/<<SUBSCRIPTION ID>>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1",
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID2"
           ]
        }
     }
    

從 Azure VM 禁用系統分配的託管標識

若要在 VM 上禁用系統分配的託管標識,你的帳戶需要虛擬機 參與者 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 檢索 Bearer 訪問令牌,您將在下一步的 Authorization 標頭中使用該令牌,以使用系統分配的託管標識創建 VM。

    az account get-access-token
    
  2. 使用 CURL 更新 VM,以調用 Azure 資源管理器 REST 終結點,以禁用系統分配的託管標識。 以下示例禁用系統分配的託管標識,該標識在請求正文中由名為 {"identity":{"type":"None"}} 的 VM 中的值標識。 替換為 <ACCESS TOKEN> 您在上一步中請求 Bearer 訪問令牌時收到的值,以及 <SUBSCRIPTION ID> 適合您環境的值。

    這很重要

    要確保不會刪除分配給 VM 的任何現有使用者分配的託管標識,您需要使用以下 CURL 命令列出使用者分配的託管標識: curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/virtualMachines/<VM NAME>?api-version=2018-06-01' -H "Authorization: Bearer <ACCESS TOKEN>"。 如果已將任何使用者分配的託管標識分配給 VM(如回應中的值所示 identity ),請跳至步驟 3,該步驟演示如何在 VM 上禁用系統分配的託管標識時保留使用者分配的託管標識。

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01' -X PATCH -d '{"identity":{"type":"None"}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
    
    PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {  
        "identity":{  
           "type":"None"
        }
     }
    

    要從具有使用者分配的託管標識的虛擬機中刪除系統分配的託管標識,請從值中刪除SystemAssigned{"identity":{"type:" "}},同時保留UserAssigned值和userAssignedIdentities字典值(如果您使用的是 API 版本 2018-06-01)。 如果您使用的是 API 版本 2017-12-01 或更早版本,請保留 identityIds 數位。

使用者指派的受管理的身分識別

在本部分中,你將瞭解如何使用 CURL 在 Azure VM 上添加和刪除使用者分配的託管標識,以調用 Azure 資源管理器 REST 終結點。

在創建 Azure VM 期間分配使用者分配的託管標識

若要將使用者分配的標識分配給 VM,你的帳戶需要虛擬機 參與者託管標識作員 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 檢索 Bearer 訪問令牌,您將在下一步的 Authorization 標頭中使用該令牌,以使用系統分配的託管標識創建 VM。

    az account get-access-token
    
  2. 為您的 VM 建立 網路介面

     az network nic create -g myResourceGroup --vnet-name myVnet --subnet mySubnet -n myNic
    
  3. 檢索 Bearer 訪問令牌,您將在下一步的 Authorization 標頭中使用該令牌,以使用系統分配的託管標識創建 VM。

    az account get-access-token
    
  4. 按照此處的說明創建使用者分配的託管 標識:創建使用者分配的託管標識

  5. 使用 CURL 建立 VM 以調用 Azure 資源管理器 REST 終結點。 以下示例在資源組 myResourceGroup 中創建一個名為 myVM 的 VM,該 VM 具有使用者分配的託管標識ID1,在請求正文中由值"identity":{"type":"UserAssigned"}標識。 替換為 <ACCESS TOKEN> 您在上一步中請求 Bearer 訪問令牌時收到的值,以及 <SUBSCRIPTION ID> 適合您環境的值。

    API 版本 2018-06-01

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01' -X PUT -d '{"location":"westus","name":"myVM","identity":{"type":"UserAssigned","identityIds":["/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"]},"properties":{"hardwareProfile":{"vmSize":"Standard_D2_v2"},"storageProfile":{"imageReference":{"sku":"2016-Datacenter","publisher":"MicrosoftWindowsServer","version":"latest","offer":"WindowsServer"},"osDisk":{"caching":"ReadWrite","managedDisk":{"storageAccountType":"StandardSSD_LRS"},"name":"myVM3osdisk","createOption":"FromImage"},"dataDisks":[{"diskSizeGB":1023,"createOption":"Empty","lun":0},{"diskSizeGB":1023,"createOption":"Empty","lun":1}]},"osProfile":{"adminUsername":"azureuser","computerName":"myVM","adminPassword":"myPassword12"},"networkProfile":{"networkInterfaces":[{"id":"/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic","properties":{"primary":true}}]}}}' -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
    
    PUT https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {  
        "location":"westus",
        "name":"myVM",
        "identity":{  
           "type":"UserAssigned",
           "identityIds":[  
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"
           ]
        },
        "properties":{  
           "hardwareProfile":{  
              "vmSize":"Standard_D2_v2"
           },
           "storageProfile":{  
              "imageReference":{  
                 "sku":"2016-Datacenter",
                 "publisher":"MicrosoftWindowsServer",
                 "version":"latest",
                 "offer":"WindowsServer"
              },
              "osDisk":{  
                 "caching":"ReadWrite",
                 "managedDisk":{  
                    "storageAccountType":"StandardSSD_LRS"
                 },
                 "name":"myVM3osdisk",
                 "createOption":"FromImage"
              },
              "dataDisks":[  
                 {  
                    "diskSizeGB":1023,
                    "createOption":"Empty",
                    "lun":0
                 },
                 {  
                    "diskSizeGB":1023,
                    "createOption":"Empty",
                    "lun":1
                 }
              ]
           },
           "osProfile":{  
              "adminUsername":"azureuser",
              "computerName":"myVM",
              "adminPassword":"myPassword12"
           },
           "networkProfile":{  
              "networkInterfaces":[  
                 {  
                    "id":"/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic",
                    "properties":{  
                       "primary":true
                    }
                 }
              ]
           }
        }
     }
    
    

    API 版本 2017-12-01

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2017-12-01' -X PUT -d '{"location":"westus","name":"myVM","identity":{"type":"UserAssigned","identityIds":["/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"]},"properties":{"hardwareProfile":{"vmSize":"Standard_D2_v2"},"storageProfile":{"imageReference":{"sku":"2016-Datacenter","publisher":"MicrosoftWindowsServer","version":"latest","offer":"WindowsServer"},"osDisk":{"caching":"ReadWrite","managedDisk":{"storageAccountType":"StandardSSD_LRS"},"name":"myVM3osdisk","createOption":"FromImage"},"dataDisks":[{"diskSizeGB":1023,"createOption":"Empty","lun":0},{"diskSizeGB":1023,"createOption":"Empty","lun":1}]},"osProfile":{"adminUsername":"azureuser","computerName":"myVM","adminPassword":"myPassword12"},"networkProfile":{"networkInterfaces":[{"id":"/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic","properties":{"primary":true}}]}}}' -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
    
    PUT https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2017-12-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {
        "location":"westus",
        "name":"myVM",
        "identity":{
           "type":"UserAssigned",
           "identityIds":[
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"
           ]
        },
        "properties":{
           "hardwareProfile":{
              "vmSize":"Standard_D2_v2"
           },
           "storageProfile":{
              "imageReference":{
                 "sku":"2016-Datacenter",
                 "publisher":"MicrosoftWindowsServer",
                 "version":"latest",
                 "offer":"WindowsServer"
              },
              "osDisk":{
                 "caching":"ReadWrite",
                 "managedDisk":{
                    "storageAccountType":"StandardSSD_LRS"
                 },
                 "name":"myVM3osdisk",
                 "createOption":"FromImage"
              },
              "dataDisks":[
                 {
                    "diskSizeGB":1023,
                    "createOption":"Empty",
                    "lun":0
                 },
                 {
                    "diskSizeGB":1023,
                    "createOption":"Empty",
                    "lun":1
                 }
              ]
           },
           "osProfile":{
              "adminUsername":"azureuser",
              "computerName":"myVM",
              "adminPassword":"myPassword12"
           },
           "networkProfile":{
              "networkInterfaces":[
                 {
                    "id":"/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic",
                    "properties":{
                       "primary":true
                    }
                 }
              ]
           }
        }
     }
    

將使用者分配的託管標識分配給現有 Azure VM

若要將使用者分配的標識分配給 VM,你的帳戶需要虛擬機 參與者託管標識作員 角色分配。 不需要其他 Microsoft Entra 目錄角色指派。

  1. 檢索 Bearer 訪問令牌,您將在下一步的 Authorization 標頭中使用該令牌,以使用系統分配的託管標識創建 VM。

    az account get-access-token
    
  2. 按照此處的說明創建 使用者分配的託管標識創建使用者分配的託管標識

  3. 為確保不會刪除分配給 VM 的現有使用者或系統分配的託管標識,需要使用以下 CURL 命令列出分配給 VM 的標識類型。 如果已將託管標識分配給虛擬機規模集,則它們將列在 identity 值下。

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/virtualMachines/<VM NAME>?api-version=2018-06-01' -H "Authorization: Bearer <ACCESS TOKEN>" 
    
    GET https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/virtualMachines/<VM NAME>?api-version=2018-06-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    如果已將任何使用者或系統分配的託管標識分配給 VM(如回應中的值所示 identity ),請跳至步驟 5,該步驟演示如何在 VM 上添加使用者分配的託管標識時保留系統分配的託管標識。

  4. 如果沒有為 VM 分配任何使用者分配的託管標識,請使用以下 CURL 命令調用 Azure 資源管理員 REST 終結點,以將第一個使用者分配的託管標識分配給 VM。

    以下示例將使用者分配的託管標識ID1分配給資源組 myResourceGroup 中名為 myVM 的 VM。 替換為 <ACCESS TOKEN> 您在上一步中請求 Bearer 訪問令牌時收到的值,以及 <SUBSCRIPTION ID> 適合您環境的值。

    API 版本 2018-06-01

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01' -X PATCH -d '{"identity":{"type":"UserAssigned", "userAssignedIdentities":{"/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1":{}}}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
    
    PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {
        "identity":{
           "type":"UserAssigned",
           "userAssignedIdentities":{
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1":{
    
              }
           }
        }
     }
    

    API 版本 2017-12-01

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2017-12-01' -X PATCH -d '{"identity":{"type":"userAssigned", "identityIds":["/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"]}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
    
    PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2017-12-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {
        "identity":{
           "type":"userAssigned",
           "identityIds":[
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"
           ]
        }
     }
    
  5. 如果已為 VM 分配了現有的使用者分配或系統分配的託管識別:

    API 版本 2018-06-01

    將使用者分配的託管標識 userAssignedIdentities 添加到字典值。

    例如,如果你有系統分配的託管標識和當前分配給 VM 的使用者分配的託管標識 ID1 ,並且想要將使用者分配的託管標識 ID2 添加到其中:

    curl  'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01' -X PATCH -d '{"identity":{"type":"SystemAssigned, UserAssigned", "userAssignedIdentities":{"/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1":{},"/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID2":{}}}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
    
    PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {
        "identity":{
           "type":"SystemAssigned, UserAssigned",
           "userAssignedIdentities":{
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1":{
    
              },
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID2":{
    
              }
           }
        }
     }
    

    API 版本 2017-12-01

    在添加新的使用者分配的託管標識時,保留要保留在數位值中的 identityIds 使用者分配的託管標識。

    例如,如果你有系統分配的託管標識和當前分配給 VM 的使用者分配的託管標識 ID1 ,並且想要將使用者分配的託管標識 ID2 添加到其中:

    curl  'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2017-12-01' -X PATCH -d '{"identity":{"type":"SystemAssigned,UserAssigned", "identityIds":["/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1","/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID2"]}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
    
    PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2017-12-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {
        "identity":{
           "type":"SystemAssigned,UserAssigned",
           "identityIds":[
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1",
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID2"
           ]
        }
     }
    

從 Azure VM 中刪除使用者分配的託管標識

若要刪除使用者分配的標識到 VM,你的帳戶需要虛擬機 參與者 角色分配。

  1. 檢索 Bearer 訪問令牌,您將在下一步的 Authorization 標頭中使用該令牌,以使用系統分配的託管標識創建 VM。

    az account get-access-token
    
  2. 若要確保不會刪除任何要保持分配給 VM 的現有使用者分配的託管標識或刪除系統分配的託管標識,需要使用以下 CURL 命令列出託管標識:

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/virtualMachines/<VM NAME>?api-version=2018-06-01' -H "Authorization: Bearer <ACCESS TOKEN>"
    
    GET https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/virtualMachines/<VM NAME>?api-version=2018-06-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    如果已將託管標識分配給 VM,則它們將列在值的回應中 identity

    例如,如果你有使用者分配的託管標識 ID1ID2 分配給你的 VM,並且你只想保持 ID1 分配並保留系統分配的標識:

    API 版本 2018-06-01

    新增到 null 要移除的使用者分配的託管識別:

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01' -X PATCH -d '{"identity":{"type":"SystemAssigned, UserAssigned", "userAssignedIdentities":{"/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID2":null}}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
    
    PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {
        "identity":{
           "type":"SystemAssigned, UserAssigned",
           "userAssignedIdentities":{
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID2":null
           }
        }
     }
    

    API 版本 2017-12-01

    只保留您希望保留在陣列中的 identityIds 使用者分配的託管識別:

    curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2017-12-01' -X PATCH -d '{"identity":{"type":"SystemAssigned, UserAssigned", "identityIds":["/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"]}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
    
    PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2017-12-01 HTTP/1.1
    

    請求標頭

    請求標頭 說明
    內容類型 必須的。 設定為 application/json
    授權 必須的。 設定為有效的 Bearer 存取權杖。

    請求主體

     {
        "identity":{
           "type":"SystemAssigned, UserAssigned",
           "identityIds":[
              "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"
           ]
        }
     }
    

如果 VM 同時具有系統分配的託管標識和使用者分配的託管標識,則可以使用以下命令切換為僅使用系統分配的託管標識,從而刪除所有使用者分配的託管標識:

curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01' -X PATCH -d '{"identity":{"type":"SystemAssigned"}}' -H "Content-Type: application/json" -H "Authorization:Bearer <ACCESS TOKEN>"
PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01 HTTP/1.1

請求標頭

請求標頭 說明
內容類型 必須的。 設定為 application/json
授權 必須的。 設定為有效的 Bearer 存取權杖。

請求主體

{
   "identity":{
      "type":"SystemAssigned"
   }
}

如果你的 VM 只有使用者分配的託管標識,並且你想要將其全部刪除,請使用以下命令:

curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01' -X PATCH -d '{"identity":{"type":"None"}}' -H "Content-Type: application/json" -H Authorization:"Bearer <ACCESS TOKEN>"
PATCH https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM?api-version=2018-06-01 HTTP/1.1

請求標頭

請求標頭 說明
內容類型 必須的。 設定為 application/json
授權 必須的。 設定為有效的 Bearer 存取權杖。

請求主體

{
   "identity":{
      "type":"None"
   }
}

後續步驟

有關如何使用 REST 創建、列出或刪除使用者分配的託管身份的資訊,請參閱:

在本文中,您將瞭解如何使用 Azure SDK 為 Azure VM 啟用和刪除 Azure 資源的託管標識。

先決條件

  • 如果您不熟悉適用於 Azure 資源的受控識別功能,請參閱此概觀。 如果您沒有 Azure 帳戶,請先 註冊免費帳戶 ,再繼續進行。

Azure 資源受控識別支援的 Azure SDK

Azure 透過一系列 Azure SDK 支援多個程式設計平臺。 其中許多都已更新來支援 Azure 資源的受控識別,還提供對應的範例來示範用法。 此清單會隨著其他支援的新增而更新:

SDK 範例
.NET 從啟用了 Azure 資源的託管標識的 VM 管理資源
JAVA 從啟用了 Azure 資源的託管標識的 VM 管理存儲
Node.js 創建啟用了系統分配的託管標識的 VM
Python 創建啟用了系統分配的託管標識的 VM
Ruby 創建啟用了系統分配的標識的 Azure VM

後續步驟

  • 請參閱 為 Azure VM 配置標識下的相關文章,瞭解如何使用 Azure 門戶、PowerShell、CLI 和資源範本。