簡體   English   中英

Azure 應用程序配置、Key Vault 和托管服務身份 (.NET Core 3.1)

[英]Azure App Config, Key Vault & Managed Service Identity (.NET Core 3.1)

我設置了一個簡單的應用程序服務來使用/測試 Azure 應用程序配置

  • Azure App Config 包含 2 個非 KeyVault 條目和 1 個 Key Vault 引用條目
  • Key Vault 設置了適當的訪問策略,允許獲取/列表機密到 Azure 應用程序配置的托管服務標識

我遵循了示例應用程序,所以 CreateHostBuilder 看起來像:

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
    var settings = config.Build();
    config.AddAzureAppConfiguration(settings["ConnectionStrings:AppConfig"]);
})
.UseStartup<Startup>());

部署/運行應用程序時,如果沒有指向 KeyVault 的 Azure App Config 條目,則行為成功。

當我在 Azure App Config 中添加一個指向 KeyVault 的條目時,應用程序將無法啟動(HTTP 錯誤 500.30 - ANCM 進程中啟動失敗),日志顯示此異常:

異常信息:Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException:未配置 Key Vault 憑證,也找不到匹配的秘密客戶端。ErrorCode:,Key:TestConnectionString,Label:,Etag:6ezsqW96CsAet7Ym5H4DedsLTkI,SecretIdentifier: https://testkeyvault vault.azure.net/secrets/TestSecret ---> System.UnauthorizedAccessException:未配置密鑰保管庫憑據,也找不到匹配的秘密客戶端。

似乎很明顯有些東西沒有正確保護,但我已經檢查了很多次並且 Key Vault 有一個訪問策略授予 Azure App Config 身份的 Get/List of Secrets。

我還在主機構建器中嘗試了 ConfigureKeyVault 選項,即

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
    {
        var settings = config.Build();

        config.AddAzureAppConfiguration(options =>
        {
            options.Connect(settings["ConnectionStrings:AppConfig"])
                    .ConfigureKeyVault(kv =>
                    {
                        kv.SetCredential(new DefaultAzureCredential());
                    });
        });
    })
    .UseStartup<Startup>());

Key Vault 上的訪問策略是否向 Azure App Config 身份授予 Get/List of Secrets 所有需要完成的工作,還是我錯過了什么? (我也嘗試過向應用程序服務授予訪問策略,但不走運)。

對於 Key Vault 引用,應用程序需要設置對 App Configuration 和 Key Vault 的身份驗證。 這兩個服務不直接通信,因此應用配置不需要任何對 Key Vault 的訪問權限。 使用ConfigureKeyVault的代碼片段是正確的。 它指定DefaultAzureCredential用於對 Key Vault 進行身份驗證,以解析 Key Vault 引用。

為了允許托管在 Azure 應用服務中的應用程序能夠從 Key Vault 訪問機密,你可以在應用服務上啟用托管標識並在 Key Vault 中授予其 GET 和 LIST 權限。

對於開發環境, 這些說明可用於創建服務主體、授予權限並設置適當的環境變量以供DefaultAzureCredential使用。

對於.Net 6.0,我做了兩個 NuGet package 安裝

Microsoft.Extensions.Configuration.AzureAppConfiguration
Azure.Identity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM