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

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

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

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

必要條件

授予存取權

提示

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

當您針對 Azure 資源使用受控識別時,您的程式代碼可以取得存取令牌,以向支援 Microsoft Entra 驗證的資源進行驗證。 Azure Resource Manager API 支援 Microsoft Entra 驗證。 首先,我們需要將此 VM 的身分識別存取權授與 Azure Resource Manager 中的資源,在此案例中為包含 VM 的資源群組。

  1. 使用系統管理員帳戶登入 Azure 入口網站

  2. 流覽至資源群組的 索引標籤

  3. 選取您想要授與 VM 受控識別存取權的資源群組

  4. 在左側面板中,選取 [訪問控制][IAM]。

  5. 選取 [新增],然後選取 [新增角色指派]。

  6. 在 [角色] 索引標籤中,選取 [讀取者]。 此角色允許檢視所有資源,但不允許您進行任何變更。

  7. 在 [ 成員] 索引標籤的 [指派存取權] 中,選取 [ 受控識別]。 然後,選取 [+ 選取成員]

  8. 確定 [訂用帳戶] 下拉式清單中 列出適當的訂 用帳戶。 針對 [ 資源群組],選取 [所有資源群組]。

  9. 針對 [ 管理身分識別] 下拉式 清單,選取 [ 虛擬機]。

  10. 最後,在 [ 選取 ] 下拉式清單中選擇您的 Windows 虛擬機,然後選取 [ 儲存]。

    顯示將讀取者角色新增至受控識別的螢幕快照。

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

若要完成這些步驟,您需要 SSH 用戶端。 如果您使用 Windows,您可以在 Windows 子系統 Linux 版 中使用 SSH 用戶端。 如果您需要設定 SSH 用戶端金鑰的協助,請參閱 如何在 Azure 上搭配 Windows 使用 SSH 金鑰,或 如何建立和使用 Azure 中 Linux VM 的 SSH 公開和私鑰組。

  1. 在入口網站中,流覽至您的 Linux VM,然後在 [概觀] 中選取 [連線]。

  2. 使用您選擇的 SSH 用戶端,連線 至 VM。

  3. 在終端機視窗中,使用 curl向 Azure 資源端點的本機受控識別提出要求,以取得 Azure Resource Manager 的存取令牌。   存取 curl 令牌的要求如下。

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -H Metadata:true

注意

參數的值 resource 必須完全符合 Microsoft Entra ID 的預期值。 在 Resource Manager 資源識別碼的情況下,您必須在 URI 中包含尾端斜線。

回應包含存取 Azure Resource Manager 所需的存取令牌。

回應:

{
  "access_token":"eyJ0eXAiOi...",
  "refresh_token":"",
  "expires_in":"3599",
  "expires_on":"1504130527",
  "not_before":"1504126627",
  "resource":"https://management.azure.com",
  "token_type":"Bearer"
}

您可以使用此存取令牌來存取 Azure Resource Manager,例如,讀取您先前授與此 VM 存取權之資源群組的詳細數據。 將、 <RESOURCE-GROUP><ACCESS-TOKEN> 的值<SUBSCRIPTION-ID>取代為您稍早建立的值。

注意

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

curl https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS-TOKEN>" 

回應會包含特定資源群組資訊:

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

下一步

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