Azure应用程序配置、密钥库和;托管服务标识(.NET Core 3.1)

Azure应用程序配置、密钥库和;托管服务标识(.NET Core 3.1),azure,azure-web-app-service,azure-keyvault,azure-app-configuration,Azure,Azure Web App Service,Azure Keyvault,Azure App Configuration,我设置了一个简单的应用程序服务来使用/测试Azure应用程序配置 Azure应用程序配置包含2个非KeyVault条目和1个作为密钥Vault引用的条目 密钥库是使用正确的访问策略设置的,允许获取/列出Azure应用程序配置的托管服务标识的机密 我遵循了,因此CreateHostBuilder看起来像: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(arg

我设置了一个简单的应用程序服务来使用/测试Azure应用程序配置

  • Azure应用程序配置包含2个非KeyVault条目和1个作为密钥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>());
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
webBuilder.ConfigureAppConfiguration((hostingContext,config)=>
{
var settings=config.Build();
config.AddAzureAppConfiguration(设置[“ConnectionString:AppConfig”]);
})
.UseStartup());
部署/运行应用程序时,如果没有指向KeyVault的Azure应用程序配置条目,则该行为将成功

当我在Azure App Config中添加指向KeyVault的条目时,应用程序将不会启动(HTTP错误500.30-ANCM进程中启动失败),日志显示此异常:

异常信息:Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVault引用异常:未配置密钥库凭据,也找不到匹配的机密客户端。。错误代码:,键:TestConnectionString,标签:,Etag:6ezsqW96CsAet7Ym5H4DedsLTkI,机密标识符: --->System.UnauthorizedAccessException:未配置密钥库凭据,也找不到匹配的机密客户端

很明显有些东西没有得到正确的保护,但我已经检查了很多次,密钥库有一个访问策略,允许获取Azure应用程序配置标识的机密/机密列表

我还尝试了主机生成器中的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>());
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
webBuilder.ConfigureAppConfiguration((hostingContext,config)=>
{
var settings=config.Build();
config.AddAzureAppConfiguration(选项=>
{
options.Connect(设置[“ConnectionString:AppConfig”])
.ConfigureKeyVault(kv=>
{
kv.SetCredential(新的DefaultAzureCredential());
});
});
})
.UseStartup());

密钥库上的访问策略是否允许获取Azure应用程序配置标识的机密/机密列表?我是否遗漏了什么?(我还尝试向应用程序服务授予访问策略,运气不好)。

对于密钥库引用,应用程序需要设置对应用程序配置和密钥库的身份验证。这两个服务不直接通信,因此应用程序配置不需要对密钥库拥有任何访问权限。使用
ConfigureKeyVault
的代码段是正确的。它指定
DefaultAzureCredential
,用于对密钥库进行身份验证,以解析密钥库引用

为了使托管在Azure App Service中的应用程序能够访问密钥保管库中的机密,您可以在应用程序服务上启用托管标识,并授予其在密钥保管库中获取和列出权限


对于开发环境,可以使用说明创建服务主体、授予权限和设置适当的环境变量,以供
DefaultAzureCredential

使用。对于密钥库引用,应用程序需要设置对应用程序配置和密钥库的身份验证。这两个服务不直接通信,因此应用程序配置不需要对密钥库拥有任何访问权限。使用
ConfigureKeyVault
的代码段是正确的。它指定
DefaultAzureCredential
,用于对密钥库进行身份验证,以解析密钥库引用

为了使托管在Azure App Service中的应用程序能够访问密钥保管库中的机密,您可以在应用程序服务上启用托管标识,并授予其在密钥保管库中获取和列出权限


对于开发环境,可以使用说明创建服务主体、授予权限和设置适当的环境变量,以供
DefaultAzureCredential

使用。您是否可以为应用程序系统标识提供“创建”机密的功能?您是否可以为应用程序系统标识提供“创建”机密的功能秘密?