Azure对端口范围的策略支持

时间:2020-03-17 18:26:55

标签: azure azure-policy

问题-因此,我想阻止创建NSG的人打开对某些端口(22、3389等)的Internet访问。我可以创建一个策略来阻止特定的端口,例如

{
"allOf": [{
        "field": "Microsoft.Network/networkSecurityGroups/securityRules/access",
        "equals": "Allow"
    },
    {
        "field": "Microsoft.Network/networkSecurityGroups/securityRules/direction",
        "equals": "Inbound"
    },
    {
        "anyOf": [{
                "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange",
                "equals": "22"
            },
            {
                "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange",
                "equals": "3389"
            }
        ]
    }
]

如果安全规则中使用了特定端口,这将阻止创建NSG。但是,如果有人创建允许端口范围的NSG规则(例如3300-3400),则可以绕开它。

想知道策略如何处理端口范围以及在这种情况下最佳方法是什么。

我尝试了destinationPortRanges [*]数组,但是它不起作用。

{
"not": {
    "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRanges[*]",
    "Equals": "22"
}

}

当destinationPortRanges指定为“ 20-25”时,该规则仍允许创建NSG。

1 个答案:

答案 0 :(得分:1)

查看内置策略“ RDP access from the Internet should be blocked”。 还有SSH access from the Internet should be blocked

说实话,阅读起来很痛苦,但是看起来它确实满足了您的需求。

{
                "anyOf": [
                  {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange",
                    "equals": "*"
                  },
                  {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange",
                    "equals": "3389"
                  },
                  {
                    "value": "[if(and(not(empty(field('Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange'))), contains(field('Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange'),'-')), and(lessOrEquals(int(first(split(field('Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange'), '-'))),3389),greaterOrEquals(int(last(split(field('Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRange'), '-'))),3389)), 'false')]",
                    "equals": "true"
                  },
                  {
                      "count": {
                        "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRanges[*]",
                        "where": {
                          "value": "[if(and(not(empty(first(field('Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRanges[*]')))), contains(first(field('Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRanges[*]')),'-')), and(lessOrEquals(int(first(split(first(field('Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRanges[*]')), '-'))),3389),greaterOrEquals(int(last(split(first(field('Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRanges[*]')), '-'))),3389)) , 'false')]",
                          "equals": "true"
                        }
                      },
                      "greater": 0
                  },
                  {
                    "not": {
                      "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRanges[*]",
                      "notEquals": "*"
                    }
                  },
                  {
                    "not": {
                      "field": "Microsoft.Network/networkSecurityGroups/securityRules/destinationPortRanges[*]",
                      "notEquals": "3389"
                    }
                  }
                ]
              },