教學課程:使用 Windows VM 系統指派的受控識別來存取 Azure 金鑰保存庫

Azure 資源的受控識別是 Microsoft Entra ID 的功能。 每個支援適用於 Azure 資源的受控識別 Azure 服務均受限於其本身的時間表。 開始之前,請務必檢閱 資源受控識別的可用性 狀態和 已知問題

本教學課程說明 Windows 虛擬機 (VM) 如何使用系統指派的受控識別來存取 Azure 金鑰保存庫。 金鑰保存庫 可讓您的用戶端應用程式使用秘密來存取不受 Microsoft Entra ID 保護的資源。 受控識別會自動由 Azure 管理。 它們可讓您向支援 Microsoft Entra 驗證的服務進行驗證,而不在您的程式代碼中包含驗證資訊。

您將學習如何:

  • 將您的 VM 存取權授與儲存在 金鑰保存庫 中的秘密
  • 使用 VM 身分識別取得存取令牌,並使用它從 金鑰保存庫 擷取秘密

必要條件

建立 金鑰保存庫

提示

本文中的步驟可能會根據您從開始的入口網站稍有不同。

本節說明如何將 VM 存取權授與儲存在 金鑰保存庫 中的秘密。 當您針對 Azure 資源使用受控識別時,您的程式代碼可以取得存取令牌,以向支援 Microsoft Entra 驗證的資源進行驗證。  不過,並非所有 Azure 服務都支援 Microsoft Entra 驗證。 若要搭配這些服務使用 Azure 資源的受控識別,請將服務認證儲存在 Azure 金鑰保存庫,並使用 VM 的受控識別來存取 金鑰保存庫 來擷取認證。

首先,我們需要建立 金鑰保存庫,並將 VM 系統指派的受控識別存取權授與 金鑰保存庫。

  1. 登入 [Azure 入口網站]portal](https://portal.azure.com/)。

  2. 在左側導覽列頂端,選取 [ 建立資源]。

  3. 在 [搜尋 Marketplace] 方塊中輸入 金鑰保存庫,然後按 Enter

  4. 從結果中選取 [金鑰保存庫]。

  5. 選取 建立

  6. 提供新金鑰保存庫的名稱。

    建立金鑰保存庫畫面。

  7. 填寫所有必要的資訊。 請務必選擇您在本教學課程中所使用的訂用帳戶和資源群組。

  8. 選取 [ 檢閱+ 建立]

  9. 選取 [建立]

建立祕密

接下來,將秘密新增至 金鑰保存庫,以便稍後使用在 VM 中執行的程式代碼來擷取密碼。 在本教學課程中,我們使用PowerShell,但相同的概念適用於在此虛擬機中執行的任何程序代碼。

  1. 流覽至新建立的 金鑰保存庫。

  2. 選取 [ 秘密],然後選取 [ 新增]。

  3. 選取 [產生/匯入]

  4. 在 [建立秘密] 畫面中,從 [上傳] 選項保留 [手動] 選取。

  5. 輸入秘密的名稱和值。  此值可以是您想要的任何專案。 

  6. 讓啟用日期和到期日保持清除,並將 [啟用] 保留[是]。 

  7. 選取 [建立] 以建立秘密。

    顯示如何建立秘密的螢幕快照。

授予存取權

虛擬機所使用的受控識別必須獲得存取權,才能讀取我們將儲存在 金鑰保存庫 中的秘密。

  1. 流覽至新建立的 金鑰保存庫

  2. 從左側功能表中選取 [存取原則 ]。

  3. 選取 [新增存取原則]

    顯示金鑰保存庫存取原則畫面的螢幕快照。

  4. 在 [新增存取原則] 區段的 [從範本設定] 底下從下拉功能表中選擇 [秘密管理]。

  5. 選擇 [ 選取主體],然後在搜尋欄位中輸入您稍早建立的 VM 名稱。  在結果清單中選取 VM,然後選擇 [ 選取]。

  6. 選取新增

  7. 選取 [儲存]。

存取資料

本節說明如何使用 VM 身分識別取得存取令牌,並使用它從 金鑰保存庫 擷取秘密。 如果您沒有安裝 PowerShell 4.3.1 或更新版本,則必須下載並安裝最新版本。

首先,我們會使用 VM 系統指派的受控識別來取得存取令牌,以驗證 金鑰保存庫:

  1. 在入口網站中,流覽至 [虛擬機器],然後移至 Windows 虛擬機,然後在 [概觀] 中選取 [連線]。
  2. 輸入您在建立 Windows VM 時新增的使用者名稱和密碼
  3. 既然您已使用虛擬機建立遠端桌面 連線,請在遠端會話中開啟 PowerShell。
  4. 在 PowerShell 中,在租使用者上叫用 Web 要求,以取得 VM 特定埠中本機主機的令牌。

PowerShell 要求:

$Response = Invoke-RestMethod -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -Method GET -Headers @{Metadata="true"} 

您可以看到回應如下所示:

顯示具有令牌回應之要求的螢幕快照。

接下來,從回應中擷取存取令牌。

   $KeyVaultToken = $Response.access_token

最後,使用 PowerShell 的 Invoke-WebRequest 命令來擷取您稍早在 金鑰保存庫 中建立的秘密,並在 Authorization 標頭中傳遞存取令牌。  您需要 金鑰保存庫 的 URL,其位於 金鑰保存庫 [概觀] 頁面的 [基本資訊] 區段中

Invoke-RestMethod -Uri https://<your-key-vault-URL>/secrets/<secret-name>?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $KeyVaultToken"}

回應看起來會像這樣:

  value       id                                                                                    attributes
  -----       --                                                                                    ----------
  'My Secret' https://mi-lab-vault.vault.azure.net/secrets/mi-test/50644e90b13249b584c44b9f712f2e51 @{enabled=True; created=16…

從 金鑰保存庫 擷取秘密之後,您可以使用它向需要名稱和密碼的服務進行驗證。

清除資源

當您想要清除資源時,請登入 Azure 入口網站,選取 [資源群組],找出並選取本教學課程中建立的資源群組(例如 ),mi-test然後使用 [刪除資源群組] 命令。

或者,您也可以透過 PowerShell或 CLI 清除資源

下一步

在本教學課程中,您已瞭解如何使用 Windows VM 系統指派的受控識別來存取 Azure 金鑰保存庫。 若要深入瞭解 Azure 金鑰保存庫,請參閱: