如何从 Azure 应用服务中托管的 .Net Framework Asp.Net 应用程序访问 Azure Key Vault?

How do I access an Azure KeyValut from an .Net Framework Asp.Net application hosted in an Azure App Service?

我对 Azure 比较陌生,我正在努力弄清楚如何将使用集成到我们的遗留应用程序中。没有计划 rewrite/migrate 这些应用程序到 .Net Core。

我有一个 .Net Framework(非核心)Asp.Net Web 应用程序。我将其托管在 Azure 应用服务中。我已经创建了一个 Azure Key Vault 服务和机密。使用应用服务的系统定义标识,我添加了对 Key Vault 实例的访问权限。

如何从 Asp.Net 应用程序访问 Key Vault 和包含的机密? 我见过的几乎所有 examples/samples 都是基于 .Net Core 的。

类似的方法是否适用于 .Net Framework 控制台应用程序?

  • ASP.NET 中的配置生成器提供了一种使用 Key Vault.
  • 修改和覆盖 web.config 文件中的值的方法

实施步骤

  • 将机密添加到 Key Vault - Steps to create Key Vault

  • 重要的是,机密必须与您要替换的应用设置同名。 例如,如果您的 Web.config 文件中有一个带有密钥 MyConnStr 的应用程序设置,则您必须在 Key Vault 中创建一个具有相同名称和相同值的机密。

  • 将您的 Web 应用程序的访问权限授予存储在 Key Vault 中的机密。使用 Web App 的托管身份功能。

    一个。在 Web 应用程序上启用系统管理的标识:

    b。使用相关权限授予对 Key Vault 上的 Web 应用程序的访问权限

  • 转到您的密钥保管库并导航到左侧导航中的访问策略:

  • Select 所需的权限。
  • 将以下 NuGet 包添加到您的项目中:
_Microsoft.Azure.KeyVault_
_Microsoft.Azure.KeyVault.WebKey_
_Microsoft.Azure.Services.AppAuthentication_
_Microsoft.Configuration.ConfigurationBuilders.Azure_
_Microsoft.Configuration.ConfigurationBuilders.Base_
_Microsoft.IdentityModel.Clients.ActiveDirectory_
_Microsoft.Rest.ClientRuntime_
_Microsoft.Rest.ClientRuntime.Azure_
  • Web.config
  • 中修改 appsettingsconnectionstrings 标签
<appSettings configBuilders="AzureKeyVault">
    <add key="KEY_VAULT_NAME" value="from key vault" />
</appSettings>
<configBuilders>
  <builders> 
    <add name="AzureKeyVault" vaultName="${KEY_VAULT_NAME}" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure, Version=2.0.0.0, Culture=neutral" />
  </builders>
</configBuilders>
  • 在你的.cs文件中添加,
var MyKey=ConfigurationManger.AppSettings["KEY_VAULT_NAME"];
  • 在配置值上添加一个断点,您可以看到应用程序正在从 Azure Key Vault 读取而不是配置文件中提供的值。

更多信息请参考MS Doc

当我运行在 Azure 应用服务中部署 Web 应用程序时,上述解决方案效果很好。当我尝试在本地 运行 时,出现异常..

Configuration Error Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: The configBuilder 'AzureKeyVault' failed while processing the configuration section 'appSettings'.: Error in Configuration Builder 'AzureKeyVault'::GetValue(AppName)