分享方式:


如何使用 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 資源的受控識別功能,請參閱此概觀。 如果您沒有 Azure 帳戶,請先註冊免費帳戶,再繼續進行。

如果您打算使用本文中的 Azure PowerShell 或 Azure CLI 範例,請務必安裝最新版的 Azure PowerShellAzure CLI

重要

  • 本文中的所有範例指令碼都假設命令列用戶端在已啟用 Azure 資源受控識別的虛擬機器上執行。 在 Azure 入口網站中使用虛擬機器「連線」功能,從遠端連線到您的虛擬機器。 如需有關在虛擬機器上啟用 Azure 資源受控識別的詳細資訊,請參閱使用 Azure 入口網站在虛擬機器上設定 Azure 資源受控識別,或其中一篇變化文章 (使用 PowerShell、CLI、範本或 Azure SDK)。
  • 若要避免資源存取期間發生錯誤,虛擬機器的受控識別必須至少取得適當範圍 (該虛擬機器或更高層級) 的「讀者」存取權,以允許在虛擬機器上進行 Azure Resource Manager 作業。 如需詳細資訊,請參閱使用 Azure 入口網站將 Azure 資源的受控識別指派給資源

概觀

Azure 資源的受控識別提供服務主體物件,這是啟用 Azure 資源的受控識別時建立的物件。 服務主體可以獲得 Azure 資源的存取權,並可讓指令碼/命令列用戶端用來作為登入及存取資源時的身分識別。 傳統上,若要以受保護資源本身的身分識別來存取該資源,指令碼用戶端需要:

  • 向 Microsoft Entra ID 註冊並獲得同意成為機密/Web 用戶端應用程式
  • 在其服務主體下登入,並使用應用程式的認證 (這可能會內嵌於指令碼中)

使用 Azure 資源的受控識別,您的指令碼用戶端不再需要執行任一項,因為它可以在 Azure 資源受控識別的服務主體下登入。

Azure CLI

下列指令碼示範如何:

  1. 在虛擬機器的 Azure 資源受控識別服務主體下登入 Microsoft Entra ID

  2. 呼叫 Azure Resource Manager 並取得虛擬機器的服務主體識別碼。 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 資源受控識別服務主體下登入 Microsoft Entra ID

  2. 呼叫 Azure Resource Manager Cmdlet 以取得虛擬機器的相關資訊。 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 ID 並已使用 Azure 資源受控識別進行測試的資源及其各自的資源識別碼清單,請參閱支援 Azure AD 驗證的 Azure 服務

錯誤處理指引

以下所示的回應可能代表虛擬機器的 Azure 資源受控識別未正確設定:

  • PowerShell:Invoke-WebRequest:無法連線到遠端伺服器
  • CLI:MSI:無法從 'http://localhost:50342/oauth2/token' 擷取權杖,包含 'HTTPConnectionPool(host='localhost', port=50342) 錯誤

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

下一步