【问题标题】:Azure App Config, Key Vault & Managed Service Identity (.NET Core 3.1)Azure 应用配置、Key Vault 和托管服务标识 (.NET Core 3.1)
【发布时间】:2020-08-29 00:30:12
【问题描述】:

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

  • Azure 应用配置包含 2 个非 KeyVault 条目和 1 个作为 Key Vault 引用的条目
  • Key Vault 设置了适当的访问策略,允许获取/列出 Azure 应用配置的托管服务标识的机密

我关注了sample application,所以 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 应用程序配置条目,则该行为成功。

当我在 Azure App Config 中添加一个指向 KeyVault 的条目时,应用程序将无法启动(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 有一个访问策略,授予 Azure App Config 身份的 Get/List of Secrets。

我也尝试过主机生成器中的 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 是所有需要完成的事情,还是我错过了什么? (我也尝试过为应用服务授予访问策略,但没有成功)。

【问题讨论】:

  • 您能否赋予您的应用系统身份“创建”秘密的能力?

标签: azure azure-web-app-service azure-keyvault azure-app-configuration


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-06-02
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2020-03-10
    • 1970-01-01
    • 2019-12-22
    • 2022-09-28
    相关资源
    最近更新 更多