Azure Policy 정의 구조 매개 변수
매개 변수는 정책 정의의 수를 줄여 정책 관리를 간소화하는 데 도움이 됩니다. 양식의 필드 name
, address
, city
, state
와 같은 매개 변수에 관해 생각해 봅니다. 이러한 매개 변수는 항상 동일하게 유지되지만 해당 값은 양식을 작성하는 개인에 따라 변경됩니다. 매개 변수는 정책을 만들 때와 같은 방법으로 작동합니다. 정책 정의에 매개 변수를 포함함으로써 서로 다른 값을 사용하여 다양한 시나리오에 대해 해당 정책을 재사용할 수 있습니다.
매개 변수 추가 또는 제거
매개 변수는 기존 및 할당된 정의에 추가될 수 있습니다. 새 매개 변수에는 defaultValue
속성이 포함되어야 합니다. 이 속성은 정책 또는 이니셔티브의 기존 할당이 간접적으로 무효화되는 것을 방지합니다.
매개 변수 값을 설정하는 할당이 있을 수 있고 해당 참조가 손상될 수 있으므로 정책 정의에서 매개 변수를 제거할 수 없습니다. 일부 기본 제공 정책 정의는 Azure Portal에서 정의를 할당할 때 매개 변수를 숨기는 메타데이터 "deprecated": true
를 사용하여 매개 변수를 더 이상 사용하지 않습니다. 사용자 지정 정책 정의에는 이 방법이 지원되지 않지만 또 다른 옵션은 매개 변수 없이 새 사용자 지정 정책 정의를 복제하고 만드는 것입니다.
매개 변수 속성
매개 변수는 정책 정의에서 다음 속성을 사용합니다.
name
: 매개 변수의 이름입니다. 정책 규칙 내의parameters
배포 함수에서 사용됩니다. 자세한 내용은 매개 변수 값 사용을 참조하세요.type
: 매개 변수가string
,array
,object
,boolean
,integer
,float
또는dateTime
인지 확인합니다.metadata
: Azure Portal에서 사용자에게 친숙한 정보를 표시하는 데 주로 사용되는 하위 속성을 정의합니다.description
: 매개 변수의 용도에 대한 설명입니다. 허용 가능한 값의 예를 제공하는 데 사용할 수 있습니다.displayName
: 매개 변수에 대해 포털에 표시되는 식별 이름입니다.strongType
: (선택 사항) 포털을 통해 정책 정의를 할당할 때 사용됩니다. 컨텍스트 인식 목록을 제공합니다. 자세한 내용은 strongType을 참조하세요.assignPermissions
: (선택 사항) 정책 할당 중에 Azure Portal에서 역할 할당을 만들도록 하려면 true로 설정합니다. 이 속성은 할당 범위 외부에서 사용 권한을 할당하려는 경우에 유용합니다. 정책 내 역할 정의마다(또는 이니셔티브의 모든 정책에서 역할 정의마다) 하나의 역할 할당이 있습니다. 매개 변수 값은 유효한 리소스 또는 범위여야 합니다.deprecated
: 기본 제공 정의에서 매개 변수가 더 이상 사용되지 않는지 여부를 나타내는 부울 플래그입니다.
defaultValue
: (선택 사항) 값이 지정되지 않은 경우 할당에서 매개 변수의 값을 설정합니다. 할당된 기존 정책 정의를 업데이트할 때 필요합니다. 개체 형식 매개 변수의 경우 값이 적절한 스키마와 일치해야 합니다.allowedValues
: (선택 사항) 할당 중에 매개 변수가 허용하는 값의 배열을 제공합니다.- 대/소문자 구분: 정책을 할당할 때 허용되는 값 비교는 대/소문자를 구분합니다. 즉, 할당에서 선택한 매개 변수 값이 정의의
allowedValues
배열에 있는 값의 대/소문자와 일치해야 함을 의미합니다. 그러나 할당을 위해 값을 선택한 후에는 사용된 조건에 따라 문자열 비교 평가에서 대/소문자를 구분하지 않을 수 있습니다. 예를 들어, 매개 변수가 할당에서 허용되는 태그 값으로Dev
를 할당하고 이 값이equals
조건을 사용하여 입력 문자열과 비교되는 경우notEquals
는 대/소문자를 구분하지 않으므로 Azure Policy는 나중에dev
의 태그 값이 소문자라도 일치하는 것으로 평가합니다. - 개체 형식 매개 변수의 경우 값이 적절한 스키마와 일치해야 합니다.
- 대/소문자 구분: 정책을 할당할 때 허용되는 값 비교는 대/소문자를 구분합니다. 즉, 할당에서 선택한 매개 변수 값이 정의의
schema
: (선택 사항) 자체 정의된 JSON 스키마를 사용하여 할당하는 동안 매개 변수 입력의 유효성 검사를 제공합니다. 이 속성은 개체 형식 매개 변수에 대해서만 지원되며 Json.NET 스키마 2019-09 구현을 따릅니다. https://json-schema.org/에서 스키마 사용에 대해 자세히 알아보고 https://www.jsonschemavalidator.net/에서 초안 스키마를 테스트할 수 있습니다.
샘플 매개 변수
예 1
예를 들어 리소스를 배포할 수 있는 위치를 제한하는 정책 정의를 정의할 수 있습니다. 해당 정책 정의에 대한 매개 변수는 allowedLocations
일 수 있으며 수락되는 값을 제한하기 위해 정책 정의의 각 할당에 사용됩니다. strongType
을 사용하면 포털을 통해 할당을 완료할 때 향상된 환경이 제공됩니다.
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [
"westus2"
],
"allowedValues": [
"eastus2",
"westus2",
"westus"
]
}
}
할당 시 이 배열 형식 매개 변수(strongType
제외)에 대한 샘플 입력은 ["westus", "eastus2"]
일 수 있습니다.
예제 2
고급 시나리오에서는 Kubernetes 클러스터 Pod가 지정된 레이블을 사용하도록 요구하는 정책을 정의할 수 있습니다. 해당 정책 정의에 대한 매개 변수는 labelSelector
일 수 있으며 정책 정의의 각 할당에서 레이블 키와 값을 기반으로 문제의 Kubernetes 리소스를 할당하는 데 사용됩니다.
"parameters": {
"labelSelector": {
"type": "Object",
"metadata": {
"displayName": "Kubernetes label selector",
"description": "Label query to select Kubernetes resources for policy evaluation. An empty label selector matches all Kubernetes resources."
},
"defaultValue": {},
"schema": {
"description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all resources.",
"type": "object",
"properties": {
"matchLabels": {
"description": "matchLabels is a map of {key,value} pairs.",
"type": "object",
"additionalProperties": {
"type": "string"
},
"minProperties": 1
},
"matchExpressions": {
"description": "matchExpressions is a list of values, a key, and an operator.",
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"description": "key is the label key that the selector applies to.",
"type": "string"
},
"operator": {
"description": "operator represents a key's relationship to a set of values.",
"type": "string",
"enum": [
"In",
"NotIn",
"Exists",
"DoesNotExist"
]
},
"values": {
"description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"key",
"operator"
],
"additionalProperties": false
},
"minItems": 1
}
},
"additionalProperties": false
}
},
}
할당 시 이 개체 형식 매개 변수에 대한 샘플 입력은 지정된 스키마에 의해 유효성이 검사되는 JSON 형식이며 다음과 같은 것일 수 있습니다.
{
"matchLabels": {
"poolID": "abc123",
"nodeGroup": "Group1",
"region": "southcentralus"
},
"matchExpressions": [
{
"key": "name",
"operator": "In",
"values": [
"payroll",
"web"
]
},
{
"key": "environment",
"operator": "NotIn",
"values": [
"dev"
]
}
]
}
매개 변수 값 사용
정책 규칙에서 다음 parameters
함수 구문을 사용하여 매개 변수를 참조할 수 있습니다.
{
"field": "location",
"in": "[parameters('allowedLocations')]"
}
이 샘플은 매개 변수 속성에 설명된 allowedLocations
매개 변수를 참조하세요.
strongType
metadata
속성 내에서 strongType
을 사용하여 Azure Portal 내에서 다중 선택 옵션 목록을 제공할 수 있습니다. strongType
은 지원되는 리소스 종류이거나 허용되는 값일 수 있습니다. 리소스 종류이 strongType
에 유효한지 확인하려면 Get-AzResourceProvider를 사용합니다. 리소스 종류strongType
의 형식은 <Resource Provider>/<Resource Type>
입니다. 예들 들어 Microsoft.Network/virtualNetworks/subnets
입니다.
Get-AzResourceProvider
에서 반환되지 않은 일부 리소스 종류이 지원됩니다. 이러한 형식은 다음과 같습니다.
Microsoft.RecoveryServices/vaults/backupPolicies
strongType
에 대해 허용되지 않는 리소스 종류 값은 다음과 같습니다.
location
resourceTypes
storageSkus
vmSKUs
existingResourceGroups
다음 단계
- 정책 정의 구조에 대한 자세한 내용을 보려면 기본 사항, 정책 규칙 및 별칭으로 이동합니다.
- 이니셔티브의 경우 이니셔티브 정의 구조로 이동합니다.
- Azure Policy 샘플에서 예제를 검토합니다.
- 정책 효과 이해를 검토합니다.
- 프로그래밍 방식으로 정책을 만드는 방법을 이해합니다.
- 규정 준수 데이터를 가져오는 방법을 알아봅니다.
- 규정 비준수 리소스를 수정하는 방법을 알아봅니다.
- Azure 관리 그룹으로 리소스 구성을 포함하는 관리 그룹을 검토합니다.