首页 > 解决方案 > 将 Azure Key Vault 与 Azure 应用配置相结合

问题描述

我对 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为了清楚起见,我指的是这个值:

在此处输入图像描述

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

提前致谢

标签: azureasp.net-core.net-coreazure-web-app-serviceazure-keyvault

解决方案


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

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

确保您对 KV 的访问策略使用您应用的服务主体。 我再说一遍请确保您对 KV 的访问策略正在使用您的应用程序的服务主体。 它可能只需要权限“list”和“get”来获取秘密,而不需要其他任何东西。

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

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


推荐阅读