将 Azure Key Vault 与 Azure 应用程序配置相结合

Combine Azure Key Vault with Azure App Configuration

我是 Azure 的新手,我正在尝试模拟真实的生产环境。 因此,我已将 .netcore 3.1 应用程序部署到 AppService 资源。此 Web 应用能够从其他两个服务获取配置 - KeyVault 和应用配置。我已经配置了 AppService 标识。

  1. 我可以使用以下代码从 KeyVault 获取密钥:

    var settings = config.Build();
    var web = settings["KeyVault:Name"];
    var clientId = settings["KeyVault:ClientId"];
    var clientSecret = settings["KeyVault:ClientSecret"];
    
    config.AddAzureKeyVault($"https://{web}.vault.azure.net/",
                            clientId,
                            clientSecret);
    
  2. 因为我可以从应用程序配置中获取密钥:

    var settings = config.Build();
    config.AddAzureAppConfiguration(settings["AppSettings:Endpoint"]);
    
  3. 而且我可以通过身份和 AppConfiguration 的关键参考同时使用它们

    var settings = config.Build();
    config.AddAzureAppConfiguration(options =>
    {
        options
       .Connect(settings["AppSettings:Endpoint"])
       .ConfigureKeyVault(kv =>
       {
           kv.SetCredential(new DefaultAzureCredential());
       });
    });
    

所以,我的问题是关于代码片段 #3:在生产环境中将 AppSettings:Endpoint 值存储到 appconfig.json 是否安全?明确地说,我指的是这个值:

此外,我找到了 here 以及如何同时使用这两项服务的说明。但首先,该解决方案对我不起作用 - 我得到 Azure.Identity.CredentialUnavailableException: 'ManagedIdentityCredential authentication unavailable, no managed identity endpoint found.'。 另一方面,他不清楚 AppSettings:AppConfiguration:EndpointAppSettings:Identity:ClientId 值的存储位置,所以它没有回答我的第一个问题。

提前致谢

简短回答 - 端点 https://[your_app_name].azconfig.io 可以安全地离开任何地方。如果没有构成连接字符串的其他部分,它什么也不做。

长答案 - 您可以并且可能应该将敏感部分、连接字符串及其部分作为机密存储在 Key Vault 中。如果您的代码需要这些值,您可以选择如何获取这些值。考虑使用 Web 配置(它相当于通常具有秘密值但将 Key Vault 引用放在那里的地方。您的方式也有效。请记住,如果您的配置偏离您的配置,您的方式可能需要更改代码已编码。

确保您对 KV 的访问策略正在使用您应用的服务主体。我再说一遍确保您对 KV 的访问策略正在使用您的应用程序的服务主体。 它可能只需要权限 "list" 和 "get" 用于机密,其他什么都不需要。

不要将机密存储在您的网络配置或其等效项中。 Key Vault 几乎是免费的,而且非常便宜。如果应用程序没有将自己的保管库作为解决方案的一部分,我不会部署应用程序。

如果不清楚或需要网络参考,请发表评论。

您应该能够使用 Azure Marange Identity 连接到 APP 配置。使用 Azure.Identity 预览版。

c# 示例 https://github.com/nishanperera/Azure-App-Configuration-With-Key-Vault