Azure Policy 예외 구조
Azure Policy 예외 기능을 사용하여 이니셔티브나 정의 평가에서 개별 리소스나 리소스 계층 구조를 제외합니다. 제외된 리소스는 전체 규정 준수에 포함되지만, 평가하거나 임시 면제를 가질 수 없습니다. 자세한 내용은 Azure Policy의 적용 가능성 이해를 참조하세요. Azure Policy 예외는 Resource Manager 모드: Microsoft.Kubernetes.Data
, Microsoft.KeyVault.Data
, Microsoft.Network.Data
에서 작동합니다.
JSON(JavaScript Object Notation)을 사용하여 정책 예외를 만듭니다. 정책 정의에는 다음 요소가 포함됩니다.
정책 예외는 리소스 계층에서 자식 개체로 만들어지거나 개별 리소스에 예외가 부여됩니다. 리소스 공급자 모드 구성 요소 수준에서 예외를 만들 수 없습니다. 예외가 적용되는 부모 리소스가 제거되면 예외도 제거됩니다.
예를 들어 다음 JSON은 resourceShouldBeCompliantInit
라는 이니셔티브 할당에 대한 리소스의 면제 범주의 정책 예외를 보여 줍니다. 리소스는 이니셔티브의 두 정책 정의, customOrgPolicy
사용자 지정 정책 정의(policyDefinitionReferenceId
: requiredTags
), 허용된 위치 기본 제공 정책 정의(policyDefinitionReferenceId
: allowedLocations
)에서만 제외됩니다.
{
"id": "/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.Authorization/policyExemptions/resourceIsNotApplicable",
"apiVersion": "2020-07-01-preview",
"name": "resourceIsNotApplicable",
"type": "Microsoft.Authorization/policyExemptions",
"properties": {
"displayName": "This resource is scheduled for deletion",
"description": "This resources is planned to be deleted by end of quarter and has been granted a waiver to the policy.",
"metadata": {
"requestedBy": "Storage team",
"approvedBy": "IA",
"approvedOn": "2020-07-26T08:02:32.0000000Z",
"ticketRef": "4baf214c-8d54-4646-be3f-eb6ec7b9bc4f"
},
"policyAssignmentId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyAssignments/resourceShouldBeCompliantInit",
"policyDefinitionReferenceId": [
"requiredTags",
"allowedLocations"
],
"exemptionCategory": "waiver",
"expiresOn": "2020-12-31T23:59:00.0000000Z",
"assignmentScopeValidation": "Default"
}
}
표시 이름 및 설명
displayName
및 description
을 사용하여 정책 예외를 식별하고 특정 리소스와 함께 사용하기 위한 컨텍스트를 제공합니다. displayName
의 최대 길이는 128자이고 description
최대 길이는 512자입니다.
메타데이터
metadata
속성을 사용하면 관련 정보를 저장하는 데 필요한 자식 속성을 만들 수 있습니다. 예제에서 requestedBy
, approvedBy
, approvedOn
, ticketRef
속성은 예외 요청자, 승인자, 승인 시기, 요청에 대한 내부 추적 티켓 관련 정보를 제공하는 고객 값을 포함합니다. 해당 metadata
속성은 예제이지만 필요하지 않으며 metadata
는 자식 속성으로 제한되지 않습니다.
정책 할당 ID
이 필드는 정책 할당 또는 이니셔티브 할당의 전체 경로 이름이어야 합니다. policyAssignmentId
는 문자열이며 배열이 아닙니다. 이 속성은 부모 리소스 계층 구조 또는 개별 리소스가 제외되는 할당을 정의합니다.
정책 정의 ID
policyAssignmentId
가 이니셔티브 할당용일 경우 policyDefinitionReferenceId
속성을 사용하여 주체 리소스에 예외가 있는 이니셔티브의 정책 정의를 지정할 수 있습니다. 하나 이상 포함된 정책 정의에서 리소스가 제외될 수 있으므로 이 속성은 배열입니다. 값은 policyDefinitions.policyDefinitionReferenceId
필드에 있는 이니셔티브 정의의 값과 일치해야 합니다.
예외 범주
예외를 그룹화하는 데 사용되는 두 개의 예외 범주가 있습니다.
- 완화됨: 정책 의도가 다른 메서드를 통해 충족되었으므로 예외가 부여됩니다.
- 면제: 리소스의 비준수 상태가 일시적으로 수락되었으므로 예외가 부여됩니다. 이 범주를 사용하는 또 다른 이유는 이니셔티브의 하나 이상의 정의에서 리소스 또는 리소스 계층을 제외하는 것이지만 전체 이니셔티브에서 제외해서는 안 됩니다.
만료
리소스 계층 구조 또는 개별 리소스가 더 이상 할당에서 제외되지 않는 시기를 설정하려면 expiresOn
속성을 설정합니다. 이 선택적 속성은 유니버설 ISO 8601 날짜/시간 형식(yyyy-MM-ddTHH:mm:ss.fffffffZ
)이어야 합니다.
참고 항목
expiresOn
날짜가 되면 정책 예외가 삭제되지 않습니다. 개체는 레코드 유지를 위해 유지되지만, 예외는 더 적용되지 않습니다.
리소스 선택기
예외는 할당에서와 동일한 방식으로 작동하는 선택적 속성 resourceSelectors
을 지원합니다. 이 속성을 사용하면 리소스 종류, 리소스 위치 또는 리소스에 위치가 있는지 여부에 따라 제어된 방식으로 특정 리소스 하위 집합에 대한 예외를 점진적으로 출시하거나 롤백할 수 있습니다. 리소스 선택기를 사용하는 방법에 대한 자세한 내용은 할당 구조에서 찾을 수 있습니다. 다음 JSON은 리소스 선택기를 사용하는 예외 예제입니다. 이 예제에서는 정책 할당에서 westcentralus
의 리소스만 예외가 됩니다.
{
"properties": {
"policyAssignmentId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
"policyDefinitionReferenceId": [
"limitSku",
"limitType"
],
"exemptionCategory": "Waiver",
"resourceSelectors": [
{
"name": "TemporaryMitigation",
"selectors": [
{
"kind": "resourceLocation",
"in": [
"westcentralus"
]
}
]
}
]
},
"systemData": { ...
},
"id": "/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
"type": "Microsoft.Authorization/policyExemptions",
"name": "DemoExpensiveVM"
}
예제의 resourceLocation
목록에서 지역을 추가하거나 제거할 수 있습니다. 리소스 선택기를 사용하면 예외를 만들고 관리할 수 있는 위치와 방법을 훨씬 더 유연하게 활용할 수 있습니다.
할당 범위 유효성 검사(미리 보기)
대부분의 시나리오에서 예외 범위의 유효성을 검사하여 정책 할당 범위 이하에 있는지 확인합니다. 선택적 assignmentScopeValidation
속성을 사용하면 예외가 이 유효성 검사를 바이패스하고 할당 범위를 벗어나서 만들 수 있습니다. 이 유효성 검사는 구독을 MG(관리 그룹)에서 다른 관리 그룹으로 이동해야 하지만 구독 내 리소스의 속성으로 인해 정책에 의해 이동이 차단되는 상황을 위한 것입니다. 이 시나리오에서는 대상 MG의 정책 할당에서 리소스를 제외하기 위해 현재 MG의 구독에 대한 예외를 만들 수 있습니다. 그러면 구독이 대상 MG로 이동되는 경우 리소스가 이미 해당 정책 할당에서 제외되어 있기 때문에 작업이 차단되지 않습니다. 이 속성의 사용은 다음 예제에 나와 있습니다.
{
"properties": {
"policyAssignmentId": "/providers/Microsoft.Management/managementGroups/{mgName}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
"policyDefinitionReferenceId": [
"limitSku",
"limitType"
],
"exemptionCategory": "Waiver",
"assignmentScopeValidation": "DoNotValidate",
},
"systemData": { ...
},
"id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
"type": "Microsoft.Authorization/policyExemptions",
"name": "DemoExpensiveVM"
}
assignmentScopeValidation
에 허용되는 값은 Default
및 DoNotValidate
입니다. 지정하지 않으면 기본 유효성 검사 프로세스가 실행됩니다.
필요한 사용 권한
정책 예외 개체를 관리하는 데 필요한 Azure RBAC(Azure 역할 기반 액세스 제어) 권한은 Microsoft.Authorization/policyExemptions
작업 그룹에 있습니다. 기본 제공 역할 리소스 정책 기여자 및 보안 관리자는 모두 read
및 write
사용 권한을 가지며 Policy Insights 데이터 쓰기 권한자(미리 보기)에는 read
권한이 있습니다.
예외에는 예외를 부여할 때의 영향 때문에 추가 보안 조치가 있습니다. 리소스 계층 또는 개별 리소스에 대한 Microsoft.Authorization/policyExemptions/write
작업을 요구하는 것 이외에도 예외 작성자에게는 대상 할당 관련한 exempt/Action
동사가 있어야 합니다.
예외 만들기 및 관리
시간 제한이 있거나 구체적인 시나리오에는 예외가 권장됩니다(해당 시나리오에 리소스 또는 리소스 계층 구조를 계속 추적하고 평가해야 하지만 준수 여부를 평가해서는 안 되는 구체적인 이유가 있는 경우). 예를 들어, 환경에 기본 제공 정의 Storage accounts should disable public network access
(ID: b2982f36-99f2-4db5-8eff-283140c09693
)이(가) 감사로 설정된 효과로 할당된 경우. 규정 준수 평가 시 리소스 StorageAcc1
은 비준수이지만, StorageAcc1
은 비즈니스 목적으로 공용 네트워크 액세스를 사용하도록 설정해야 합니다. 이때 StorageAcc1
을 대상으로 하는 예외 리소스를 생성하라는 요청을 제출해야 합니다. 예외가 생성되면 StorageAcc1
이(가) 규정 준수 검토에서 면제로 표시됩니다.
정기적으로 예외 항목을 재검토하여 모든 적격 항목이 적절하게 예외되었는지 확인하고 예외 자격이 없는 경우 즉시 제거합니다. 이때 만료된 예외 리소스도 삭제할 수 있습니다.
다음 단계
- 예외에 대한 Azure Resource Graph 쿼리에 대해 알아봅니다.
- 제외와 예외의 차이점에 대해 알아봅니다.
- Microsoft.Authorization policyExemptions 리소스 종류를 검토합니다.
- 규정 준수 데이터를 가져오는 방법을 알아봅니다.
- 규정 비준수 리소스를 수정하는 방법을 알아봅니다.