如何使用 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 資源受控識別的虛擬機器上執行。 在 Azure 入口網站中使用虛擬機器「連線」功能,從遠端連線到您的虛擬機器。 如需有關在虛擬機器上啟用 Azure 資源受控識別的詳細資訊,請參閱使用 Azure 入口網站在虛擬機器上設定 Azure 資源受控識別,或其中一篇變化文章 (使用 PowerShell、CLI、範本或 Azure SDK)。
- 若要避免資源存取期間發生錯誤,虛擬機器的受控識別必須至少取得適當範圍 (該虛擬機器或更高層級) 的「讀者」存取權,以允許在虛擬機器上進行 Azure Resource Manager 作業。 如需詳細資訊,請參閱使用 Azure 入口網站將 Azure 資源的受控識別指派給資源。
概觀
Azure 資源的受控識別提供服務主體物件,這是啟用 Azure 資源的受控識別時建立的物件。 服務主體可以獲得 Azure 資源的存取權,並可讓指令碼/命令列用戶端用來作為登入及存取資源時的身分識別。 傳統上,若要以受保護資源本身的身分識別來存取該資源,指令碼用戶端需要:
- 向 Microsoft Entra ID 註冊並獲得同意成為機密/Web 用戶端應用程式
- 在其服務主體下登入,並使用應用程式的認證 (這可能會內嵌於指令碼中)
使用 Azure 資源的受控識別,您的指令碼用戶端不再需要執行任一項,因為它可以在 Azure 資源受控識別的服務主體下登入。
Azure CLI
下列指令碼示範如何:
在虛擬機器的 Azure 資源受控識別服務主體下登入 Microsoft Entra ID
呼叫 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
下列指令碼示範如何:
在虛擬機器的 Azure 資源受控識別服務主體下登入 Microsoft Entra ID
呼叫 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 並移至 [身分識別] 頁面,並確定 [系統指派] 設定為 [是]。
下一步
- 若要啟用 Azure VM 的 Azure 資源受控識別,請參閱使用 PowerShell 在 Azure VM 上設定 Azure 資源受控識別或使用 Azure CLI 在 Azure VM 上設定 Azure 資源受控識別