如何在 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 Resource Manager 作業。 如需詳細資訊,請參閱 使用Azure 入口網站 指派 Azure 資源的受控識別存取權給資源。

概觀

Azure 資源的受控識別提供 服務主體物件,此物件 是在 為 VM 上的 Azure 資源 啟用受控識別時建立的。 服務主體可以授與 Azure 資源的存取權,並透過腳本/命令列用戶端作為身分識別,以進行登入和資源存取。 傳統上,為了以自己的身分識別存取受保護的資源,腳本用戶端必須:

  • 以機密/Web 用戶端應用程式身分向 Microsoft Entra 識別碼註冊並同意
  • 使用應用程式認證登入其服務主體底下(可能內嵌在腳本中)

使用 Azure 資源的受控識別時,您的腳本用戶端就不再需要這麼做,因為它可以在 Azure 資源服務主體的受控識別下登入。

Azure CLI

下列腳本示範如何:

  1. 在 Azure 資源服務主體的 VM 受控識別下登入 Microsoft Entra 識別碼

  2. 呼叫 Azure Resource Manager 並取得 VM 的服務主體識別碼。 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

下列腳本示範如何:

  1. 在 Azure 資源服務主體的 VM 受控識別下登入 Microsoft Entra 識別碼

  2. 呼叫 Azure Resource Manager 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 服務的資源識別碼

請參閱 支援 Microsoft Entra 驗證 的 Azure 服務,以取得支援 Microsoft Entra 識別碼的資源清單,並已針對 Azure 資源使用受控識別進行測試,以及其各自的資源識別碼。

錯誤處理指引

如下所示的回應可能表示尚未正確設定適用于 Azure 資源的 VM 受控識別:

  • PowerShell:Invoke-WebRequest : 無法連線到遠端伺服器
  • CLI:MSI: 無法從 http://localhost:50342/oauth2/token 擷取權杖,並出現 'HTTP連線ionPool(host='localhost', port=50342)

如果您收到其中一個錯誤,請返回Azure 入口網站中的 Azure VM,並移至 [ 分識別] 頁面,並確定 [系統 指派] 設定為 [ 是]。

下一步