簡體   English   中英

使用 KeyVault 機密覆蓋 Azure 應用服務中和本地的應用設置

[英]Using KeyVault secrets to override appsettings in Azure App Service and locally

嘗試從 C# 應用服務中的 KeyVault 檢索機密。

本地機器:

  • Visual Studio > 工具 > 選項 > Azure 服務身份驗證 - 經過身份驗證的 Azure 帳戶

  • 如果使用 vs 代碼等,可能會在dotnet run的 shell 中使用az login 。未檢查。

天藍色

  • 應用服務刀片:
    • 將應用服務標識設置為System Assigned
  • KeyVault 刀片:
    • 創建 KeyVault
    • 創建的秘密:名稱 = "Foo"
    • 鑒於我自己管理機密訪問策略
    • 給定應用服務身份獲取和列出秘密訪問策略

appsettings.json

...
"KeyVaultName" : "abc123",
"Secrets": {
    "One" : "@Microsoft.KeyVault(Secreturi=[uri to secret copied from Azure blade])"
}
...

程序.cs

...
using Azure.Extensions.AspNetCore.Configuration.Secrets;
using Azure.Identity;
...
public static IHostBuilder CreateHostBuilder(string[] args)
    {
        return Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((context, config) =>
            {
                var builtConfig = config.Build();
                var secretClient = new SecretClient(
                    new Uri($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/"),
                    new DefaultAzureCredential());
                config.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
    }

結果

我剛剛獲得了@Microsoft ...值,我希望將其映射到密鑰庫中的值。

似乎有些不對勁,因為我必須兩次定義密鑰庫的名稱,一次在 SecretClient 中,一次在 @Microsoft.KeyVault 參考中。

似乎我混合了兩種從 KeyVault 獲取機密的方法。

配置提供程序

我在Program.cs中添加的是一個配置提供程序,它將機密映射到配置集合中。 Startup.cs放置一個斷點並檢查配置集合中的值驗證了這一點。

我應該做的是命名秘密Secret--One它將映射和覆蓋本地配置值{ "Secret: { "One" : "..." } } 。不能使用:__在環境變量配置映射中使用因為這些字符在秘密名稱中不受支持。

感覺我在這里仍然缺少一些東西,所以請在評論或其他答案中更新。

KeyVault 參考

另一方面,如果要使用 Azure 應用程序設置(應用服務配置)邊欄選項卡上設置的環境變量覆蓋配置值,則可以使用 KeyVault 引用。

這樣做的問題是您仍然需要另一種方法來確保您不會在本地保存機密並冒着將它們提交給源代碼控制的風險。

參考

暫無
暫無

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

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