如何限制向Azure Application Insights发送数据的主体范围
Application Insights 遥测发送权限限制可行方案
以下方案均可以避免instrumentation key泄露后非授权端上报数据,且不需要使用私有链路,不会产生额外的网络传输成本:
1. 基于Azure AD身份验证实现权限管控(最优方案,完全匹配你的AD角色/VM限定需求)
Application Insights 官方支持通过Azure AD身份验证校验遥测上报请求,开启后单纯持instrumentation key的请求会被直接拒绝:
- 配置步骤:
- 给你的Azure VM分配系统托管标识,也可以给3个ASP.NET应用分别分配独立的用户托管标识,实现3个应用和对应App Insights资源的粒度隔离
- 进入每个App Insights资源的访问控制(IAM) 页面,为对应VM/应用的托管标识授予
Monitoring Metrics Publisher角色,该角色仅拥有遥测上报权限,无其他资源管理权限 - 修改ASP.NET应用的App Insights SDK配置,改用Azure AD身份验证上报,手动埋点的应用代码示例:
using Azure.Identity; using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.Extensibility; var telemetryConfig = new TelemetryConfiguration { ConnectionString = "对应App Insights资源的连接字符串", Credential = new DefaultAzureCredential() }; var telemetryClient = new TelemetryClient(telemetryConfig); - 无代码代理也兼容该配置,只需要在VM的代理配置项中指定使用托管标识即可,无需修改应用代码
- 最后在App Insights资源的属性页面开启「禁用本地身份验证」开关,完成配置后所有非Azure AD授权的上报请求都会被拦截
2. 基于公网IP白名单做访问控制(低成本,适合VM公网IP固定的场景)
如果你的Azure VM配置了固定公网出口IP,可以直接通过App Insights自带的IP过滤规则限制上报源:
- 进入App Insights资源的网络隔离页面,在「允许的IP范围」配置项中仅添加VM的公网出口IP,其余公网IP的上报请求会被直接拒绝
- 该配置不需要开通私有链路,不会产生额外的传输费用,仅需要VM保留固定公网IP即可
3. 自定义标记+引入过滤规则(轻量兜底方案,可搭配上述方案使用)
你可以在生产侧应用上报的所有遥测数据中添加唯一的自定义环境标记,再通过App Insights的引入规则过滤掉无标记的无效数据:
- 首先通过遥测初始化器给所有生产侧上报的遥测添加自定义属性,代码示例:
public class EnvMarkerTelemetryInitializer : ITelemetryInitializer { public void Initialize(ITelemetry telemetry) { // 标记值可自行设置为只有生产环境才会带的唯一值 telemetry.Properties["ProductionMarker"] = "Your_Unique_Production_Key"; } } // 注册初始化器 TelemetryConfiguration.Active.TelemetryInitializers.Add(new EnvMarkerTelemetryInitializer()); - 进入App Insights的引入采样页面创建过滤规则,将
ProductionMarker属性不等于指定值的遥测数据全部丢弃,就算有非授权端持instrumentation key上报,无有效标记的数据也不会被计入指标统计
内容的提问来源于stack exchange,提问作者wishiwasabigdataguy
相关产品推荐
相关产品推荐

