.NET Core控制台应用如何将appsettings.json密钥存储到Azure Key Vault
.NET Core控制台应用接入Azure Key Vault实现密钥安全存储方案
1. 前置操作(必须先完成)
- 第一步创建Azure Key Vault资源:在Azure Portal中搜索「密钥保管库」,按指引创建即可,定价层选标准层满足绝大多数场景需求
- 将敏感配置存入Key Vault:进入刚创建的密钥保管库,在「密钥」-「生成/导入」中依次添加你提到的5项配置:
BlobConnectionString、KustoConnectionString、ClientId、ClientSecret、ApplicationInsightsInstrumentationKey,注意密钥名称只能包含字母、数字和短横线,命名尽量和原来appsettings中的键名保持一致,减少后续代码改动 - 配置访问权限:在Key Vault的「访问策略」中,为你后续要访问Key Vault的身份授予「密钥获取」权限:
- 本地开发阶段:给你自己的Azure工作账号授权
- 线上部署阶段:给控制台部署所在的Azure资源(如VM、容器实例、App Service等)的托管身份授权
2. 项目改动说明
- 首先安装所需NuGet包:
Azure.Identity Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.Json Microsoft.Extensions.Configuration.AzureKeyVault
- 原有appsettings.json处理:直接删除上述5个敏感配置的键值对,仅保留非敏感的业务配置即可,不需要留空值或占位符,避免敏感信息误提交到代码仓库
3. 代码实现示例(.NET 6+ 顶级语句写法,兼容最新.NET版本)
using Azure.Identity; using Microsoft.Extensions.Configuration; // 构建配置源,顺序为:先读appsettings.json,再读Azure Key Vault,Key Vault中的同键名配置会覆盖本地配置 var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) // 接入Azure Key Vault .AddAzureKeyVault( new Uri("https://<你的Key Vault名称>.vault.azure.cn/"), // 国内Azure后缀是vault.azure.cn,国际版是vault.azure.net new DefaultAzureCredential() ) .Build(); // 读取配置的方式和之前完全一致,不需要改动后续业务代码 var blobConnStr = configuration["BlobConnectionString"]; var kustoConnStr = configuration["KustoConnectionString"]; var clientId = configuration["ClientId"]; var clientSecret = configuration["ClientSecret"]; var aiKey = configuration["ApplicationInsightsInstrumentationKey"]; // 原有业务逻辑不变,继续执行拉取数据、Kusto查询、上传Azure的逻辑即可
4. 补充说明
DefaultAzureCredential会自动按优先级读取可用身份:本地开发时自动读取VS/VS Code/Azure CLI中登录的Azure账号身份,线上部署时自动读取托管身份,全程不需要在代码或配置中写入任何访问Key Vault的密钥- 如果是低于.NET 6的版本,只需要把配置构建逻辑放到Program类的Main方法中即可,配置读取逻辑完全一致
内容的提问来源于stack exchange,提问作者Noobie2021
相关产品推荐
相关产品推荐

