共用方式為


使用系統指派的受控識別向 Azure 資源驗證 Azure 裝載的 .NET 應用程式

向其他 Azure 資源驗證 Azure 裝載應用程式的建議方法是使用 受控識別。 此方法 支援大部分的 Azure 服務,包括裝載在 Azure App Service、Azure Container Apps 和 Azure 虛擬機上的應用程式。 在 [驗證概觀] 頁面上深入瞭解不同的驗證技術和方法 頁面。 在接下來的各節中,您將瞭解:

  • 基本受控識別概念
  • 如何為您的應用程式建立系統指派的受控識別
  • 如何將角色指派給系統指派的受管理身份
  • 如何從應用程式程式代碼使用系統指派的受控識別進行驗證

基本受控識別概念

受控識別可讓您的應用程式安全地連線到其他 Azure 資源,而不需要使用秘密金鑰或其他應用程式秘密。 在內部,Azure 會追蹤身分識別,以及允許其連線的資源。 Azure 會使用這項資訊自動取得應用程式Microsoft Entra 令牌,以允許它連線到其他 Azure 資源。

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

  • 系統指派 受控身分識別是在 Azure 資源上直接啟用的,並與其生命周期緊密相連。 刪除資源時,Azure 會自動為您刪除身分識別。 系統指派的身分識別提供使用受控識別的極簡方法。
  • 使用者指派的 管理的身分會建立為獨立的 Azure 資源,並提供更強的彈性與功能。 其適用於涉及多個需要共用相同身分識別和許可權之 Azure 資源的解決方案。 例如,如果多個虛擬機需要存取同一組 Azure 資源,則使用者指派的受控識別可提供重複使用性和優化管理。

提示

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

前面的各節說明為 Azure 裝載的應用程式啟用和使用系統指派的受控識別的步驟。 如果您需要使用使用者指派的受控識別,請流覽 用戶指派的受控識別 文章以取得詳細資訊。

在 Azure 裝載資源上啟用系統指派的受控識別

若要開始使用系統指派的受控識別搭配您的應用程式,請在裝載應用程式的 Azure 資源上啟用身分識別,例如 Azure App Service、Azure Container App 或 Azure 虛擬機。

您可以使用 Azure 入口網站或 Azure CLI,為 Azure 資源啟用系統指派的受控識別。

  1. 在 Azure 入口網站中,瀏覽至裝載應用程式程式代碼的資源,例如 Azure App Service 或 Azure Container App 實例。

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

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

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

    顯示如何在容器應用程式上啟用系統指派身分識別的螢幕快照。

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

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

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

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

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

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

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

    顯示如何存取身分識別角色指派頁面的螢幕快照。

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

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

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

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

  8. 在 [選取受控識別] 面板上,使用 [訂閱] 和 [受控識別] 下拉式選單來篩選相關識別的搜尋結果。 使用 [] 選取 [] 搜尋方塊,找出您為裝載應用程式的 Azure 資源啟用的系統身分識別。

    顯示受控識別指派程序的螢幕快照。

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

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

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

在您的應用程式中實作DefaultAzureCredential

DefaultAzureCredential 是一種強制的、已排序的機制序列,用於對 Microsoft Entra ID 進行驗證。 每個驗證機制都是衍生自 TokenCredential 類別的類別,稱為 認證。 在運行時間,DefaultAzureCredential 嘗試使用第一個認證進行驗證。 如果該認證無法取得存取令牌,則會嘗試序列中的下一個認證,依此方式,直到成功取得存取令牌為止。 如此一來,您的應用程式就可以在不同的環境中使用不同的認證,而不需要撰寫環境特定的程序代碼。

若要使用 DefaultAzureCredential,請將 Azure.Identity,並選擇性地將 Microsoft.Extensions.Azure 套件新增至您的應用程式:

在您選擇的終端機中,瀏覽至應用程式項目目錄,然後執行下列命令:

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Azure 服務是使用來自各種 Azure SDK 用戶端連結庫的特殊客戶端類別來存取。 這些類別和您自己的自定義服務應該註冊,以便透過整個應用程式的相依性插入來存取它們。 在 Program.cs中,完成下列步驟來註冊客戶端類別和 DefaultAzureCredential

  1. 透過 using 指令來包含 Azure.IdentityMicrosoft.Extensions.Azure 命名空間。
  2. 使用對應的 Add前置擴充方法註冊 Azure 服務用戶端。
  3. DefaultAzureCredential 實例傳遞至 UseCredential 方法。

例如:

using Microsoft.Extensions.Azure;
using Azure.Identity;

builder.Services.AddAzureClients(clientBuilder =>
{
    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));
    clientBuilder.UseCredential(new DefaultAzureCredential());
});

UseCredential 的替代方法是直接具現化 DefaultAzureCredential

using Azure.Identity;

builder.Services.AddSingleton<BlobServiceClient>(_ =>
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

在本機開發工作站上執行上述程式代碼時,它會在應用程式服務主體的環境變數中,或在Visual Studio等本機安裝的開發人員工具中尋找一組開發人員認證。 任一種方法都可用來在本機開發期間向 Azure 資源驗證應用程式。

部署至 Azure 時,此相同程式代碼也可以向其他 Azure 資源驗證您的應用程式。 DefaultAzureCredential 可以擷取環境設定和受控識別設定,以自動向其他服務進行驗證。