教學課程:在Linux VM上使用使用者指派的受控識別來存取 Azure Resource Manager

本教學課程說明如何建立使用者指派的受控識別、將它指派給Linux虛擬機(VM),然後使用該身分識別來存取 Azure Resource Manager API。 Azure 資源的受控識別會自動由 Azure 管理。 它們可對支援 Microsoft Entra 驗證的服務進行驗證,而不需要將認證內嵌至您的程式代碼。

在本教學課程中,您會了解如何:

  • 建立使用者指派的受控識別
  • 將使用者指派的受控識別指派給Linux VM
  • 將使用者指派的受控識別存取權授與 Azure Resource Manager 中的資源群組
  • 使用使用者指派的受控識別取得存取令牌,並用它來呼叫 Azure Resource Manager

必要條件

建立使用者指派的受控識別

使用 az identity create 建立使用者指派的受控識別。 -g 參數會指定建立使用者指派受控識別的資源群組,而 -n 參數會指定其名稱。 請務必將 和 <UAMI NAME> 參數值取代<RESOURCE GROUP>為您自己的值:

重要

當您建立使用者指派的受控識別時,名稱必須以字母或數字開頭,而且可能包含英數位元、連字元(-) 和底線的組合(_)。 若要讓虛擬機器或虛擬機器擴展集的指派正常運作,名稱長度上限為 24 個字元。 如需詳細資訊,請參閱 常見問題和已知問題

az identity create -g <RESOURCE GROUP> -n <UAMI NAME>

回應包含所建立之使用者指派受控識別的詳細數據,類似下列範例。 請記下 id 使用者指派受控識別的值,因為它將在下一個步驟中使用:

{
"clientId": "73444643-8088-4d70-9532-c3a0fdc190fz",
"clientSecretUrl": "https://control-westcentralus.identity.azure.net/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UAMI NAME>/credentials?tid=5678&oid=9012&aid=12344643-8088-4d70-9532-c3a0fdc190fz",
"id": "/subscriptions/<SUBSCRIPTON ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UAMI NAME>",
"location": "westcentralus",
"name": "<UAMI NAME>",
"principalId": "9012",
"resourceGroup": "<RESOURCE GROUP>",
"tags": {},
"tenantId": "733a8f0e-ec41-4e69-8ad8-971fc4b533bl",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}

將身分識別指派給Linux VM

用戶端可以在多個 Azure 資源上使用使用者指派的受控識別。 使用下列命令,將使用者指派的受控識別指派給單一 VM。 Id使用在上一個步驟中針對 參數傳回的屬性-IdentityID

使用 az vm identity assign 將使用者指派的受控識別指派給 Linux VM。 請務必將 和 <VM NAME> 參數值取代<RESOURCE GROUP>為您自己的值。 id使用上一個步驟中針對參數值傳回的屬性--identities

az vm identity assign -g <RESOURCE GROUP> -n <VM NAME> --identities "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<UAMI NAME>"

在 Azure Resource Manager 中授與資源群組的存取權

受控識別是您的程式代碼可用來要求存取令牌向支援 Microsoft Entra 驗證的資源 API 進行驗證的身分識別。 在本教學課程中,您的程式代碼將會存取 Azure Resource Manager API。

在程式代碼可以存取 API 之前,您必須授與 Azure Resource Manager 中資源的身分識別存取權。 在此情況下,包含 VM 的資源群組。 視您的環境情況更新 和 <RESOURCE GROUP> 的值<SUBSCRIPTION ID>。 此外,將 取代<UAMI PRINCIPALID>principalId 建立使用者指派的受控識別中的 命令所az identity create傳回的屬性

az role assignment create --assignee <UAMI PRINCIPALID> --role 'Reader' --scope "/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP> "

回應包含所建立角色指派的詳細數據,類似下列範例:

{
  "id": "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Authorization/roleAssignments/b402bd74-157f-425c-bf7d-zed3a3a581ll",
  "name": "b402bd74-157f-425c-bf7d-zed3a3a581ll",
  "properties": {
    "principalId": "f5fdfdc1-ed84-4d48-8551-999fb9dedfbl",
    "roleDefinitionId": "/subscriptions/<SUBSCRIPTION ID>/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7",
    "scope": "/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>"
  },
  "resourceGroup": "<RESOURCE GROUP>",
  "type": "Microsoft.Authorization/roleAssignments"
}

使用 VM 的身分識別取得存取令牌,並用它來呼叫 Resource Manager

提示

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

在本教學課程的其餘部分,我們將從稍早建立的 VM 中運作。

若要完成這些步驟,您需要 SSH 用戶端。 如果您使用 Windows,您可以在 Windows 子系統 Linux 版 中使用 SSH 用戶端。

  1. 登入 Azure 入口網站

  2. 在入口網站中,流覽至 [虛擬機器],然後移至Linux虛擬機,然後在 [概觀] 中按兩下 [連線]。 複製字串以連線到您的 VM。

  3. 使用您選擇的 SSH 用戶端,將 連線 至 VM。 如果您使用 Windows,您可以在 Windows 子系統 Linux 版 中使用 SSH 用戶端。 如果您需要設定 SSH 用戶端金鑰的協助,請參閱 如何在 Azure 上搭配 Windows 使用 SSH 金鑰,或 如何建立和使用 Azure 中 Linux VM 的 SSH 公開和私鑰組。

  4. 在終端機視窗中,使用 CURL 向 Azure 實例元數據服務 (IMDS) 身分識別端點提出要求,以取得 Azure Resource Manager 的存取令牌。  

    取得存取令牌的 CURL 要求會顯示在下列範例中。 請務必將 取代<CLIENT ID>為建立使用者指派的受控識別中 命令所az identity create傳回的屬性clientId

    curl -H Metadata:true "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com/&client_id=<UAMI CLIENT ID>"   
    

    注意

    參數的值 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"
    } 
    
  5. 使用存取令牌來存取 Azure Resource Manager,並讀取您先前授與使用者指派受控識別存取權的資源群組屬性。 請務必將 取代<SUBSCRIPTION ID><RESOURCE GROUP>為您稍早指定的值,並以<ACCESS TOKEN>在上一個步驟中傳回的權杖取代 。

    注意

    URL 會區分大小寫,因此請務必使用您稍早命名資源群組時所使用的完全相同大小寫,並在 中 resourceGroups使用大寫 “G”。  

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

    回應包含特定的資源群組資訊,類似下列範例:

    {
    "id":"/subscriptions/<SUBSCRIPTION ID>/resourceGroups/DevTest",
    "name":"DevTest",
    "location":"westus",
    "properties":{"provisioningState":"Succeeded"}
    } 
    

下一步

在本教學課程中,您已瞭解如何建立使用者指派的受控識別,並將其連結至Linux虛擬機,以存取 Azure Resource Manager API。 若要深入瞭解 Azure Resource Manager,請參閱: