Azure Policy 할당 구조

정책 할당은 Azure Policy에서 어떤 리소스에 어떤 정책 또는 이니셔티브가 할당되는지 정의하는 데 사용됩니다. 정책 할당은 정책을 할당할 때 해당 리소스 그룹에 대한 매개 변수 값을 결정할 수 있으므로 규정 준수 요구 사항이 다른, 동일한 리소스 속성을 처리하는 정책 정의를 다시 사용할 수 있습니다.

참고 항목

Azure Policy 범위에 대한 자세한 내용은 Azure Policy의 범위 이해를 참조하세요.

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

예를 들어 다음 JSON은 동적 매개 변수를 사용하는 DoNotEnforce 모드의 정책 할당을 보여 줍니다.

{
    "properties": {
        "displayName": "Enforce resource naming rules",
        "description": "Force resource names to begin with DeptA and end with -LC",
        "metadata": {
            "assignedBy": "Cloud Center of Excellence"
        },
        "enforcementMode": "DoNotEnforce",
        "notScopes": [],
        "policyDefinitionId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
        "nonComplianceMessages": [
            {
                "message": "Resource names must start with 'DeptA' and end with '-LC'."
            }
        ],
        "parameters": {
            "prefix": {
                "value": "DeptA"
            },
            "suffix": {
                "value": "-LC"
            }
        },
        "identity": {
            "type": "SystemAssigned"
        },
        "resourceSelectors": [],
        "overrides": []
    }
}

모든 Azure Policy 샘플은 Azure Policy 샘플에 있습니다.

표시 이름 및 설명

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

메타데이터

선택적 metadata 속성은 정책 할당에 대한 정보를 저장합니다. 고객은 metadata에서 조직에 유용한 모든 속성 및 값을 정의할 수 있습니다. 그러나 Azure Policy에서 사용되는 몇 가지 공통 속성이 있습니다. 각 metadata 속성의 제한은 1024자입니다.

공통 메타데이터 속성

  • assignedBy(문자열): 할당을 만든 보안 주체의 이름입니다.

  • createdBy(문자열): 할당을 만든 보안 주체의 GUID 입니다.

  • createdOn(문자열): 할당 생성 시간의 유니버설 ISO 8601날짜/시간 형식입니다.

  • parameterScopes(개체): 키는 strongType으로 구성된 매개 변수 이름과 일치하며 값은 Portal에서 사용되는 리소스 그룹을 정의하여, strongType 일치를 통해 사용 가능한 리소스 목록을 제공하는 키-값 쌍의 컬렉션입니다. 범위가 할당 범위와 다른 경우 Portal에서 이 값을 설정합니다. 설정된 경우 Portal에서 정책 할당을 편집하면 매개 변수의 범위가 자동으로 이 값으로 설정됩니다. 그러나 범위는 값으로 잠기지 않으며 다른 범위로 변경할 수 있습니다.

    다음 parameterScopes 예제는 이름이 backupPolicyIdstrongType 매개 변수에 대한 것으로, Portal에서 할당이 편집될 때 리소스 선택에 대한 범위를 설정합니다.

    "metadata": {
        "parameterScopes": {
            "backupPolicyId": "/subscriptions/{SubscriptionID}/resourcegroups/{ResourceGroupName}"
        }
    }
    
  • updatedBy(문자열): 해당하는 경우 할당을 업데이트한 보안 주체의 이름입니다.

  • updatedOn(문자열): 해당하는 경우 할당 업데이트 시간의 유니버설 ISO 8601날짜/시간 형식입니다.

  • evidenceStorages(개체): manual 효과의 정책 할당에 대한 증명 증거를 포함하는 데 사용해야 하는 권장되는 기본 스토리지 계정입니다. displayName 속성은 스토리지 계정의 이름입니다. evidenceStorageAccountID 속성은 스토리지 계정의 리소스 ID입니다. evidenceBlobContainer 속성은 증거를 저장하려는 Blob 컨테이너 이름입니다.

    {
      "properties": {
        "displayName": "A contingency plan should be in place to ensure operational continuity for each Azure subscription.",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/{definitionId}",
        "metadata": {
          "evidenceStorages": [
            {
              "displayName": "Default evidence storage",
              "evidenceStorageAccountId": "/subscriptions/{subscriptionId}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}",
              "evidenceBlobContainer": "evidence-container"
            }
          ]
        }
      }
    }
    

리소스 선택기

선택적 resourceSelectors 속성은 리소스 위치, 리소스 종류 또는 리소스에 위치가 있는지 여부와 같은 요인에 따라 정책 할당을 점진적으로 롤아웃할 수 있도록 하여 SDP(안전한 배포 사례)를 용이하게 합니다. 리소스 선택기를 사용하는 경우 Azure Policy는 리소스 선택기에서 만든 사양에 적용할 수 있는 리소스만 평가합니다. 리소스 선택기를 사용하면 같은 방식으로 예외 범위를 좁힐 수도 있습니다.

다음 예 시나리오에서는 리소스의 위치가 미국 동부 또는 미국 서부인 경우에만 새 정책 할당이 평가됩니다.

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
        "definitionVersion": "1.1",
        "resourceSelectors": [
            {
                "name": "SDPRegions",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "eastus", "westus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "ResourceLimit"
}

정책의 평가 범위를 확장할 준비가 되면 할당을 수정하기만 하면 됩니다. 다음 예에서는 SDPRegions 선택기에 Azure 지역이 두 개 더 추가된 정책 할당을 보여 줍니다. 이 예제에서 SDP안전한 배포 사례를 의미합니다.

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
        "definitionVersion": "1.1",
        "resourceSelectors": [
            {
                "name": "SDPRegions",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "eastus", "westus", "centralus", "southcentralus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "ResourceLimit"
}

리소스 선택기에는 다음과 같은 속성이 있습니다.

  • name: 리소스 선택기의 이름입니다.

  • selectors: (선택 사항) 규정 준수를 평가해야 하는 정책 할당에 적용 가능한 리소스의 하위 집합을 확인하는 데 사용되는 속성입니다.

    • kind: 평가된 리소스 집합의 범위를 좁히는 특성을 설명하는 선택기의 속성입니다. 각 종류는 단일 리소스 선택기에서 한 번만 사용할 수 있습니다. 허용된 값은 다음과 같습니다.

      • resourceLocation: 이 속성은 형식에 따라 리소스를 선택하는 데 사용됩니다. resourceWithoutLocation과 동일한 리소스 선택기에서 사용할 수 없습니다.

      • resourceType: 이 속성은 형식에 따라 리소스를 선택하는 데 사용됩니다.

      • resourceWithoutLocation: 이 속성은 위치가 없는 구독 수준의 리소스를 선택하는 데 사용됩니다. 현재 subscriptionLevelResources만 지원합니다. resourceLocation과 동일한 리소스 선택기에서 사용할 수 없습니다.

    • in: 지정된 kind에 허용되는 값 목록입니다. notIn와 함께 사용할 수 없습니다. 최대 50개의 값을 포함할 수 있습니다.

    • notIn: 지정된 kind에 허용되지 않는 값 목록입니다. in와 함께 사용할 수 없습니다. 최대 50개의 값을 포함할 수 있습니다.

리소스 선택기에는 여러 선택기가 포함될 수 있습니다. 리소스 선택기에 적용하려면 리소스가 모든 선택기에서 지정한 요구 사항을 충족해야 합니다. 또한 단일 할당에서 최대 10개의 리소스 선택기를 지정할 수 있습니다. 범위 내 리소스는 이러한 리소스 선택기 중 하나를 충족할 때 평가됩니다.

재정의

선택적 overrides 속성을 사용하면 기본 정책 정의를 수정하거나 정책 정의에서 매개 변수가 있는 효과를 사용하지 않고 정책 정의의 효과를 변경할 수 있습니다.

재정의에 가장 일반적인 사용 사례는 많은 수의 관련 정책 정의가 있는 정책 이니셔티브입니다. 이 경우 여러 정책 효과를 관리하면 특히 수시로 효과를 업데이트해야 하는 경우 상당한 관리 작업이 필요할 수 있습니다. 재정의를 사용하여 이니셔티브 내에서 여러 정책 정의의 효과를 동시에 업데이트할 수 있습니다.

한 가지 예를 살펴보겠습니다. policyDefinitionReferenceIdcorpVMSizePolicy를 사용하는 사용자 지정 정책 정의와 audit의 단일 효과를 포함하는 CostManagement라는 정책 이니셔티브가 있다고 상상해 보십시오. CostManagement 이니셔티브를 할당하려고 하지만 이 정책에 대해 보고된 규정 준수는 아직 보고하지 않으려는 경우를 가정합니다. 다음 샘플과 같이 이니셔티브 할당에 대한 재정의를 통해 이 정책의 '감사' 효과를 '사용하지 않도록 설정'로 바꿀 수 있습니다.

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policySetDefinitions/CostManagement",
        "overrides": [
            {
                "kind": "policyEffect",
                "value": "disabled",
                "selectors": [
                    {
                        "kind": "policyDefinitionReferenceId",
                        "in": [ "corpVMSizePolicy" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "CostManagement"
}

재정의는 다음과 같은 속성을 가집니다.

  • kind: 할당이 재정의할 속성입니다. 지원되는 종류는 policyEffect입니다.

  • value: 기존 값을 재정의하는 새 값입니다. 지원되는 값은 효과입니다.

  • selectors: (선택 사항) 재정의에 대해 수행해야 하는 정책 할당의 범위를 결정하는 데 사용되는 속성입니다.

    • kind: 재정의 범위를 좁힐 특성을 설명하는 선택기의 속성입니다. kind: policyEffect에 허용되는 값은 다음과 같습니다.

      • policyDefinitionReferenceId: 효과 재정의에 적용해야 하는 이니셔티브 할당 내에서 정책 정의를 지정합니다.
    • in: 지정된 kind에 허용되는 값 목록입니다. notIn와 함께 사용할 수 없습니다. 최대 50개의 값을 포함할 수 있습니다.

    • notIn: 지정된 kind에 허용되지 않는 값 목록입니다. in와 함께 사용할 수 없습니다. 최대 50개의 값을 포함할 수 있습니다.

policyDefinitionReferenceId 배열에서 여러 값을 지정하여 여러 정책의 효과를 바꾸는 데 하나의 재정의를 사용할 수 있습니다. 단일 재정의는 최대 50개의 policyDefinitionReferenceId에 사용할 수 있으며, 단일 정책 할당은 지정된 순서대로 평가되는 최대 10개의 재정의를 포함할 수 있습니다. 할당을 만들기 전에 재정의에서 선택한 효과는 정책 규칙 및 매개 변수 허용 값 목록(효과가 매개 변수화된 경우)에 대해 유효성이 검사됩니다.

적용 모드

enforcementMode 속성은 Azure 활동 로그에서 정책 효과를 시작하거나 항목을 트리거하지 않고 기존 리소스에 대한 정책 결과를 테스트하는 기능을 고객에게 제공합니다.

해당 시나리오를 일반적으로 “What If”라고 하며 안전 배포 방법에 부합합니다. enforcementMode사용 안 함 효과와 다릅니다. 해당 효과는 리소스 평가가 전혀 일어나지 않도록 합니다.

해당 속성 값은 다음과 같습니다.

모드 JSON 값 Type 수동으로 수정 활동 로그 항목 Description
사용 기본값 문자열 Yes 리소스를 만들거나 업데이트하는 동안 정책 효과가 적용됩니다.
사용 안 함 DoNotEnforce 문자열 Yes 리소스를 만들거나 업데이트하는 동안 정책 효과가 적용되지 않습니다.

정책 또는 이니셔티브 정의에 enforcementMode가 지정되지 않은 경우에는 ‘기본값’을 사용합니다. enforcementModeDoNotEnforce로 설정된 경우에도 deployIfNotExists 정책에 대해 수정 작업을 시작할 수 있습니다.

제외된 범위

할당 범위는 모든 자식 리소스 컨테이너 및 자식 리소스를 포함합니다. 자식 리소스 컨테이너 또는 자식 리소스에 정의가 적용되지 않아야 하는 경우에는 notScopes를 설정하여 계산에서 ‘제외’할 수 있습니다. 해당 속성은 하나 이상의 리소스 컨테이너 또는 리소스를 평가에서 제외할 수 있도록 하는 배열입니다. notScopes는 초기 할당을 만든 후 추가하거나 업데이트할 수 있습니다.

참고 항목

‘제외’된 리소스는 ‘예외’ 리소스와 다릅니다. 자세한 내용은 Azure Policy의 범위 이해를 참조하세요.

정책 정의 ID

해당 필드는 정책 정의 또는 이니셔티브 정의의 전체 경로 이름이어야 합니다. policyDefinitionId는 문자열이며 배열이 아닙니다. 할당된 정책 정의 또는 이니셔티브의 최신 콘텐츠는 정책 할당이 평가될 때마다 검색됩니다. 여러 정책을 함께 할당하는 경우 대신 이니셔티브를 사용하는 것이 좋습니다.

비준수 메시지

리소스가 정책 또는 이니셔티브 정의를 준수하지 않는 이유를 설명하는 사용자 지정 메시지를 설정하려면 할당 정의에서 nonComplianceMessages를 설정합니다. 해당 노드는 message 항목의 배열입니다. 해당 사용자 지정 메시지는 비준수에 대한 기본 오류 메시지에 추가되며 선택 사항입니다.

Important

비준수에 대한 사용자 지정 메시지는 리소스 관리자 모드 정의를 사용하는 정의 또는 이니셔티브에서만 지원됩니다.

"nonComplianceMessages": [
    {
        "message": "Default message"
    }
]

이니셔티브에 대한 할당인 경우 이니셔티브의 각 정책 정의에 대해 서로 다른 메시지를 구성할 수 있습니다. 메시지는 이니셔티브 정의에 구성된 policyDefinitionReferenceId 값을 사용합니다. 자세한 내용은 정책 정의 속성을 참조하세요.

"nonComplianceMessages": [
    {
        "message": "Default message"
    },
    {
        "message": "Message for just this policy definition by reference ID",
        "policyDefinitionReferenceId": "10420126870854049575"
    }
]

매개 변수

이 정책 할당 세그먼트는 정책 정의 또는 이니셔티브 정의에 정의된 매개 변수에 대한 값을 제공합니다. 해당 설계를 통해 여러 리소스에 정책 또는 이니셔티브 정의를 다시 사용할 수 있지만, 다른 비즈니스 가치 또는 결과를 확인해야 합니다.

"parameters": {
    "prefix": {
        "value": "DeptA"
    },
    "suffix": {
        "value": "-LC"
    }
}

해당 예제에서 이전에 정책 정의에 정의된 매개 변수는 prefixsuffix입니다. 이 특정 정책 할당은 prefixDeptA로 설정하고 suffix-LC로 설정합니다. 동일한 정책 정의를 다른 부서에 다른 매개 변수 집합과 다시 사용할 수 있으므로 정책 정의의 중복 및 복잡성을 줄이면서 유연성을 제공할 수 있습니다.

ID

효과가 deployIfNotExist 또는 modify로 설정된 정책 할당의 경우 비준수 리소스에 대한 수정을 수행하려면 ID 속성이 있어야 합니다. ID를 사용하는 경우 사용자는 할당의 위치도 지정해야 합니다.

참고 항목

단일 정책 할당은 하나의 시스템 또는 사용자 할당 관리 ID에만 연결할 수 있습니다. 그러나 필요한 경우 해당 ID에 둘 이상의 역할을 할당할 수 있습니다.

# System-assigned identity
 "identity": {
    "type": "SystemAssigned"
  }
# User-assigned identity
  "identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/SubscriptionID/resourceGroups/testResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
    }
  },

다음 단계