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

如何配置Azure策略禁止为已有诊断设置的资源添加第二个诊断设置?

解决Azure策略禁止重复添加诊断设置的问题

你的原策略直接拒绝所有Microsoft.Insights/diagnosticSettings类型的资源创建,这会导致第一个诊断设置也无法添加,而且没有关联目标资源的已有诊断设置检查,完全不符合需求。

以下是可以实现需求的正确策略代码:

{
    "mode": "Indexed",
    "policyRule": {
        "if": {
            "allOf": [
                {
                    "field": "type",
                    "equals": "Microsoft.Insights/diagnosticSettings"
                },
                {
                    "exists": "true",
                    "field": "Microsoft.Insights/diagnosticSettings/resourceId",
                    "namespace": "Microsoft.Insights",
                    "resourceType": "diagnosticSettings",
                    "scope": "[field('Microsoft.Insights/diagnosticSettings/resourceId')]"
                }
            ]
        },
        "then": {
            "effect": "deny"
        }
    },
    "parameters": {
        "targetResourceTypes": {
            "type": "Array",
            "metadata": {
                "displayName": "目标资源类型",
                "description": "指定需要限制重复诊断设置的资源类型,例如['Microsoft.Compute/virtualMachines', 'Microsoft.Storage/storageAccounts']"
            },
            "defaultValue": []
        }
    }
}

关键逻辑说明

  • mode: Indexed:诊断设置属于子资源,使用Indexed模式才能正确关联父资源的属性进行检查。
  • allOf条件组合:
    1. 先判断当前创建的资源是诊断设置类型;
    2. 通过exists函数,针对要绑定诊断设置的目标资源(由resourceId字段指定),检查该资源下是否已经存在至少一个诊断设置。scope参数限定了检查范围,确保只验证当前目标资源的已有配置。
  • 参数配置:可选的targetResourceTypes参数可以让你指定需要应用该限制的资源类型,避免全局生效到所有资源。

如果需要精准限制特定资源类型,可在allOf数组中添加以下条件:

{
    "field": "Microsoft.Insights/diagnosticSettings/resourceId",
    "like": "[concat('*/', parameters('targetResourceTypes')[*])]"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:08:29