Azure Policy 패턴: count 연산자

count 연산자는 [*] 별칭의 멤버를 평가합니다.

샘플 정책 정의

이 정책 정의는 인바운드 RDP(원격 데스크톱 프로토콜) 트래픽을 허용하도록 구성된 네트워크 보안 그룹을 감사합니다.

{
    "properties": {
        "mode": "all",
        "displayName": "Audit Network Security Groups for RDP",
        "description": "This policy audits NSGs with RDP ports enabled",
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Network/networkSecurityGroups"
                    },
                    {
                        "count": {
                            "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
                            "where": {
                                "allOf": [{
                                        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
                                        "equals": "Inbound"
                                    },
                                    {
                                        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
                                        "equals": "Allow"
                                    },
                                    {
                                        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
                                        "equals": "3389"
                                    }
                                ]
                            }
                        },
                        "greater": 0
                    }
                ]
            },
            "then": {
                "effect": "audit"
            }
        }
    }
}

설명

count 연산자의 핵심 구성 요소는 필드, where 및 조건입니다. 각각은 다음 코드 조각에서 강조 표시됩니다.

  • 필드는 멤버를 평가하는 별칭 수를 알려줍니다. 여기서는 네트워크 보안 그룹의 securityRules[*] 별칭 배열을 살펴봅니다.
  • 여기서 정책 언어를 사용하여 해당 조건을 충족하는 배열 멤버를 정의합니다. 이 예제에서 allOf 논리 연산자는 별칭 배열 속성의 세 가지 조건 평가(direction, accessdestinationPortRange)를 그룹화합니다.
  • 이 예제의 개수 조건은 greater입니다. 개수는 별칭 배열의 하나 이상의 멤버가 where 절과 일치하면 true로 평가됩니다.
{
    "count": {
        "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
        "where": {
            "allOf": [{
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
                    "equals": "Inbound"
                },
                {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
                    "equals": "Allow"
                },
                {
                    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
                    "equals": "3389"
                }
            ]
        }
    },
    "greater": 0
}

다음 단계