다음을 통해 공유


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

다음 단계