带dev标签的网络安全组端口限制Azure自定义策略解析错误修复
错误排查结果
- 触发报错的直接原因是拼写错误:你在策略规则中写的
exits是非法字段,Azure Policy 判断字段是否存在的正确属性名是exists,拼写错误导致解析失败。 - 除此之外还有3处配置逻辑错误需要修正:
- 参数引用错误:你定义的标签参数名是
tagName,但代码中错误写为parameters('dev'),dev是参数的显示名称,不是参数的调用名;同时你未声明tagValue参数,但代码中直接调用了parameters('tagValue'),会触发二次报错。 - 资源匹配逻辑不符需求:你当前的判断条件是面向网络接口资源,若需求是筛选带
dev标签的网络安全组,需要调整匹配字段逻辑。 - 标签拼接逻辑错误:标签字段的拼接写法不符合Azure Policy表达式规范。
修正后可直接使用的策略定义
如果你需要固定筛选带dev标签的NSG,可直接使用如下配置,无需额外配置标签参数:
{ "properties": { "displayName": "带dev标签的网络安全组应限制所有网络端口访问", "policyType": "Custom", "mode": "All", "description": "仅对带有dev标签的网络安全组做端口限制,禁止入站规则开放Any/Internet范围的全端口访问。", "metadata": { "version": "1.0.0", "category": "Security Center" }, "parameters": { "effect": { "type": "String", "metadata": { "displayName": "Effect", "description": "启用或禁用策略执行" }, "allowedValues": [ "AuditIfNotExists", "Disabled" ], "defaultValue": "AuditIfNotExists" } }, "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Network/networkSecurityGroups" }, { "field": "tags['dev']", "exists": "true" } ] }, "then": { "effect": "[parameters('effect')]", "details": { "type": "Microsoft.Security/assessments", "name": "3b20e985-f71f-483b-b078-f30d73936d43", "existenceCondition": { "field": "Microsoft.Security/assessments/status.code", "in": [ "NotApplicable", "Healthy" ] } } } } }, "id": "/providers/Microsoft.Authorization/policyDefinitions/custom-nsg-dev-port-restrict", "type": "Microsoft.Authorization/policyDefinitions", "name": "custom-nsg-dev-port-restrict" }
如果需要保留可配置的标签参数,可在parameters节点补充tagValue的声明即可。
内容的提问来源于stack exchange,提问作者SyedAsadRazaDevops
相关产品推荐
相关产品推荐

