如何从Azure KeyVault读取Application Insights密钥并在ASP.NET Core中DI注入
从Azure KeyVault读取Application Insights密钥并配置依赖注入
1. 安装所需NuGet包
- 确保已安装
Microsoft.ApplicationInsights.AspNetCore(若之前已使用Application Insights,通常已存在) - 添加Azure KeyVault配置包:
# Package Manager Console Install-Package Azure.Extensions.AspNetCore.Configuration.Secrets # 或dotnet CLI dotnet add package Azure.Extensions.AspNetCore.Configuration.Secrets
2. 移除appsettings.json中的Application Insights配置
直接删除以下配置段:
"ApplicationInsights": { "InstrumentationKey": "xxxx-xxxxxx-xxxxx-xxxxxxx" }
3. 在Azure KeyVault中添加密钥
在你的Azure KeyVault实例中创建一个机密(Secret):
- 名称设为
ApplicationInsights--InstrumentationKey(双横线对应配置层级的分隔规则) - 值填写你的Application Insights Instrumentation Key
4. 配置应用读取Azure KeyVault
.NET 6+(Program.cs 顶级语句)
var builder = WebApplication.CreateBuilder(args); // 添加Azure KeyVault作为配置源 var keyVaultUri = new Uri(builder.Configuration["KeyVaultUri"]); // KeyVaultUri可从环境变量或本地非敏感配置(如appsettings.Development.json)中读取 builder.Configuration.AddAzureKeyVault(keyVaultUri, new DefaultAzureCredential()); // 配置Application Insights,自动从KeyVault读取密钥 builder.Services.AddApplicationInsightsTelemetry(); // 其他服务配置... var app = builder.Build(); // 中间件配置... app.Run();
.NET 5及更早版本(Startup.cs)
public class Startup { public IConfiguration Configuration { get; } public Startup(IConfiguration configuration) { var configBuilder = new ConfigurationBuilder() .AddConfiguration(configuration) .AddAzureKeyVault( new Uri(configuration["KeyVaultUri"]), new DefaultAzureCredential()); Configuration = configBuilder.Build(); } public void ConfigureServices(IServiceCollection services) { // 绑定配置并启用Application Insights services.AddApplicationInsightsTelemetry(Configuration); // 其他服务配置... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 中间件配置... } }
身份验证说明:DefaultAzureCredential会自动适配不同环境:
- 本地开发:优先使用Azure CLI、Visual Studio/VS Code已登录的账户
- Azure部署:优先使用托管标识(需给KeyVault访问策略添加托管标识的「机密获取/列表」权限)
5. 验证依赖注入
只要正确配置了AddApplicationInsightsTelemetry,即可在控制器或服务中直接注入TelemetryClient使用:
[ApiController] [Route("[controller]")] public class DemoController : ControllerBase { private readonly TelemetryClient _telemetryClient; public DemoController(TelemetryClient telemetryClient) { _telemetryClient = telemetryClient; } [HttpGet] public IActionResult Get() { // 记录自定义事件 _telemetryClient.TrackEvent("DemoEndpointAccessed"); return Ok("Success"); } }
6. 本地调试注意事项
本地开发时,确保已通过Azure CLI登录账户:
az login
或在Visual Studio中关联你的Azure账户,让DefaultAzureCredential能正常访问KeyVault。
内容的提问来源于stack exchange,提问作者Samadhan Chavan
相关产品推荐
相关产品推荐

