Azure Policy 정의 deny 효과

deny 효과는 정책 정의를 통해 정의된 표준과 일치하지 않고 요청에 실패하는 리소스 요청을 방지하는 데 사용됩니다.

거부 평가

Resource Manager 모드에서 일치된 리소스를 만들거나 업데이트할 때 deny는 리소스 공급자에게 보내기 전에 먼저 요청을 방지합니다. 요청은 403 (Forbidden)으로 반환됩니다. 포털에서 Forbidden은 정책 할당으로 인해 차단된 배포 상태로 볼 수 있습니다. 리소스 공급자 모드에서는 리소스 공급자가 리소스의 평가를 관리합니다.

기존 리소스의 평가 중 deny 정책 정의와 일치하는 리소스는 비준수로 표시됩니다.

거부 속성

Resource Manager 모드의 경우 deny 효과에는 정책 정의의 then 조건에 사용할 속성이 더 이상 없습니다.

Microsoft.Kubernetes.Data의 리소스 공급자 모드의 경우 deny 효과에는 다음과 같은 details 하위 속성이 있습니다. constraintTemplate이 사용 중지되므로 새 정책 또는 업데이트된 정책 정의에는 templateInfo를 사용해야 합니다.

  • templateInfo(필수)
    • constraintTemplate와 함께 사용할 수 없습니다.
    • sourceType(필수)
      • 제약 조건 템플릿의 원본 유형을 정의합니다. 허용되는 값: PublicURL 또는 Base64Encoded.

      • PublicURL인 경우 속성 url과 쌍을 이루어 제약 조건 템플릿의 위치를 제공합니다. 위치는 공개적으로 액세스할 수 있어야 합니다.

        Warning

        url 등에서 비밀을 노출할 수 있는 SAS URI 또는 토큰을 사용하지 마세요.

      • Base64Encoded인 경우 content 속성과 쌍을 이루어 기본 64로 인코딩된 제약 조건 템플릿을 제공합니다. 기존 OPA(Open Policy Agent) Gatekeeper v3 제약 조건 템플릿에서 사용자 지정 정의를 만들려면 제약 조건 템플릿에서 정책 정의 만들기를 참조하세요.

  • constraint(선택 사항)
    • templateInfo와 함께 사용할 수 없습니다.
    • 제약 조건 템플릿의 CRD 구현입니다. values를 통해 전달된 매개 변수를 {{ .Values.<valuename> }}으로 사용합니다. 아래 예제 2에서 이들 값은 {{ .Values.excludedNamespaces }}{{ .Values.allowedContainerImagesRegex }}입니다.
  • constraintTemplate(사용되지 않음)
    • templateInfo와 함께 사용할 수 없습니다.
    • 정책 정의를 만들거나 업데이트할 때 templateInfo로 바꿔야 합니다.
    • 새로운 제약 조건을 정의하는 제약 조건 템플릿 CRD(CustomResourceDefinition)입니다. 이 템플릿은 Azure Policy의 values를 통해 전달되는 Rego 논리, 제약 조건 스키마 및 제약 조건 매개 변수를 정의합니다. 자세한 내용은 Gatekeeper 제약 조건을 참조하세요.
  • constraintInfo(선택 사항)
    • constraint, constraintTemplate, apiGroups 또는 kinds와 함께 사용할 수 없습니다.
    • constraintInfo가 제공되지 않으면 templateInfo 및 정책에서 제약 조건을 생성할 수 있습니다.
    • sourceType(필수)
      • 제약 조건의 원본 유형을 정의합니다. 허용되는 값: PublicURL 또는 Base64Encoded.

      • PublicURL인 경우 제약 조건 위치를 제공하기 위해 url 속성과 쌍을 이룹니다. 위치는 공개적으로 액세스할 수 있어야 합니다.

        Warning

        url 등에서 비밀을 노출할 수 있는 SAS URI 또는 토큰을 사용하지 마세요.

  • namespaces(선택 사항)
    • 정책 평가를 제한할 Kubernetes 네임스페이스의 배열입니다.
    • 값이 비어 있거나 누락되면 정책 평가에 excludedNamespaces에 정의된 네임스페이스를 제외한 모든 네임스페이스가 포함됩니다.
  • excludedNamespaces(필수)
  • labelSelector(필수)
    • 제공된 레이블 및 선택기와 일치하는 정책 평가를 위해 포함할 Kubernetes 리소스를 지정할 수 있도록 하는 matchLabels(개체) 및 matchExpression(배열) 속성을 포함하는 개체입니다.
    • 값이 비어 있거나 누락되면 정책 평가에 excludedNamespaces에 정의된 네임스페이스를 제외한 모든 레이블과 선택기가 포함됩니다.
  • apiGroups(templateInfo 사용 시 필수)
    • 일치시킬 API 그룹을 포함하는 배열입니다. 빈 배열([""])은 핵심 API 그룹입니다.
    • apiGroups에 대한 ["*"] 정의는 허용되지 않습니다.
  • kinds(templateInfo 사용 시 필수)
    • 평가를 제한할 Kubernetes 개체의 종류를 포함하는 배열입니다.
    • 종류에 대한 ["*"] 정의는 허용되지 않습니다.
  • values(선택 사항)
    • 제약 조건에 전달할 매개 변수 및 값을 정의합니다. 각 값은 제약 조건 템플릿 CRD에 있어야 합니다.

거부 예제

예 1: Resource Manager 모드에 deny 효과 사용.

"then": {
  "effect": "deny"
}

예 2: Microsoft.Kubernetes.Data의 리소스 공급자 모드에 대해 deny 효과 사용. details.templateInfo의 추가 정보는 PublicURL의 사용을 선언하고 url을 Kubernetes에서 사용할 제약 조건 템플릿의 위치로 설정하여 허용되는 컨테이너 이미지를 제한합니다.

"then": {
  "effect": "deny",
  "details": {
    "templateInfo": {
      "sourceType": "PublicURL",
      "url": "https://store.policy.core.windows.net/kubernetes/container-allowed-images/v1/template.yaml",
    },
    "values": {
      "imageRegex": "[parameters('allowedContainerImagesRegex')]"
    },
    "apiGroups": [
      ""
    ],
    "kinds": [
      "Pod"
    ]
  }
}

다음 단계