在本教學課程中,您會搭配使用 Azure App Configuration 服務和 Azure 金鑰保存庫。 應用程式組態與 Key Vault 是互補服務,將在大部分的應用程式部署中並行使用。
您的應用程式可以使用 App Configuration 用戶端提供者來擷取金鑰保存庫參考,就像儲存在 App Configuration 中的任何其他金鑰一樣。 當您將金鑰保存庫參考新增至應用程式設定時,應用程式設定會建立索引鍵,以參考儲存在金鑰保存庫中的值。 App Configuration 儲存的值不是金鑰保存庫值或認證。 相反地,它是參考 Key Vault 中值的 URI。 由於用戶端提供者會將金鑰辨識為金鑰保存庫參考,因此它會使用 Key Vault 來擷取其值。
您的應用程式會負責適當地驗證應用程式組態和 Key Vault。 這兩個服務不會直接通訊。
此教學課程說明如何在程式碼中實作 Key Vault 參考。 它會建置在下列必要條件中所列 ASP.NET Core 快速入門中引進的 Web 應用程式。 繼續之前,請先完成該 快速入門。
您可以使用任何程式碼編輯器來進行本教學課程中的步驟。 例如,Visual Studio Code 是適用於 Windows、macOS 與 Linux 作業系統的跨平台程式碼編輯器。
在本教學課程中,您會:
- 建立可參考 Key Vault 中儲存之值的應用程式組態金鑰。
- 從 ASP.NET Core Web 應用程式存取此金鑰的值。
先決條件
完成 使用 App Configuration 建立 ASP.NET Core 應用程式 的快速入門。
建立金鑰保存庫
移至 Azure 入口網站,然後選取 [ 建立資源]。
在 [搜尋] 方塊中輸入 Key Vault。 在結果清單中,選取 [金鑰保存庫]。
在 [金鑰保存庫] 頁面上,選取 [建立]。
在 [ 建立金鑰保存庫 ] 頁面上,輸入下列資訊:
- 訂閱:選擇一個訂閱方案。
- 針對 資源群組:輸入現有資源群組的名稱,或選取 [ 新建] ,然後輸入資源群組名稱。
- 針對 金鑰保存庫名稱:輸入唯一名稱。
- 對於 區域:選擇一個位置。
對於其他選項,請使用預設值。
選擇 檢閱 + 創建。
系統驗證並顯示您的輸入之後,選取 建立。
此時,您的 Azure 帳戶是唯一獲得授權可存取此新保存庫的帳戶。
將祕密新增至 Key Vault
若要在應用程式中測試金鑰保存庫擷取,請先採取下列步驟,將秘密新增至保存庫。 您新增的秘密稱為 Message,其值為「來自 Key Vault 的 Hello」。
在 [金鑰保存庫資源] 功能表上,選取 [物件>秘密]。
選取 [產生/匯入]。
在 [建立秘密 ] 對話方塊中,輸入下列值:
- 對於上傳選項:輸入手動。
- 針對 Name: 輸入 Message。
- 針對 秘密值:輸入 Hello from Key Vault。
對於其他選項,請使用預設值。
選取 [建立]。
將 Key Vault 參考新增至應用程式組態
登入 Azure 入口網站。 選取 [ 所有資源],然後選取您在 快速入門中建立的 App Configuration 存放區。
選取 [設定瀏覽器]。
選取 [ 建立>金鑰保存庫參考],然後輸入下列值:
- 針對 Key:輸入 TestApp:Settings:KeyVaultMessage。
- 對於 標籤:將值留空。
- 針對 訂用帳戶、 資源群組和 金鑰保存庫:輸入您在本教學課程稍早建立金鑰保存庫時使用的值。
- 對於 密碼:選取您在上一節中建立的名為 Message 的 密碼。
更新您的程式碼以使用 Key Vault 參考
移至包含您在 快速入門中建立之 ASP.NET Core Web 應用程式專案的資料夾。
在命令提示字元中,執行下列命令。 此命令會將
Azure.IdentityNuGet 套件參考新增至您的專案檔案,或更新現有的參考。dotnet add package Azure.Identity開啟 Program.cs。 在
using指令區段中,新增下列行以從Azure.Identity命名空間匯入類型:using Azure.Identity;在 Program.cs中,將方法的
AddAzureAppConfiguration呼叫取代為下列程式碼中的呼叫。 更新後的通話包括選項ConfigureKeyVault。 此選項會使用方法SetCredential來傳遞向金鑰保存庫進行驗證所需的認證。var builder = WebApplication.CreateBuilder(args); // Retrieve the App Configuration endpoint. string endpoint = builder.Configuration.GetValue<string>("Endpoints:AppConfiguration") // Load the configuration from App Configuration. builder.Configuration.AddAzureAppConfiguration(options => { options.Connect(new Uri(endpoint), new DefaultAzureCredential()); options.ConfigureKeyVault(keyVaultOptions => { keyVaultOptions.SetCredential(new DefaultAzureCredential()); }); });秘訣
如果您有多個金鑰保存庫,系統會針對所有金鑰保存庫使用相同的認證。 如果您的金鑰保存庫需要不同的憑證,您可以透過
AzureAppConfigurationKeyVaultOptions類別的Register或SetSecretResolver方法來設定憑證。若要存取程式碼中 Key Vault 參考的值,請移至專案中的 Pages 資料夾。 開啟 Index.cshtml ,並將其內容取代為下列程式碼。 上一個區塊中的程式碼會初始化應用程式設定連線,並設定金鑰保存庫連線。 因此,在 Index.cshtml 中,您可以存取金鑰保存庫參考的值,就像存取一般應用程式設定索引鍵的值一樣。
@page @using Microsoft.Extensions.Configuration @inject IConfiguration Configuration <style> body { background-color: @Configuration["TestApp:Settings:BackgroundColor"] } h1 { color: @Configuration["TestApp:Settings:FontColor"]; font-size: @Configuration["TestApp:Settings:FontSize"]px; } </style> <h1>@Configuration["TestApp:Settings:Message"] and @Configuration["TestApp:Settings:KeyVaultMessage"]</h1>此程式碼會以與存取組態值
TestApp:Settings:Message相同的方式,存取金鑰保存庫參考TestApp:Settings:KeyVaultMessage的值。
將您的應用程式存取權授與 Key Vault
App Configuration 不會存取您的金鑰保存庫。 相反地,您的應用程式會直接從金鑰庫讀取,因此您必須授予應用程式存取您金鑰庫中秘密的權限。 這樣,秘密就會始終保留在您的應用程式中。 您可以使用 金鑰保存庫存取原則 或 Azure 角色型存取控制 來授與存取權。
本教學課程中的程式碼會使用類別進行 DefaultAzureCredential 驗證。 此彙總權杖認證會自動嘗試數個認證類型,例如 EnvironmentCredential、 、 ManagedIdentityCredentialSharedTokenCacheCredential和 VisualStudioCredential。 如需詳細資訊,請參閱 DefaultAzureCredential 類別。
您可以取代 DefaultAzureCredential 為任何明確的認證類型。 不過,當您使用 DefaultAzureCredential時,您的程式碼可以在本機和 Azure 環境中執行。 例如,當您的應用程式在 Azure 中執行時, DefaultAzureCredential 會使用 ManagedIdentityCredential。 但是,當您使用 Visual Studio 進行本機開發時, DefaultAzureCredential 會自動回復至 SharedTokenCacheCredential 或 VisualStudioCredential。
或者,您可以設定 AZURE_TENANT_ID、 AZURE_CLIENT_ID和 環境 AZURE_CLIENT_SECRET 變數。 當您這樣做時, DefaultAzureCredential 會使用這些變數,並 EnvironmentCredential 使用金鑰保存庫進行驗證。
將應用程式部署至已啟用受控識別的 Azure 服務之後,例如 Azure App Service、Azure Kubernetes Service 或 Azure 容器執行個體,您會授與 Azure 服務的受控識別存取金鑰保存庫的權限。
當您的應用程式在 Azure 中執行時,DefaultAzureCredential 會自動使用 ManagedIdentityCredential。 您可以使用相同的受控識別,來驗證應用程式組態和 Key Vault。 如需詳細資訊,請參閱使用受控識別來存取應用程式組態。
於本機建置並執行應用程式
若要使用 .NET CLI 建置應用程式,請在命令提示字元執行下列命令:
dotnet build建置完成後,請使用下列命令在本機執行 Web 應用程式:
dotnet run在命令的
dotnet run輸出中,尋找 Web 應用程式正在接聽的 URL,例如http://localhost:5292。 開啟瀏覽器並前往該 URL。
網頁上的文字包括以下組件:
- 與 Azure 應用程式組態存放區中
TestApp:Settings:Message金鑰相關聯的值 - 儲存在金鑰保存庫中的 訊息 秘密值
- 與 Azure 應用程式組態存放區中
清除資源
如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。
重要事項
刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含需保留其他資源的資源群組內部,建立本文的資源,則可以從每個資源各自的窗格中個別刪除每個資源,而不必刪除整個資源群組。
- 登入 Azure 入口網站,然後選取 [資源群組]。
- 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
- 在結果清單中,選取資源群組名稱以查看概觀。
- 選取 [刪除資源群組]。
- 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]。
不久後,系統便會刪除該資源群組及其所有的資源。