使用 Windows VM 系統指派的受控識別來存取 Resource Manager

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

本教學課程說明如何使用已啟用系統指派受控識別的 Windows 虛擬機來存取 Azure Resource Manager API。 Azure 資源的受控識別會自動由 Azure 管理,並可讓您向支援 Microsoft Entra 驗證的服務進行驗證,而不需要將認證插入您的程式代碼中。 您將學習如何:

  • 將您的 VM 存取權授與 Azure Resource Manager 中的資源群組
  • 使用 VM 身分識別取得存取令牌,並用它來呼叫 Azure Resource Manager

必要條件

啟用

啟用系統指派的受控識別是一鍵式體驗。 您可以在建立 VM 期間或在現有 VM 的屬性中啟用它。

Screenshot shows the System assigned tab for a virtual machine where you can turn on the System assigned status.

若要在新 VM 上啟用系統指派的受控識別:

  1. 登入 Azure 入口網站

  2. 建立已啟用系統指派身分識別的虛擬機

將您的 VM 存取權授與 Resource Manager 中的資源群組

提示

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

使用 Azure 資源的受控識別,您的應用程式可以取得存取令牌,以向支援 Microsoft Entra 驗證的資源進行驗證。 Azure Resource Manager API 支援 Microsoft Entra 驗證。 我們會將此 VM 的身分識別存取權授與 Azure Resource Manager 中的資源,在此案例中為資源群組。 我們會將 讀者 角色指派給資源群組範圍中的受控識別。

  1. 使用系統管理員帳戶登入 Azure 入口網站
  2. 流覽至資源群組的 索引標籤
  3. 選取您想要授與 VM 受控識別存取權的資源群組
  4. 在左側面板中,選取 [訪問控制][IAM]。
  5. 選取 [新增],然後選取 [新增角色指派]。
  6. 在 [角色] 索引標籤中,選取 [讀取者]。 此角色允許檢視所有資源,但不允許您進行任何變更。
  7. 在 [ 成員] 索引標籤的 [指派存取權] 中,選取 [ 受控識別]。 然後,選取 [+ 選取成員]
  8. 確定 [訂用帳戶] 下拉式清單中 列出適當的訂 用帳戶。 針對 [ 資源群組],選取 [所有資源群組]。
  9. 針對 [ 管理身分識別] 下拉式 清單,選取 [ 虛擬機]。
  10. 最後,在 [ 選取 ] 下拉式清單中選擇您的 Windows 虛擬機,然後選取 [ 儲存]。

使用 VM 系統指派的受控識別取得存取令牌,並用它來呼叫 Azure Resource Manager

您必須在此部分中使用 PowerShell 。 如果您沒有安裝 PowerShell,請在這裡下載。

  1. 在入口網站中,流覽至 [虛擬機器],然後移至您的 Windows 虛擬機,然後在 [概觀] 中選取 [連線]。

  2. 輸入您在建立 Windows VM 時新增的使用者名稱和密碼

  3. 既然您已使用虛擬機建立遠端桌面 連線,請在遠端會話中開啟 PowerShell

  4. 使用 Invoke-WebRequest Cmdlet,向 Azure 資源端點的本機受控識別提出要求,以取得 Azure Resource Manager 的存取令牌。

       $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    

    注意

    “resource” 參數的值必須完全符合 Microsoft Entra ID 的預期值。 使用 Azure Resource Manager 資源識別碼時,您必須在 URI 中包含尾端斜線。

    接下來,擷取完整回應,其儲存為 $response 物件中的 JavaScript 物件表示法 (JSON) 格式字串。

    $content = $response.Content | ConvertFrom-Json
    

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

    $ArmToken = $content.access_token
    

    最後,使用存取令牌呼叫 Azure Resource Manager。 在此範例中,我們也使用 Invoke-WebRequest Cmdlet 來呼叫 Azure Resource Manager,並在 Authorization 標頭中包含存取令牌。

    (Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{ Authorization ="Bearer $ArmToken"}).content
    

    注意

    URL 會區分大小寫,因此請確定您使用的是與稍早命名資源群組時完全相同的案例,以及 “resourceGroups” 中的大寫 “G”。

    下列命令會傳回資源群組的詳細資料:

    {"id":"/subscriptions/98f51385-2edc-4b79-bed9-7718de4cb861/resourceGroups/DevTest","name":"DevTest","location":"westus","properties":{"provisioningState":"Succeeded"}}
    

下一步

在本快速入門中,您已瞭解如何使用系統指派的受控識別來存取 Azure Resource Manager API。 若要深入瞭解 Azure Resource Manager,請參閱: