我设置了一个简单的应用服务来使用/测试 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 应用程序配置条目,则该行为成功。
当我在指向 KeyVault 的 Azure App Config 中添加一个条目时,该应用程序将无法启动(HTTP 错误 500.30 - ANCM In-Process Start Failure),日志显示此异常:
异常信息:Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException:未配置密钥保管库凭据,也找不到匹配的秘密客户端。错误代码:,密钥:TestConnectionString,标签:,Etag:6ezsqW96CsAet7Ym5H4DedsLTkI,SecretIdentifier:https://testkeyvault。 vault.azure.net/secrets/TestSecret ---> System.UnauthorizedAccessException:未配置密钥保管库凭据,也找不到匹配的秘密客户端。
很明显,有些东西没有得到正确保护,但我已经检查了很多次,并且 Key Vault 有一个访问策略,将 Get/List of Secrets 授予 Azure App Config 身份。
我还尝试了主机生成器中的 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 是所有需要完成的事情,还是我错过了什么?(我也尝试过向应用服务授予访问策略,但不走运)。