Azure Policy 정의 구조 정책 규칙
정책 규칙은 if
및 then
블록으로 구성됩니다. if
블록에서 정책이 적용되는 시점을 지정하는 하나 이상의 조건을 정의합니다. 이러한 조건에 논리 연산자를 적용하여 정책에 대한 시나리오를 정확하게 정의할 수 있습니다.
각 효과, 평가 순서, 속성 및 예에 대한 자세한 내용은 Azure Policy 정의 효과 기본 사항을 참조하세요.
then
블록에서는 if
조건이 충족될 때 발생하는 효과를 정의합니다.
{
"if": {
<condition> | <logical operator>
},
"then": {
"effect": "deny | audit | modify | denyAction | append | auditIfNotExists | deployIfNotExists | disabled"
}
}
policyRule에 대한 자세한 내용을 보려면 정책 정의 스키마로 이동합니다.
논리 연산자
지원되는 논리 연산자는 다음과 같습니다.
"not": {condition or operator}
"allOf": [{condition or operator},{condition or operator}]
"anyOf": [{condition or operator},{condition or operator}]
not
구문은 조건의 결과를 반전시킵니다. allOf
구문(논리적 and
연산과 유사)에서는 모든 조건이 true여야 합니다. anyOf
구문(논리적 or
연산과 유사)에서는 하나 이상의 조건이 true여야 합니다.
논리 연산자를 중첩할 수 있습니다. 다음 예에서는 allOf
작업 내에 중첩된 not
작업을 보여 줍니다.
"if": {
"allOf": [
{
"not": {
"field": "tags",
"containsKey": "application"
}
},
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
}
]
},
조건
조건은 값이 특정 기준을 충족하는지를 평가합니다. 지원되는 조건은 다음과 같습니다.
"equals": "stringValue"
"notEquals": "stringValue"
"like": "stringValue"
"notLike": "stringValue"
"match": "stringValue"
"matchInsensitively": "stringValue"
"notMatch": "stringValue"
"notMatchInsensitively": "stringValue"
"contains": "stringValue"
"notContains": "stringValue"
"in": ["stringValue1","stringValue2"]
"notIn": ["stringValue1","stringValue2"]
"containsKey": "keyName"
"notContainsKey": "keyName"
"less": "dateValue"
|"less": "stringValue"
|"less": intValue
"lessOrEquals": "dateValue"
|"lessOrEquals": "stringValue"
|"lessOrEquals": intValue
"greater": "dateValue"
|"greater": "stringValue"
|"greater": intValue
"greaterOrEquals": "dateValue"
|"greaterOrEquals": "stringValue"
|"greaterOrEquals": intValue
"exists": "bool"
less
, lessOrEquals
, greater
및 greaterOrEquals
의 경우 속성 형식이 조건 형식과 일치하지 않으면 오류가 throw됩니다. 문자열 비교는 InvariantCultureIgnoreCase
를 사용하여 수행됩니다.
like
및 notLike
조건을 사용할 때 값에 와일드카드 문자(*
)를 제공합니다. 값에는 와일드카드 문자가 두 개 이상 있어서는 안 됩니다.
match
및 notMatch
조건을 사용할 때 숫자와 일치하는 해시태그(#
), 문자와 일치하는 물음표(?
), 문자와 일치하는 점(.
) 및 실제 문자와 일치하는 기타 문자를 제공합니다. match
및 notMatch
는 대/소문자를 구분하지만 stringValue
를 평가하는 다른 모든 조건은 대/소문자를 구분하지 않습니다. 대/소문자를 구분하지 않는 대안은 matchInsensitively
및 notMatchInsensitively
에서 사용할 수 있습니다.
필드
리소스 요청 페이로드의 속성 값이 특정 기준을 충족하는지 여부를 평가하는 조건은 field
식을 사용하여 지정할 수 있습니다. 다음 필드가 지원됩니다.
name
fullName
- 리소스의 전체 이름을 반환합니다. 리소스의 전체 이름은 부모 리소스 이름 앞에 리소스 이름이 추가됩니다(예:
myServer/myDatabase
).
- 리소스의 전체 이름을 반환합니다. 리소스의 전체 이름은 부모 리소스 이름 앞에 리소스 이름이 추가됩니다(예:
kind
type
location
- 위치 필드는 다양한 형식을 지원하도록 정규화됩니다. 예를 들어
East US 2
는eastus2
와 동일한 것으로 간주됩니다. - 위치에 관계없는 리소스에는 전역을 사용합니다.
- 위치 필드는 다양한 형식을 지원하도록 정규화됩니다. 예를 들어
id
- 평가 중인 리소스의 리소스 ID를 반환합니다.
- 예:
/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
identity.type
- 리소스에서 사용 가능한 관리 ID 형식을 반환합니다.
tags
tags['<tagName>']
- 이 대괄호 구문은 하이픈, 마침표, 공백 등의 문장 부호가 있는 태그 이름을 지원합니다.
- 여기서
tagName
은 조건을 validate할 태그 이름입니다. - 예:
tags['Acct.CostCenter']
여기서Acct.CostCenter
는 태그의 이름입니다.
tags['''<tagName>''']
- 이 대괄호 구문은 이중 아포스트로피로 이스케이프 처리하여 아포스트로피가 있는 태그 이름을 지원합니다.
- 여기서
tagName
은 조건을 validate할 태그 이름입니다. - 예:
tags['''My.Apostrophe.Tag''']
여기서'My.Apostrophe.Tag'
는 태그의 이름입니다.
참고 항목
tags.<tagName>
,tags[tagName]
및tags[tag.with.dots]
도 여전히 허용되는 태그 필드 선언 방법입니다. 그러나 기본 식은 위에 나열된 식입니다.속성 별칭 - 목록은 별칭을 참조하세요.
참고 항목
배열 별칭
[*]
를 참조하는field
식에서 배열의 각 요소는 요소 사이의 논리and
을 사용하여 개별적으로 평가됩니다. 자세한 내용은 배열 리소스 속성 참조를 참조하세요.
field
식을 사용하는 조건은 쓰기 작업에 사용되는 레거시 정책 정의 구문 "source": "action"
을 바꿀 수 있습니다. 예를 들어, 다음은 더 이상 지원되지 않습니다.
{
"source": "action",
"like": "Microsoft.Network/publicIPAddresses/*"
}
그러나 원하는 동작은 field
논리를 사용하여 달성할 수 있습니다.
{
"field": "type",
"equals": "Microsoft.Network/publicIPAddresses"
}
매개 변수와 함께 태그 사용
매개 변수 값을 태그 필드에 전달할 수 있습니다. 매개 변수를 태그 필드에 전달하면 정책 할당 중에 정책 정의의 유연성이 증가합니다.
다음 예에서 concat
는 이름이 tagName
매개 변수의 값인 태그에 대한 태그 필드 조회를 만드는 데 사용됩니다. 해당 태그가 없는 경우 modify
효과를 사용하여 resourcegroup()
조회 함수를 통해 감사된 리소스 부모 리소스 그룹에 설정된 동일한 이름의 태그 값을 사용하는 태그를 추가합니다.
{
"if": {
"field": "[concat('tags[', parameters('tagName'), ']')]",
"exists": "false"
},
"then": {
"effect": "modify",
"details": {
"operations": [
{
"operation": "add",
"field": "[concat('tags[', parameters('tagName'), ']')]",
"value": "[resourcegroup().tags[parameters('tagName')]]"
}
],
"roleDefinitionIds": [
"/providers/microsoft.authorization/roleDefinitions/4a9ae827-6dc8-4573-8ac7-8239d42aa03f"
]
}
}
}
값
value
식을 사용하여 값이 특정 조건을 충족하는지 여부를 평가하는 조건을 지정할 수 있습니다. 값은 리터럴, 매개 변수값 또는 지원되는 템플릿 함수의 반환값이 될 수 있습니다.
Warning
템플릿 함수의 결과가 오류이면 정책 평가가 실패합니다. 실패한 평가는 암시적 deny
입니다. 자세한 내용은 템플릿 오류 방지를 참조하세요. 새 정책 정의를 테스트하고 유효성 검사하는 동안 평가 실패가 새 리소스 또는 업데이트된 리소스에 미치는 영향을 방지하려면 doNotEnforce
의 enforcementMode를 사용합니다.
값 예제
이 정책 규칙 예에서는 value
를 사용하여 resourceGroup()
함수의 결과와 반환된 name
속성을 *netrg
의 like
조건과 비교합니다. 규칙은 이름이 *netrg
(으)로 끝나는 리소스 그룹에서 Microsoft.Network/*
type
이(가) 아닌 리소스를 모두 거부합니다.
{
"if": {
"allOf": [
{
"value": "[resourceGroup().name]",
"like": "*netrg"
},
{
"field": "type",
"notLike": "Microsoft.Network/*"
}
]
},
"then": {
"effect": "deny"
}
}
이 정책 규칙 예에서는 value
을(를) 사용하여 여러 중첩 함수 equals
true
의 결과를 확인합니다. 이 규칙은 최소 3개의 태그가 없는 리소스를 모두 거부합니다.
{
"mode": "indexed",
"policyRule": {
"if": {
"value": "[less(length(field('tags')), 3)]",
"equals": "true"
},
"then": {
"effect": "deny"
}
}
}
템플릿 실패 방지
value
에서 템플릿 함수를 사용하면 복잡한 중첩 함수를 많이 사용할 수 있습니다. 템플릿 함수의 결과가 오류이면 정책 평가가 실패합니다. 실패한 평가는 암시적 deny
입니다. 특정 시나리오에서 실패하는 value
의 예:
{
"policyRule": {
"if": {
"value": "[substring(field('name'), 0, 3)]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
위의 정책 예 규칙은 substring()을 사용하여 name
의 처음 3개 문자를 abc
와 비교합니다. name
이 세 자 미만이면 substring()
함수에서 오류가 발생합니다. 이 오류로 인해 정책은 deny
효과가 됩니다.
대신 if() 함수를 사용하여 3자보다 짧은 name
으로 인해 오류가 발생하는 것을 허용하지 않고 name
의 처음 3자가 abc
와 같은지 확인합니다.
{
"policyRule": {
"if": {
"value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
수정한 정책 규칙에서 if()
는 세 자 미만인 값에서 substring()
을 구하기 전에 name
의 길이를 확인합니다. name
이 너무 짧으면 "abc로 시작하지 않음" 값이 대신 반환되어 abc
와 비교됩니다. abc
로 시작하지 않는 짧은 이름의 리소스는 여전히 정책 규칙에 실패하지만 평가 중에 더 이상 오류가 발생하지 않습니다.
Count
배열의 멤버 중 특정 기준을 충족하는 멤버의 수를 세는 조건은 count
식을 사용하여 형성할 수 있습니다. 일반적인 시나리오에서는 배열 멤버 '중 하나 이상', '중 정확히 하나', '중 모두' 또는 '중 아무도'라는 조건을 충족하는지 여부를 확인합니다. count
는 조건식에 대해 각 배열 멤버를 평가하고 true 결과의 합계를 낸 다음, 식 연산자와 비교합니다.
필드 수
요청 페이로드에서 배열의 멤버 중 조건식을 충족하는 멤버의 수를 세는 조건을 계수합니다. field count
식의 구조는 다음과 같습니다.
{
"count": {
"field": "<[*] alias>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
다음 속성은 field count
와 함께 사용됩니다.
count.field
(필수): 배열에 대한 경로를 포함하며 배열 별칭이어야 합니다.count.where
(선택 사항):count.field
의 각 배열 별칭 배열 멤버에 대해 개별적으로 평가할 조건 식입니다. 속성이 제공되지 않으면 'field' 경로가 있는 모든 배열 멤버는 true로 평가됩니다. 속성 내에서 모든 condition을 사용할 수 있습니다. 논리 연산자는 이 속성 내에서 복잡한 평가 요구 사항을 만드는 데 사용할 수 있습니다.condition
(필수): 이 값은count.where
조건식을 충족하는 항목 수와 비교됩니다. 숫자 조건을 사용해야 합니다.
field count
식이 계산되는 방법에 대한 자세한 설명을 포함하여 Azure Policy에서 배열 속성으로 작업하는 방법에 대한 세부 정보는 배열 리소스 속성 참조를 참조하세요.
값 개수
배열에서 조건을 충족하는 멤버 수를 계산합니다. 배열은 리터럴 배열이거나 배열 매개 변수에 대한 참조일 수 있습니다. value count
식의 구조는 다음과 같습니다.
{
"count": {
"value": "<literal array | array parameter reference>",
"name": "<index name>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
다음 속성은 value count
와 함께 사용됩니다.
count.value
(필수): 평가할 배열입니다.count.name
(필수): 영문자와 숫자로 구성된 인덱스 이름입니다. 현재 반복에서 계산된 배열 멤버의 값에 대한 이름을 정의합니다. 이 이름은count.where
조건 내에서 현재 값을 참조하는 데 사용됩니다.count
식이 다른count
식의 자식 식이 아닌 경우 선택 사항입니다. 제공되지 않은 경우 인덱스 이름은 암시적으로"default"
로 설정됩니다.count.where
(선택 사항):count.value
의 각 배열 멤버에 대해 개별적으로 평가할 조건 식입니다. 해당 속성이 제공되지 않으면 모든 배열 멤버는 true로 평가됩니다. 속성 내에서 모든 condition을 사용할 수 있습니다. 논리 연산자는 이 속성 내에서 복잡한 평가 요구 사항을 만드는 데 사용할 수 있습니다. 현재 열거된 배열 멤버의 값은 현재 함수를 호출하여 액세스할 수 있습니다.condition
(필수): 이 값은count.where
조건식을 충족하는 항목 수와 비교됩니다. 숫자 조건을 사용해야 합니다.
현재 함수
current()
함수는 count.where
조건 내에서만 사용할 수 있습니다. 이 메서드는 현재 count
식 계산에 의해 열거된 배열 멤버의 값을 반환합니다.
값 개수 사용량
current(<index name defined in count.name>)
; 예:current('arrayMember')
current()
;value count
식이 다른count
식의 자식이 아닌 경우에만 허용됩니다. 위와 동일한 값을 반환합니다.
호출에서 반환된 값이 개체이면 속성 접근자가 지원됩니다. 예: current('objectArrayMember').property
필드 수 사용량
current(<the array alias defined in count.field>)
; 예:current('Microsoft.Test/resource/enumeratedArray[*]')
.current()
;field count
식이 다른count
식의 자식이 아닌 경우에만 허용됩니다. 위와 동일한 값을 반환합니다.current(<alias of a property of the array member>)
; 예:current('Microsoft.Test/resource/enumeratedArray[*].property')
.
필드 수 예제
예제 1: 배열이 비어 있는지 확인
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]"
},
"equals": 0
}
예제 2: 배열 멤버 중 하나만 조건식을 충족하는지 확인
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My unique description"
}
},
"equals": 1
}
예 3: 배열 멤버 하나 이상이 조건식을 충족하는지 확인
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My common description"
}
},
"greaterOrEquals": 1
}
예 4: 모든 개체 배열 멤버가 조건식을 충족하는지 확인
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "description"
}
},
"equals": "[length(field('Microsoft.Network/networkSecurityGroups/securityRules[*]'))]"
}
예제 5: 하나 이상의 배열 멤버가 조건식의 여러 속성과 일치하는지 확인
{
"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
}
예제 6: where
조건 내에서 current()
함수를 사용하여 템플릿 함수에서 현재 열거된 배열 멤버의 값에 액세스합니다. 이 조건은 가상 네트워크에 10.0.0.0/24 CIDR 범위에 없는 주소 접두사가 포함되어 있는지 여부를 확인합니다.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"value": "[ipRangeContains('10.0.0.0/24', current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
"equals": false
}
},
"greater": 0
}
예제 7: where
조건 내에서 field()
함수를 사용하여 현재 열거된 배열 멤버의 값에 액세스합니다. 이 조건은 가상 네트워크에 10.0.0.0/24 CIDR 범위에 없는 주소 접두사가 포함되어 있는지 여부를 확인합니다.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"value": "[ipRangeContains('10.0.0.0/24', first(field(('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]')))]",
"equals": false
}
},
"greater": 0
}
값 개수 예
예제 1: 리소스 이름이 지정된 이름 패턴과 일치하는지 확인합니다.
{
"count": {
"value": [
"prefix1_*",
"prefix2_*"
],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
예제 2: 리소스 이름이 지정된 이름 패턴과 일치하는지 확인합니다. current()
함수는 인덱스 이름을 지정하지 않습니다. 결과는 이전 예제와 동일합니다.
{
"count": {
"value": [
"prefix1_*",
"prefix2_*"
],
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
예제 3: 리소스 이름이 배열 매개 변수에서 제공하는 지정된 이름 패턴과 일치하는지 확인합니다.
{
"count": {
"value": "[parameters('namePatterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
예 4: 승인된 접두사 목록 아래에 가상 네트워크 주소 접두사가 없는지 확인합니다.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"count": {
"value": "[parameters('approvedPrefixes')]",
"name": "approvedPrefix",
"where": {
"value": "[ipRangeContains(current('approvedPrefix'), current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
"equals": true
},
},
"equals": 0
}
},
"greater": 0
}
예 5: 모든 예약된 NSG 규칙이 NSG에 정의되어 있는지 확인합니다. 예약된 NSG 규칙의 속성은 개체를 포함하는 배열 매개 변수에 정의됩니다.
매개 변수 값:
[
{
"priority": 101,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 22
},
{
"priority": 102,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 3389
}
]
정책:
{
"count": {
"value": "[parameters('reservedNsgRules')]",
"name": "reservedNsgRule",
"where": {
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].priority",
"equals": "[current('reservedNsgRule').priority]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
"equals": "[current('reservedNsgRule').access]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
"equals": "[current('reservedNsgRule').direction]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
"equals": "[current('reservedNsgRule').destinationPortRange]"
}
]
}
},
"equals": 1
}
},
"equals": "[length(parameters('reservedNsgRules'))]"
}
정책 함수
함수를 사용하여 정책 규칙에 추가 논리를 도입할 수 있습니다. 함수는 정책 정의의 정책 규칙 내에서 그리고 이니셔티브의 정책 정의에 할당된 매개 변수 값 내에서 확인됩니다.
다음 함수와 사용자 정의 함수를 제외하고 모든 Resource Manager 템플릿 함수를 정책 규칙 내에서 사용할 수 있습니다.
copyIndex()
dateTimeAdd()
dateTimeFromEpoch
dateTimeToEpoch
deployment()
environment()
extensionResourceId()
lambda()
자세한 내용을 보려면 lambda로 이동합니다.listAccountSas()
listKeys()
listSecrets()
list*
managementGroup()
newGuid()
pickZones()
providers()
reference()
resourceId()
subscriptionResourceId()
tenantResourceId()
tenant()
variables()
참고 항목
이러한 함수는 deployIfNotExists
정책 정의에 있는 템플릿 배포의 details.deployment.properties.template
부분 내에서 계속 사용할 수 있습니다.
다음 함수는 정책 규칙에서 사용할 수 있지만 Azure Resource Manager 템플릿(ARM 템플릿)에서 사용하는 것과는 다릅니다.
utcNow()
- ARM 템플릿과는 달리 defaultValue 외부에서 사용할 수 있습니다.- 범용 ISO 8601 DateTime 형식
yyyy-MM-ddTHH:mm:ss.fffffffZ
의 현재 날짜와 시간으로 설정된 문자열을 반환합니다.
- 범용 ISO 8601 DateTime 형식
다음 함수는 정책 규칙에서만 사용할 수 있습니다.
addDays(dateTime, numberOfDaysToAdd)
dateTime
: [필수] 문자열 - 범용 ISO 8601 DateTime 형식 'yyyy-MM-ddTHH:mm:ss.FFFFFFFZ'의 문자열numberOfDaysToAdd
: [필수] 정수 - 추가할 일수
field(fieldName)
fieldName
: [필수] 문자열 - 검색할 필드의 이름- If 조건에 의해 평가되는 리소스에서 해당 필드의 값을 반환합니다.
field
는 평가 중인 리소스의 필드를 참조하기 위해 주로auditIfNotExists
및deployIfNotExists
와 함께 사용됩니다. 이 사용 예제는 DeployIfNotExists 예제에서 볼 수 있습니다.
requestContext().apiVersion
- 정책 평가를 트리거한 요청의 API 버전을 반환합니다(예:
2021-09-01
). 이 값은 리소스 생성/업데이트 평가를 위해 PUT/PATCH 요청에 사용된 API 버전입니다. 기존 리소스에 대한 규정 준수 평가 중에는 항상 최신 API 버전이 사용됩니다.
- 정책 평가를 트리거한 요청의 API 버전을 반환합니다(예:
policy()
평가 중인 정책에 대한 다음 정보를 반환합니다. 반환된 개체(예:
[policy().assignmentId]
)에서 속성에 액세스할 수 있습니다.{ "assignmentId": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/policyAssignments/myAssignment", "definitionId": "/providers/Microsoft.Authorization/policyDefinitions/34c877ad-507e-4c82-993e-3452a6e0ad3c", "setDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/42a694ed-f65e-42b2-aa9e-8052e9740a92", "definitionReferenceId": "StorageAccountNetworkACLs" }
ipRangeContains(range, targetRange)
range
: [필수] 문자열 - targetRange가 범위 내에 있는지 확인할 IP 주소의 범위를 지정하는 문자열입니다.targetRange
: [필수] 문자열 - 범위 내에 포함되는지 유효성을 검사할 IP 주소 범위를 지정하는 문자열입니다.- range IP 주소 범위에 targetRange IP 주소 범위가 포함되어 있는지 여부에 대한 boolean을 반환합니다. 빈 범위 또는 IP 제품군 간 혼합은 허용되지 않으며 평가 오류가 발생합니다.
지원되는 형식:
- 단일 IP 주소 (예:
10.0.0.0
,2001:0DB8::3:FFFE
) - CIDR 범위 (예:
10.0.0.0/24
,2001:0DB8::/110
) - 시작 및 끝 IP 주소에 의해 정의된 범위(예:
192.168.0.1-192.168.0.9
,2001:0DB8::-2001:0DB8::3:FFFF
)
current(indexName)
- Count expressions 내에서만 사용할 수 있는 특수 함수입니다.
정책 함수 예제
이 정책 규칙 예에서는 resourceGroup
리소스 함수를 concat
배열 및 개체 함수와 함께 사용하여 name
속성을 가져오고 리소스 이름을 리소스 그룹 이름으로 시작하도록 하는 like
조건을 작성합니다.
{
"if": {
"not": {
"field": "name",
"like": "[concat(resourceGroup().name,'*')]"
}
},
"then": {
"effect": "deny"
}
}
정책 규칙 제한
작성 중에 적용되는 제한
정책 규칙의 구조에 대한 제한은 정책을 작성하거나 할당하는 동안 적용됩니다. 해당 제한을 초과하는 정책 정의를 만들거나 할당하려는 시도는 실패합니다.
제한 | 값 | 추가 세부 정보 |
---|---|---|
if 조건의 조건식 |
4096 | |
then 블록의 조건식 |
128 | auditIfNotExists 및 deployIfNotExists 정책의 existenceCondition 에 적용 |
정책 규칙당 정책 함수 | 2048 | |
매개 변수의 정책 함수 수 | 128 | 예: [function('parameter1', 'parameter2', ...)] |
중첩된 정책 함수 깊이 | 64 | 예: [function(nested1(nested2(...)))] |
정책 함수 식 문자열 길이 | 81920 | 예: "[function(....)]" 길이 |
배열당 식 Field count 개 |
5 | |
정책 규칙당 식 Value count 개 |
10 | |
Value count 식 반복 횟수 |
100 | 중첩된 Value count 식의 경우 부모 식의 반복 횟수도 포함됩니다. |
평가 중에 적용되는 제한
정책 평가 중에 정책 함수에서 처리되는 개체 크기에 대한 제한입니다. 이 제한은 평가된 콘텐츠에 따라 달라지므로 작성 중에 항상 적용할 수 있는 것은 아닙니다. 예시:
{
"field": "name",
"equals": "[concat(field('stringPropertyA'), field('stringPropertyB'))]"
}
concat()
함수에서 생성된 문자열의 길이는 평가된 리소스의 속성 값에 따라 달라집니다.
제한 | 값 | 예제 |
---|---|---|
함수에서 반환된 문자열의 길이 | 131072 | [concat(field('longString1'), field('longString2'))] |
함수에 매개 변수로 제공되거나 함수에서 반환된 복합 개체의 깊이 | 128 | [union(field('largeObject1'), field('largeObject2'))] |
함수에 매개 변수로 제공되거나 함수에서 반환된 복합 개체의 노드 수 | 32768 | [concat(field('largeArray1'), field('largeArray2'))] |
Warning
평가 중에 위 제한을 초과하는 정책은 사실상 deny
정책이 되며 들어오는 요청을 차단할 수 있습니다.
복합 함수를 사용하여 정책을 작성하는 경우 이 제한에 유의하고 해당 제한을 초과할 가능성이 있는 리소스에 대해 정책을 테스트합니다.
다음 단계
- 정책 정의 구조에 대한 자세한 내용을 보려면 기본 사항, 매개 변수 및 별칭을 참조하세요.
- 이니셔티브의 경우 이니셔티브 정의 구조로 이동합니다.
- Azure Policy 샘플에서 예제를 검토합니다.
- 정책 효과 이해를 검토합니다.
- 프로그래밍 방식으로 정책을 만드는 방법을 이해합니다.
- 규정 준수 데이터를 가져오는 방법을 알아봅니다.
- 규정 비준수 리소스를 수정하는 방법을 알아봅니다.
- Azure 관리 그룹으로 리소스 구성을 포함하는 관리 그룹을 검토합니다.