共用方式為


使用系統指定的管理身份認證 Azure 託管的 Java 應用程式至 Azure 資源

推薦的認證方式是使用 管理身份,將Azure託管應用程式認證至其他Azure資源。 大多數 Azure 服務都支援此方法,包括託管於 Azure App 服務、Azure 容器應用程式 及 Azure 虛擬機器 上的應用程式。 欲了解更多資訊,請參閱 Azure 服務與支援受管理身份的資源類型。 如需有關不同驗證技術和方法的更多信息,請參閱 使用 Azure Identity 程式庫為 Java 應用程式驗證至 Azure 服務

在以下章節中,你會學到:

  • 基本的管理身份概念。
  • 如何為你的應用程式建立系統指派的管理身份。
  • 如何將角色指派給系統指派的管理身份。
  • 如何利用系統指派的應用程式代碼來驗證身份。

基本受控識別概念

管理身份讓應用程式能安全連接其他 Azure 資源,無需使用秘密金鑰或其他應用程式秘密。 內部 Azure 會追蹤該身份及其被允許連接的資源。 Azure 利用這些資訊自動取得 Microsoft Entra 令牌,讓應用程式能夠連接其他 Azure 資源。

設定載入的應用程式時,需要考慮兩種類型的受控識別:

  • System-assigned 管理身份直接在Azure資源上啟用,並綁定於其生命週期。 當資源被刪除時,Azure 會自動幫你刪除該身份。 系統指派的身分識別提供使用受控識別的極簡方法。
  • User-assigned 管理身份被建立為獨立的Azure資源,並提供更高的彈性與功能。 它們非常適合涉及多個需要共享相同身份與權限的 Azure 資源解決方案。 例如,若多個虛擬機需要存取同一組 Azure 資源,使用者指派的管理身份便能提供可重用性與最佳化管理。

小提示

如需如何深入瞭解如何選取和管理系統指派和使用者指派的受控識別,請參閱 受控識別最佳做法建議 一文。

以下章節說明啟用並使用系統指派的管理身份給 Azure 主機應用程式的步驟。 如果你需要使用使用者指定的管理身分,請參考 透過使用者指定的管理身分來驗證 Azure 托管的 Java 應用程式對 Azure 資源的存取

在 Azure 主機資源上啟用系統指派的管理身份

要開始在您的應用程式中使用系統指派的管理身份,請在託管應用程式的 Azure 資源上啟用該身份,例如 Azure App 服務、Azure 容器應用程式 或 Azure 虛擬機器 實例。

你可以透過 Azure 入口網站或 Azure CLI 為 Azure 資源啟用系統指派的受控身分識別。

  1. 在 Azure 入口網站中,導覽到承載你應用程式碼的資源,例如 Azure App 服務 或 Azure 容器應用程式 實例。

  2. 從資源的 [概觀] 頁面中,展開 [[設定],然後從導覽中選取 [身分識別]。

  3. 在 [身份] 頁面上,將 [狀態] 滑桿切換到 開啟。

  4. 選取 [儲存] 以套用變更。

    螢幕擷取畫面,示範如何在容器應用程式上啟用系統指派的受控識別。

將角色指派給管理的身分識別

接下來,判斷您的應用程式需要哪些角色,並將這些角色指派給受控識別。 您可以在下列範圍將角色指派給受控識別:

  • 資源:指派的角色僅適用於該特定資源。
  • 資源群組:指派的角色會套用至資源群組中包含的所有資源。
  • 訂用帳戶:指派的角色會套用至訂用帳戶中包含的所有資源。

以下範例展示了如何在資源群組範圍內指派角色,因為許多應用程式使用單一資源群組來管理所有相關的 Azure 資源。

  1. 流覽至資源群組的 [概觀] 頁面,其中包含具有系統指派受控識別的應用程式。

  2. 請選取左側導覽列中的 存取控制 (IAM)。

  3. 在 [存取控制 (IAM)] 頁面上,選取頂端功能表上的 [+ 新增],然後選擇 [新增角色指派] 導覽至 [新增角色指派] 頁面。

    螢幕擷取畫面,顯示如何存取身分識別角色指派頁面。

  4. [新增角色指派] 頁面會顯示多步驟的索引標籤式工作流程,以將角色指派給身分。 在 [初始 角色] 索引標籤上,使用頂端的搜尋方塊來找出您要指派給身分識別的角色。

  5. 從結果中選取角色,然後選擇 [下一步] 以移至 [成員] 標籤。

  6. 針對 [[指派存取權給] 選項,選取 [受控識別]。

  7. 針對 [成員] 選項,選取 [+ 選取成員] 以開啟 [選取受控識別] 面板。

  8. 在 [選取受控識別 面板上,使用 [訂用帳戶] 和 [受控 識別] 下拉式清單來篩選您身分識別的搜尋結果。 使用 Select 搜尋框,找到你為託管應用程式的Azure資源啟用的系統身份。

    顯示受控識別指派過程的螢幕擷取畫面。

  9. 選取身分,然後在面板底部選擇[選取]以繼續。

  10. 請在頁面底部點選 ,然後選擇 [檢閱 + 指派]。

  11. 在最後一個 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派],以完成工作流程。

從你的應用程式認證到 Azure 服務

Azure 身份函式庫 提供多種憑證,作為 TokenCredential 的實作。 每種實作支援不同的情境及 Microsoft Entra 認證流程。 對於Azure託管的應用程式,請使用 DefaultAzureCredential,它在Azure中執行時會自動發現受管理身份憑證。

實作程式碼

將依賴項加入至你的配置檔案中:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
</dependency>

你可以透過 Azure SDK 客戶端函式庫中的專門客戶端類別來存取 Azure 服務。 以下程式碼範例說明如何設定系統指派的管理身份認證憑證。

使用 DefaultAzureCredential

Azure 主機應用程式使用 DefaultAzureCredential,因為它會在 Azure 運行時自動發現受管理身份憑證。 對於系統指派的託管身份,則不需要額外的設定。

import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;

// DefaultAzureCredential automatically discovers managed identity when running in Azure
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();

// Azure SDK client builders accept the credential as a parameter
SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your-key-vault-name>.vault.azure.net")
    .credential(credential)
    .buildClient();

使用 ManagedIdentityCredential

如果你想明確使用管理身份憑證,並避免在 中進行憑證鏈查詢,請直接使用 。 對於系統指派的託管身份,請不要指定用戶端 ID:

import com.azure.identity.ManagedIdentityCredential;
import com.azure.identity.ManagedIdentityCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;

// For system-assigned managed identity, don't specify a client ID
ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder().build();

// Azure SDK client builders accept the credential as a parameter
SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your-key-vault-name>.vault.azure.net")
    .credential(credential)
    .buildClient();

後續步驟

本文介紹了使用系統指派的管理身份進行認證。 這種認證方式是 Azure SDK for Java 中多種認證方式之一。 以下文章將描述其他方式:

如果你遇到與Azure託管應用程式認證相關的問題,請參考 Troubleshoot Azure-hosted application authentication

在掌握身份驗證後,請參考 Azure SDK for Java 中的 Configure logging,以了解 SDK 提供的日誌功能。