共用方式為


使用 Azure SDK for .NET 向 Azure 資源驗證 Azure 裝載的應用程式

若使用 Azure App Service、Azure 虛擬機器或 Azure 容器執行個體等服務將應用程式裝載於 Azure 中,向 Azure 資源驗證應用程式時,建議使用受控識別

受控識別會為您的應用程式提供身分識別,使其能夠連線至其他 Azure 資源,而無須使用秘密金鑰或其他應用程式秘密。 在內部,Azure 知道您應用程式的身分識別,及其能夠連線至哪些資源。 Azure 會使用這項資訊自動取得應用程式的 Microsoft Entra 權杖,使其能夠連線至其他 Azure 資源,且讓您完全無須管理任何應用程式秘密。

受控識別類型

受控身分識別有兩種:

  • 系統指派 - 此類型的受控識別由 Azure 資源提供,並直接繫結至 Azure 資源。 當您在 Azure 資源上啟用受控識別時,您會取得系統為該資源指派的受控識別。 系統指派的受控識別會繫結至與其相關聯之 Azure 資源的生命週期。 因此,當刪除資源時,Azure 會自動為您刪除身分識別。 您只需要為裝載程式碼的 Azure 資源啟用受控識別即可,因此,這可說是最容易使用的受控識別類型。
  • 使用者指派 - 您也可以將受控識別建立為獨立的 Azure 資源。 您的解決方案有多個工作負載執行於多個 Azure 資源上,且這些資源全都需要共用相同的身分識別和相同的權限時,最常用到此身分識別。 例如,如果您的解決方案有元件執行於多個 App Service 和虛擬機器執行個體上,而這些執行個體全都需要存取相同的 Azure 資源集,則在這些資源間建立並使用由使用者指派的受控識別,將是有效的做法。

本文將說明為應用程式啟用及使用系統指派的受控識別所需的步驟。 如果您需要使用由使用者指派的受控識別,請參閱管理使用者指派的受控識別一文,以了解如何建立使用者指派的受控識別。

1 - 在裝載應用程式的 Azure 資源中啟用受控識別

第一個步驟是在裝載應用程式的 Azure 資源上啟用受控識別。 例如,如果您使用 Azure App Service 來裝載 .NET 應用程式,則必須為裝載應用程式的 App Service Web 應用程式啟用受控識別。 如果您使用虛擬機器來裝載您的應用程式,則應讓 VM 能夠使用受控識別。

您可以使用 Azure 入口網站或 Azure CLI,讓受控識別用於 Azure 資源。

指示 Screenshot
瀏覽至 Azure 入口網站中裝載應用程式程式碼的資源。例如,您可以在頁面頂端的搜尋方塊中輸入資源的名稱,並在對話方塊中加以選取,以瀏覽至該資源。 螢幕擷取畫面顯示如何使用 Azure 入口網站頂端的搜尋列尋找並瀏覽至 Azure 資源。
在資源的頁面上,從左側功能表中選取 [身分識別] 功能表項目。所有能夠支援受控識別的 Azure 資源都會有 [身分識別] 功能表項目,即便功能表的配置可能稍有不同。 螢幕擷取畫面顯示 [身分識別] 功能表項目在 Azure 資源左側功能表中的位置。
在 [身分識別] 頁面上:
  1. 將 [狀態] 滑桿變更為 [開啟]
  2. 選取 [儲存]。
確認對話方塊會確認您是否要為服務啟用受控識別。 回答 [是],即會為 Azure 資源啟用受控識別。
螢幕擷取畫面顯示如何在資源的 [身分識別] 頁面上啟用 Azure 資源的受控識別。

2 - 將角色指派給受控識別

接下來,判斷應用程式需要哪些角色 (權限),並將受控識別指派給 Azure 中的那些角色。 受控識別可以在資源、資源群組或訂閱範圍獲派角色。 此範例會顯示如何在資源群組範圍內指派角色,因為多數應用程式都會將所有 Azure 資源劃分在單一資源群組中。

指示 Screenshot
使用 Azure 入口網站頂端的搜尋方塊搜尋資源群組名稱,藉此找出應用程式的資源群組。

選取對話方塊中 資源群組 標題下方的資源群組名稱,瀏覽至您的資源群組。
螢幕擷取畫面顯示如何使用 Azure 入口網站頂端的搜尋列尋找並瀏覽至 Azure 中的資源群組。這是您要指派角色 (權限) 的資源群組。
在資源群組分頁中,從左側功能表選取 存取控制 (IAM) 螢幕擷取畫面顯示 [存取控制 (IAM)] 功能表項目在 Azure 資源群組左側功能表中的位置。
存取控制 (IAM) 分頁上:
  1. 選取 [角色指派] 索引標籤。
  2. 從頂端功能表選取 [+ 新增],然後從產生的下拉功能表中選取 [新增角色指派]
螢幕擷取畫面顯示如何瀏覽至角色指派索引標籤,以及用來將角色指派新增至資源群組的按鈕位置。
新增角色指派 分頁列出所有可指派至資源群組之角色的清單。
  1. 請善用搜尋方塊,將清單篩選為更易於管理的大小。 此範例顯示如何針對儲存體 Blob 角色進行篩選。
  2. 選取您要指派的角色。
選取 [下一步] 前往下一個畫面。
螢幕擷取畫面顯示如何篩選並選取要新增至資源群組的角色指派。
下一個 新增角色指派 分頁能讓您指定要指派角色的使用者。
  1. 選取 [指派存取權] 下的 [受控識別]
  2. 選取 [成員] 下的 [+ 選取成員]
對話方塊會在 Azure 入口網站的右側開啟。
螢幕擷取畫面顯示如何在 [新增角色指派] 頁面上選取受控識別,作為您要指派角色 (權限) 的使用者類型。
在 [選取受控識別] 對話方塊中:
  1. [受控識別] 下拉式清單和 [選取] 文字方塊可用來篩選訂閱中的受控識別清單。 此範例選取了 App Service,因此只會顯示與 App Service 相關聯的受控識別。
  2. 選取裝載應用程式之 Azure 資源的受控識別。
選取對話方塊底部的 [選取] 來繼續。
螢幕擷取畫面顯示如何使用 [選取受控識別] 對話方塊來篩選及選取要獲派角色的受控識別。
受控識別此時會在 [新增角色指派] 畫面上顯示為已選取。

選取 [檢閱 + 指派] 移至最終分頁,然後再次選取 [檢閱 + 指派] 完成此流程。
螢幕擷取畫面顯示最終的 [新增角色指派] 畫面,使用者必須在此選取 [檢閱 + 指派] 按鈕以完成角色指派。

3 - 在應用程式中實作 DefaultAzureCredential

DefaultAzureCredential 是向 Microsoft Entra 驗證的固定已排序機制序列。 每個驗證機制都是源自 TokenCredential 類別的類別,稱為「認證」。 在執行階段中,DefaultAzureCredential 會嘗試使用第一個認證進行驗證。 如果該認證無法取得存取權杖,則會嘗試序列中的下一個認證,以此類推,直到成功取得存取權杖為止。 因此,您的應用程式可以在相異環境中使用不同的認證,而不需要撰寫環境特定程式碼。

DefaultAzureCredential 尋找認證的順序和位置,可在 DefaultAzureCredential (英文) 中找到。

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

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

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

使用來自各種 Azure SDK 用戶端程式庫的特殊用戶端類別以存取 Azure 服務。 這些類別和您自訂的服務都應註冊,使其可在應用程式中透過相依性插入來存取。 在 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 可擷取環境設定與受控識別設定,以便自動向其他服務進行驗證。