You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure App Service中从Azure Vault读取密钥遇问题(Visual Studio)

Azure App Service无法解析@Microsoft.KeyVault配置语法的解决方案

问题根源

Azure Function App的host.settings.json中支持的@Microsoft.KeyVault(SecretUri=...)语法是Function Runtime特有的内置解析逻辑,Azure App Service的配置系统默认不会自动识别并解析这个格式的字符串,所以直接写在appsettings.Development.json里会被当成普通文本返回。

解决方案

方案1:通过Azure Portal配置(推荐,和Function App体验一致)

  1. 进入目标App Service的「配置」→「应用程序设置」页面
  2. 点击「新建应用程序设置」,填写键名(比如key),值填写:
    @Microsoft.KeyVault(SecretUri=https://{vaultName}.vault.azure.net/secrets/{secretName}/)
    
  3. 确保App Service的托管标识已被授予Key Vault的「机密读取」权限:
    • 在Key Vault的「访问策略」中添加新策略,主体选择App Service的系统托管标识,权限勾选「机密」→「读取」
  4. 保存配置后,代码中直接调用configuration["key"]即可获取实际密钥,Portal层面会自动完成语法解析和密钥拉取。

方案2:代码层面集成Key Vault配置源

如果需要在本地开发或通过代码主动拉取Key Vault密钥,可在Program.cs中添加Key Vault作为配置源:

var builder = WebApplication.CreateBuilder(args);

// 引入Key Vault配置源
var keyVaultUri = new Uri("https://{vaultName}.vault.azure.net/");
builder.Configuration.AddAzureKeyVault(
    keyVaultUri,
    new DefaultAzureCredential());

var app = builder.Build();

// 直接通过配置密钥名获取(注意这里用的是Key Vault里的机密名称,不是自定义键名)
var secretValue = builder.Configuration["{secretName}"];
  • 本地开发时:确保已通过Azure CLI登录(az login),或设置AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_TENANT_ID环境变量以获取访问权限
  • 生产环境:启用App Service的系统托管标识,并授予Key Vault的机密读取权限即可。

补充说明

  • 不要在appsettings.json或appsettings.Development.json中直接写@Microsoft.KeyVault语法,App Service的本地配置文件不会触发解析逻辑
  • 若需批量导入Key Vault机密,可在Key Vault的「机密」页面中直接管理,或通过Azure CLI/ARM模板自动化配置

内容的提问来源于stack exchange,提问作者DrGriff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:54:59