繁体   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