3

我设置了一个简单的应用服务来使用/测试 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 是所有需要完成的事情,还是我错过了什么?(我也尝试过向应用服务授予访问策略,但不走运)。

4

1 回答 1

11

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

为了允许托管在 Azure App Service 中的应用程序能够访问 Key Vault 中的机密,可以在 App Service 上启用托管标识并在 Key Vault 中授予其 GET 和 LIST 权限。

对于开发环境,这些指令可用于创建服务主体、授予权限并设置适当的环境变量以供DefaultAzureCredential.

于 2020-05-13T02:10:51.887 回答