在 Azure 中,我有一个 NSG 规则配置如下:
我正在尝试编写一个 Azure 策略来审核源 IP 地址/CIDR 范围是否设置正确。
该值应始终完全等于:192.168.0.0/24,192.168.1.0/24。
如果不是那个确切的值,则应该进行审计。
这是我写的定义:
{
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Network/networkSecurityGroups"
},
{
"field": "name",
"like": "jeffweb2-dr-sm-nsg"
},
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].name",
"equals": "SQL"
},
{
"anyof": [
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].sourceAddressPrefix",
"notEquals": [
"192.168.0.0/24",
"192.168.1.0/24"
]
}
]
}
]
}
},
"greater": 0
}
]
},
"then": {
"effect": "audit"
}
}
但是当尝试用这个 json 创建定义时,我收到错误:
New-AzPolicyDefinition : InvalidPolicyRule : Failed to parse policy rule: 'Error reading string. Unexpected token: StartArray. Path 'notEquals'.'.
问题:如何将多个 CIDR 范围传递到 notEquals,我相信这是我的问题。
答案1
sourceAddressPrefix 仅支持单个 IP 范围,您需要使用 sourceAddressPrefixes。
门户中的 UI 隐藏了这一点,但它们是 ARM 中的两个不同的属性。