Azure App配置,密钥库和;托管服务身份 (.NET Core 3.1)

问题描述 投票:0回答:1

我有一个简单的应用服务设置来测试Azure应用配置。

  • Azure App 配置包含 2 个非 KeyVault 条目,1 个条目为 Key Vault 引用
  • 密钥库设置了适当的访问策略,允许将秘密的GetList转到Azure App Config的Managed Service Identity上。

我已经按照 申请书样本,所以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 Error 500.30 - ANCM In-Process Start Failure),日志显示了这个异常。

异常信息。Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaultReferenceException: 没有配置密钥库凭证,也找不到匹配的秘密客户端。ErrorCode:, Key:TestConnectionString, Label:, Etag:6ezsqW96CsAet7Ym5H4DedsLTkI, SecretIdentifier:https:/testkeyvault.vault.azure.netsecretsTestSecret。 ---> System.UnauthorizedAccessException: 没有配置密钥库凭证,也找不到匹配的秘密客户端。

这似乎很明显,有些东西没有被正确地保护起来,但我已经检查了很多次,密钥金库有一个访问策略,授予Azure App Config身份的秘密GetList。

我也试过主机构建器中的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上的访问策略将GetList of Secrets授予Azure App Config身份是所有需要做的事情,还是我错过了什么? 我也试过向应用服务授予访问策略,没有成功)。

azure azure-web-sites azure-keyvault azure-app-configuration
1个回答
2
投票

对于Key Vault引用,应用程序需要同时设置对App Configuration和Key Vault的认证。这两个服务并不直接通信,所以 App Configuration 不需要对 Key Vault 有任何访问权限。代码片段中使用了 ConfigureKeyVault 是正确的。它规定 DefaultAzureCredential 以用于对 Key Vault 进行身份验证,以便解析 Key Vault 引用。

为了让您托管在 Azure App Service 中的应用程序能够访问 Key Vault 中的秘密,您可以在 App Service 上启用托管身份,并在 Key Vault 中授予其 GET 和 LIST 权限。

对于开发环境。这些 指令可用于创建服务委托人、授予权限和设置适当的环境变量,以便由 DefaultAzureCredential.

© www.soinside.com 2019 - 2024. All rights reserved.