【问题标题】:Azure Policy to Audit NSG rule sourceAddressPrefix用于审核 NSG 规则 sourceAddressPrefix 的 Azure 策略
【发布时间】:2020-05-08 08:25:02
【问题描述】:

在 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,我相信这是我的问题。

【问题讨论】:

标签: azure azure-policy azure-nsg


【解决方案1】:

您可以使用 notIn 条件代替 notEquals 来检查数组中的值。 notIn 像预期的那样工作,您可以摆脱上述错误。

{
        "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",
                                            "notIn": [
                                                "192.168.0.0/24",
                                                "192.168.1.0/24"
                                            ]
                                        }
                                    ]
                                }
                            ]
                        }
                    },
                    "greater": 0
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }

【讨论】:

  • 我刚刚发现了这一点,但它是否确保它们包含两个 CIDR?因此,例如,如果 192.168.0.0/24 存在,但 192.168.1.0/24 不存在,我希望它引起审计
  • 您询问如何传递多个 CIDR 范围并显示错误。这就是我的答案。
猜你喜欢
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
相关资源
最近更新 更多