Azure Policy 예외 구조

Azure Policy 예외 기능을 사용하여 이니셔티브나 정의 평가에서 개별 리소스나 리소스 계층 구조를 제외합니다. 제외된 리소스는 전체 규정 준수에 포함되지만, 평가하거나 임시 면제를 가질 수 없습니다. 자세한 내용은 Azure Policy의 범위 이해를 참조하세요. Azure Policy 예외는 Resource Manager 모드에서만 작동하며 리소스 공급자 모드에서는 작동하지 않습니다.

참고

기본적으로 Azure Policy는 평가할 수 있는 구독 및 리소스 Microsoft.Resources 그룹을 제외하고 RP(리소스 공급자)의 모든 리소스를 정책 평가에서 제외합니다.

JSON(JavaScript Object Notation)을 사용하여 정책 예외를 만듭니다. 정책 정의에는 다음 요소가 포함됩니다.

참고

정책 예외는 리소스 계층에서 자식 개체로 만들어지거나 개별 리소스에 예외가 부여되었으므로, 해당 대상이 예외 정의에 포함되지 않습니다. 예외가 적용되는 부모 리소스가 제거되면 예외도 제거됩니다.

예를 들어 다음 JSON은 resourceShouldBeCompliantInit라는 이니셔티브 할당에 대한 리소스의 면제 범주의 정책 예외를 보여 줍니다. 리소스는 이니셔티브의 두 정책 정의, customOrgPolicy 사용자 지정 정책 정의(requiredTags 참조), 허용된 위치 기본 제공 정책 정의(ID: e56962a6-4747-49cd-b67b-bf8b01975c4c, allowedLocations 참조)에서만 제외됩니다.

{
    "id": "/subscriptions/{subId}/resourceGroups/ExemptRG/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",
        "policyDefinitionReferenceIds": [
            "requiredTags",
            "allowedLocations"
        ],
        "exemptionCategory": "waiver",
        "expiresOn": "2020-12-31T23:59:00.0000000Z",
        "assignmentScopeValidation": "Default"
    }
}

정책 예외에 사용되는 policyDefinitionReferenceIds 일치 항목으로 관련 이니셔티브의 코드 조각입니다.

"policyDefinitions": [
    {
        "policyDefinitionId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyDefinitions/customOrgPolicy",
        "policyDefinitionReferenceId": "requiredTags",
        "parameters": {
            "reqTags": {
                "value": "[parameters('init_reqTags')]"
            }
        }
    },
    {
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/e56962a6-4747-49cd-b67b-bf8b01975c4c",
        "policyDefinitionReferenceId": "allowedLocations",
        "parameters": {
            "listOfAllowedLocations": {
                "value": "[parameters('init_listOfAllowedLocations')]"
            }
        }
    }
]

표시 이름 및 설명

displayNamedescription을 사용하여 정책 예외를 식별하고 특정 리소스와 함께 사용하기 위한 컨텍스트를 제공합니다. displayName은 최대 길이가 128자이고 description은 최대 길이가 512자입니다.

메타데이터

메타데이터 속성을 사용하면 관련 정보를 저장하는 데 필요한 자식 속성을 만들 수 있습니다. 위의 예제에서 requestedBy, approvedBy, approvedOn, ticketRef 속성은 예외 요청자, 승인자, 승인 시기, 요청에 대한 내부 추적 티켓 관련 정보를 제공하는 고객 값을 포함합니다. 해당 메타데이터 속성은 예제이지만 필요하지 않으며 메타데이터는 자식 속성으로 제한되지 않습니다.

정책 할당 ID

이 필드는 정책 할당 또는 이니셔티브 할당의 전체 경로 이름이어야 합니다. policyAssignmentId는 문자열이며 배열이 아닙니다. 이 속성은 부모 리소스 계층 구조 또는 개별 리소스가 제외되는 할당을 정의합니다.

정책 정의 ID

policyAssignmentId가 이니셔티브 할당용일 경우 policyDefinitionReferenceIds 속성을 사용하여 주체 리소스에 예외가 있는 이니셔티브의 정책 정의를 지정할 수 있습니다. 하나 이상 포함된 정책 정의에서 리소스가 제외될 수 있으므로 이 속성은 배열입니다. 값은 policyDefinitions.policyDefinitionReferenceId 필드에 있는 이니셔티브 정의의 값과 일치해야 합니다.

예외 범주

예외를 그룹화하는 데 사용되는 두 개의 예외 범주가 있습니다.

  • 완화됨: 정책 의도가 다른 메서드를 통해 충족되었으므로 예외가 부여됩니다.
  • 면제: 리소스의 비준수 상태가 일시적으로 수락되었으므로 예외가 부여됩니다. 이 범주를 사용하는 또 다른 이유는 이니셔티브에서 하나 이상의 정의에서 제외되어야 하지만 전체 이니셔티브에서 제외해서는 안 되는 리소스 또는 리소스 계층 구조를 위함입니다.

만료

리소스 계층 구조 또는 개별 리소스가 더 이상 할당에서 제외되지 않는 시기를 설정하려면 expiresOn 속성을 설정합니다. 이 선택적 속성은 유니버설 ISO 8601 날짜/시간 형식(yyyy-MM-ddTHH:mm:ss.fffffffZ)이어야 합니다.

참고

expiresOn 날짜가 되면 정책 예외가 삭제되지 않습니다. 개체는 레코드 유지를 위해 유지되지만, 예외는 더 적용되지 않습니다.

리소스 선택기(미리 보기)

예외는 선택적 속성 resourceSelectors을 지원합니다. 이 속성은 할당에서와 마찬가지로 예외에서 동일한 방식으로 작동하므로 리소스 종류, 리소스 위치 또는 리소스에 위치가 있는지 여부에 따라 제어된 방식으로 특정 리소스 하위 집합에 대한 예외 를 점진적으로 롤백하거나 롤백할 수 있습니다. 리소스 선택기를 사용하는 방법에 대한 자세한 내용은 할당 구조에서 찾을 수 있습니다. 다음은 리소스 선택기를 활용하는 예외 JSON 예제입니다. 이 예제에서는 의 westcentralus 리소스만 정책 할당에서 제외됩니다.

{
    "properties": {
        "policyAssignmentId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
        "policyDefinitionReferenceIds": [
            "limitSku", "limitType"
        ],
        "exemptionCategory": "Waiver",
        "resourceSelectors": [
            {
                "name": "TemporaryMitigation",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "westcentralus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/resourceGroups/demoCluster/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
    "type": "Microsoft.Authorization/policyExemptions",
    "name": "DemoExpensiveVM"
}

위 예제의 resourceLocation 목록에서 지역을 추가하거나 제거할 수 있습니다. 리소스 선택기를 사용하면 예외를 만들고 관리할 수 있는 위치와 방법을 유연하게 활용할 수 있습니다.

할당 범위 유효성 검사(미리 보기)

대부분의 시나리오에서 예외 범위는 정책 할당 범위 또는 아래에 있는지 확인하기 위해 유효성을 검사합니다. 선택적 assignmentScopeValidation 속성을 사용하면 예외가 이 유효성 검사를 무시하고 할당 범위 외부에서 만들 수 있습니다. 이는 구독을 MG(관리 그룹)에서 다른 관리 그룹으로 이동해야 하지만 구독 내 리소스의 속성으로 인해 정책에 의해 이동이 차단되는 상황을 위한 것입니다. 이 시나리오에서는 대상 MG의 정책 할당에서 리소스를 제외하기 위해 현재 MG의 구독에 대한 예외를 만들 수 있습니다. 이렇게 하면 구독이 대상 MG로 이동되면 리소스가 이미 해당 정책 할당에서 제외되어 있기 때문에 작업이 차단되지 않습니다. 이 속성의 사용은 다음과 같습니다.

{
    "properties": {
        "policyAssignmentId": "/providers/Microsoft.Management/managementGroups/{mgB}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
        "policyDefinitionReferenceIds": [
            "limitSku", "limitType"
        ],
        "exemptionCategory": "Waiver",
        "assignmentScopeValidation": "DoNotValidate",
    },
    "systemData": { ... },
    "id": "/subscriptions/{subIdA}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
    "type": "Microsoft.Authorization/policyExemptions",
    "name": "DemoExpensiveVM"
}

에 허용되는 assignmentScopeValidation 값은 및 DoNotValidate입니다Default. 지정하지 않으면 기본 유효성 검사 프로세스가 발생합니다.

필요한 사용 권한

정책 예외 개체를 관리하는 데 필요한 Azure RBAC 권한은 Microsoft.Authorization/policyExemptions 작업 그룹에 있습니다. 기본 제공 역할 리소스 정책 기여자보안 관리자는 모두 readwrite 사용 권한을 가지며 Policy Insights 데이터 쓰기 권한자(미리 보기)에는 read 권한이 있습니다.

예외에는 예외를 부여할 때의 영향 때문에 추가 보안 조치가 있습니다. 리소스 계층 또는 개별 리소스에 대한 Microsoft.Authorization/policyExemptions/write 작업을 요구하는 것 이외에도 예외 작성자에게는 대상 할당 관련한 exempt/Action 동사가 있어야 합니다.

다음 단계