如何在 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
下列腳本示範如何:
在 Azure 資源服務主體的 VM 受控識別下登入 Microsoft Entra 識別碼
呼叫 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
下列腳本示範如何:
在 Azure 資源服務主體的 VM 受控識別下登入 Microsoft Entra 識別碼
呼叫 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,並移至 [ 身 分識別] 頁面,並確定 [系統 指派] 設定為 [ 是]。
下一步
- 若要在 Azure VM 上啟用 Azure 資源的受控識別,請參閱 使用 PowerShell 為 Azure VM 上的 Azure 資源設定受控識別,或使用 Azure CLI 為 Azure VM 上的 Azure 資源設定受控識別