Kubernetes 클러스터에 대한 Azure Policy 이해

Azure Policy는 OPA(Open Policy Agent)에 대한 허용 컨트롤러 웹후크Gatekeeper v3을 확장하여 중앙 집중식의 일관된 방식으로 클러스터 구성 요소에 대규모 적용 및 보호 기능을 적용합니다. 클러스터 구성 요소에는 Pod, 컨테이너, 네임스페이스가 포함됩니다.

Azure Policy를 사용하면 한 곳에서 Kubernetes 클러스터 구성 요소의 규정 준수 상태를 관리하고 보고할 수 있습니다. Azure Policy의 추가 기능 또는 확장을 사용하면 안전한 정책 롤아웃 및 롤백을 위해 선택기재정의를 사용하는 기능과 같은 Azure Policy 기능으로 클러스터 구성 요소를 관리할 수 있습니다.

Kubernetes용 Azure Policy는 다음 클러스터 환경을 지원합니다.

Important

Azure Policy 추가 기능 Helm 모델 및 AKS 엔진용 추가 기능은 더 이상 사용되지 않습니다. 지침에 따라 추가 기능을 제거하세요.

개요

Azure Policy는 Kubernetes 클러스터에 Azure Policy의 추가 기능 또는 확장을 설치하여 다음 기능을 적용합니다.

  • Azure Policy 서비스를 통해 클러스터에 대한 정책 할당을 확인합니다.
  • 정책 정의를 제약 조건 템플릿제약 조건 사용자 지정 리소스 또는 변형 템플릿 리소스로 클러스터에 배포합니다(정책 정의 콘텐츠에 따라 다름).
  • 감사 및 규정 준수 세부 정보를 다시 Azure Policy 서비스에 보고합니다.

Kubernetes 클러스터에서 Azure Policy를 활성화하고 사용하려면 다음 작업을 수행합니다.

  1. Kubernetes 클러스터를 구성하고 클러스터 유형에 따라 Azure Kubernetes Service(AKS) 추가 기능 또는 Arc 지원 Kubernetes 클러스터에 대한 Azure Policy 확장을 설치합니다.

    참고 항목

    설치와 관련된 일반적인 문제는 문제 해결 - Azure Policy 추가 기능을 참조하세요.

  2. Kubernetes에 대한 샘플 Azure Policy 정의 생성 또는 사용

  3. Kubernetes 클러스터에 정의 할당

  4. 유효성 검사 대기

  5. 로깅문제 해결

  6. FAQ 섹션에서 권장 사항제한 사항 검토

AKS에 대한 Azure Policy 추가 기능 설치

필수 조건

  1. 리소스 공급자 및 미리 보기 기능을 등록합니다.

    • Azure 포털:

      Microsoft.PolicyInsights 리소스 공급자를 등록합니다. 단계는 리소스 공급자 및 형식을 참조하세요.

    • Azure CLI:

      # Log in first with az login if you're not using Cloud Shell
      
      # Provider register: Register the Azure Policy provider
      az provider register --namespace Microsoft.PolicyInsights
      
  2. Azure CLI 버전 2.12.0 이상이 설치되고 구성되어 있어야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드가 필요한 경우, Azure CLI 설치를 참조하세요.

  3. AKS 클러스터는 AKS(Azure Kubernetes Service)에서 지원되는 Kubernetes 버전이어야 합니다. 다음 스크립트를 사용하여 AKS 클러스터 버전의 유효성을 검사합니다.

    # Log in first with az login if you're not using Cloud Shell
    
    # Look for the value in kubernetesVersion
    az aks list
    
  4. Azure Policy 확장용 포트를 엽니다. Azure Policy 확장은 이러한 도메인과 포트를 사용하여 정책 정의 및 할당을 가져오고 클러스터의 규정 준수를 Azure Policy에 다시 보고합니다.

    도메인 포트
    data.policy.core.windows.net 443
    store.policy.core.windows.net 443
    login.windows.net 443
    dc.services.visualstudio.com 443

필수 구성 요소가 완료되면 관리하려는 AKS 클러스터에 Azure Policy 추가 기능을 설치합니다.

  • Azure Portal

    1. 모든 서비스를 선택한 다음 Kubernetes 서비스를 검색 및 선택하여 Azure Portal에서 AKS 서비스를 시작합니다.

    2. AKS 클러스터 중 하나를 선택합니다.

    3. Kubernetes 서비스 페이지의 왼쪽에서 정책을 선택합니다.

    4. 기본 페이지에서 추가 기능 사용 단추를 선택합니다.

  • Azure CLI

    # Log in first with az login if you're not using Cloud Shell
    
    az aks enable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
    

추가 기능 설치가 성공적이고 해당 azure-policygatekeeper Pod가 실행 중인지 유효성을 검사하려면 다음 명령을 실행합니다.

# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system

# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system

마지막으로 Azure CLI 명령을 실행하여 최신 추가 기능이 설치되어 있는지 확인하고 <rg>를 리소스 그룹 이름으로, <cluster-name>을 AKS 클러스터의 이름 az aks show --query addonProfiles.azurepolicy -g <rg> -n <cluster-name>으로 바꿉니다. 결과는 서비스 주체를 사용하는 클러스터에 대한 다음 출력과 유사해야 합니다.

{
  "config": null,
  "enabled": true,
  "identity": null
}

관리 ID를 사용하는 클러스터에 대한 다음 출력은 다음과 같습니다.

 {
   "config": null,
   "enabled": true,
   "identity": {
     "clientId": "########-####-####-####-############",
     "objectId": "########-####-####-####-############",
     "resourceId": "<resource-id>"
   }
 }

Azure Arc 지원 Kubernetes용 Azure Policy 확장 설치

Kubernetes용 Azure Policy를 사용하면 한 곳에서 Kubernetes 클러스터의 준수 상태를 관리하고 보고할 수 있습니다. Arc 지원 Kubernetes 클러스터용 Azure Policy 확장을 사용하면 Pod 및 컨테이너와 같은 Arc 지원 Kubernetes 클러스터 구성 요소를 관리할 수 있습니다.

이 문서에서는 확장 상태를 만들고표시하며 Kubernetes용 Azure Policy 확장을 삭제하는 방법을 설명합니다.

확장 플랫폼에 대한 개요는 Azure Arc 클러스터 확장을 참조하세요.

필수 조건

확장 없이 Helm을 바로 사용하여 Azure Arc 클러스터에 Kubernetes용 Azure Policy를 이미 배포한 경우 지침에 따라 Helm 차트를 삭제합니다. 삭제가 완료되면 계속 진행할 수 있습니다.

  1. Kubernetes 클러스터가 지원되는 배포인지 확인합니다.

    참고 항목

    Arc용 Azure Policy 확장은 다음 Kubernetes 배포에서 지원됩니다.

  2. 클러스터를 Azure Arc에 연결하는 것을 비롯해 여기에 나열된 일반적인 Kubernetes 확장 필수 구성 요소를 모두 충족했는지 확인합니다.

    참고 항목

    Azure Policy 확장은 이러한 지역의 Arc 지원 Kubernetes 클러스터에서 지원됩니다.

  3. Azure Policy 확장용 포트를 엽니다. Azure Policy 확장은 이러한 도메인과 포트를 사용하여 정책 정의 및 할당을 가져오고 클러스터의 규정 준수를 Azure Policy에 다시 보고합니다.

    도메인 포트
    data.policy.core.windows.net 443
    store.policy.core.windows.net 443
    login.windows.net 443
    dc.services.visualstudio.com 443
  4. Azure Policy 확장을 설치하거나 서비스 기능을 사용하도록 설정하기 전에 해당 구독에서 Microsoft.PolicyInsights 리소스 공급자를 사용하도록 설정해야 합니다.

    참고 항목

    리소스 공급자를 사용하도록 설정하려면 리소스 공급자 및 유형의 단계를 수행하거나 Azure CLI 또는 Azure PowerShell 명령을 실행합니다.

    • Azure CLI

      # Log in first with az login if you're not using Cloud Shell
      # Provider register: Register the Azure Policy provider
      az provider register --namespace 'Microsoft.PolicyInsights'
      
    • Azure PowerShell

      # Log in first with Connect-AzAccount if you're not using Cloud Shell
      
      # Provider register: Register the Azure Policy provider
      Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
      

Azure Policy 확장 만들기

참고 항목

Azure Policy 확장을 만들 때 다음에 유의하세요.

  • 자동 업그레이드가 기본적으로 사용하도록 설정되어 새 변경 내용이 배포된 경우 Azure Policy 확장 부 버전을 업데이트합니다.
  • connectedk8s에 매개 변수로 전달된 프록시 변수는 아웃바운드 프록시를 지원하기 위해 Azure Policy 확장으로 전파됩니다.

확장 인스턴스를 만들려면 Arc 지원 클러스터에서 <>를 값으로 대체하는 다음 명령을 실행합니다.

az k8s-extension create --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --extension-type Microsoft.PolicyInsights --name <EXTENSION_INSTANCE_NAME>

예시:

az k8s-extension create --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --extension-type Microsoft.PolicyInsights --name azurepolicy

출력 예:

{
  "aksAssignedIdentity": null,
  "autoUpgradeMinorVersion": true,
  "configurationProtectedSettings": {},
  "configurationSettings": {},
  "customLocationSettings": null,
  "errorInfo": null,
  "extensionType": "microsoft.policyinsights",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-test-rg/providers/Microsoft.Kubernetes/connectedClusters/my-test-cluster/providers/Microsoft.KubernetesConfiguration/extensions/azurepolicy",
 "identity": {
    "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "tenantId": null,
    "type": "SystemAssigned"
  },
  "location": null,
  "name": "azurepolicy",
  "packageUri": null,
  "provisioningState": "Succeeded",
  "releaseTrain": "Stable",
  "resourceGroup": "my-test-rg",
  "scope": {
    "cluster": {
      "releaseNamespace": "kube-system"
    },
    "namespace": null
  },
  "statuses": [],
  "systemData": {
    "createdAt": "2021-10-27T01:20:06.834236+00:00",
    "createdBy": null,
    "createdByType": null,
    "lastModifiedAt": "2021-10-27T01:20:06.834236+00:00",
    "lastModifiedBy": null,
    "lastModifiedByType": null
  },
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "1.1.0"
}

Azure Policy 확장 표시

확장 인스턴스 만들기가 성공했는지 확인하고 확장 메타데이터를 검사하려면 <>를 값으로 대체하는 다음 명령을 실행합니다.

az k8s-extension show --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>

예시:

az k8s-extension show --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --name azurepolicy

확장 설치에 성공했는지, azure-policy 및 gatekeeper Pod가 실행 중인지 확인하려면 다음 명령을 실행합니다.

# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system

# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system

Azure Policy 확장 삭제

확장 인스턴스를 삭제하려면 <>를 값으로 대체하는 다음 명령을 실행합니다.

az k8s-extension delete --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>

정책 정의 만들기

Kubernetes를 관리하기 위한 Azure Policy 언어 구조는 기존 정책 정의의 언어를 따릅니다. 클러스터 구성 요소를 관리하는 데 사용할 수 있는 Azure Policy의 기본 제공 정책 라이브러리에 할당할 수 있는 샘플 정의 파일이 있습니다.

또한 Azure Kubernetes Service 클러스터와 Azure Arc 지원 Kubernetes 클러스터 모두에 대해 구성 요소 수준에서 사용자 지정 정의 만들기를 지원합니다. 제약 조건 템플릿 및 변형 템플릿 샘플은 Gatekeeper 커뮤니티 라이브러리에서 사용할 수 있습니다. Azure Policy의 VS Code 확장을 사용하여 기존 제약 조건 템플릿 또는 변형 템플릿을 사용자 지정 Azure Policy 정책 정의로 변환할 수 있습니다.

리소스 공급자 모드Microsoft.Kubernetes.Data감사, 거부, 비활성화, 변형 효과가 Kubernetes 클러스터를 관리하는 데 사용됩니다.

감사거부OPA Constraint Framework 및 Gatekeeper v3 작업과 관련된 세부 정보 속성을 제공해야 합니다.

정책 정의의 details.templateInfo 또는 details.constraintInfo 속성의 일부로서 Azure Policy는 이러한 CustomResourceDefinitions(CRD)의 URI 또는 Base64Encoded 값을 추가 기능에 전달합니다. Rego는 Kubernetes 클러스터에 대한 요청의 유효성 검사하도록 OPA 및 Gatekeeper가 지원하는 언어입니다. Kubernetes 관리의 기존 표준을 지원함으로써 Azure Policy에서는 기존 규칙을 다시 사용하고 Azure Policy와 쌍으로 연결하여 통합 클라우드 규정 준수 보고 환경을 구성할 수 있습니다. 자세한 내용은 Rego란?을 참조하세요.

정책 정의 할당

Kubernetes 클러스터에 정책 정의를 할당하려면 적절한 Azure RBAC(Azure 역할 기반 액세스 제어) 정책 할당 작업이 할당되어야 합니다. Azure 기본 제공 역할인 리소스 정책 기여자소유자가 이러한 작업을 수행합니다. 자세한 내용은 Azure Policy의 Azure RBAC 권한을 참조하세요.

다음 단계를 통해 Azure Portal을 사용하여 클러스터를 관리하기 위한 기본 제공 정책 정의를 찾습니다. 사용자 지정 정책 정의를 사용하는 경우, 해당 정의를 만든 범주 또는 이름으로 검색합니다.

  1. Azure Portal에서 Azure Policy 서비스를 시작합니다. 왼쪽 창에서 모든 서비스를 선택한 다음, 정책을 검색하여 선택합니다.

  2. Azure Policy 페이지의 왼쪽 창에서 정의를 선택합니다.

  3. 범주 드롭다운 목록 상자에서 모두 선택을 사용하여 필터를 해제한 다음, Kubernetes를 선택합니다.

  4. 정책 정의를 선택한 다음, 할당 단추를 선택합니다.

  5. 범위를 정책 할당이 적용될 관리 그룹, 구독 또는 Kubernetes 클러스터의 리소스 그룹으로 설정합니다.

    참고 항목

    Kubernetes 정의를 위해 Azure Policy를 할당할 경우 범위에 클러스터 리소스가 포함되어야 합니다.

  6. 쉽게 식별할 수 있도록 정책 할당에 이름설명을 지정합니다.

  7. 정책 적용을 다음 값 중 하나로 설정합니다.

    • 사용 - 클러스터에 정책을 적용합니다. 위반이 있는 Kubernetes 허용 요청이 거부됩니다.

    • 사용 안 함 - 클러스터에서 정책을 적용하지 않습니다. 위반이 있는 Kubernetes 허용 요청이 거부되지 않습니다. 규정 준수 평가 결과는 계속 제공됩니다. 실행 중인 클러스터에 새 정책 정의를 롤아웃하는 경우 위반이 있는 허용 요청은 거부되지 않으므로 사용 안 함 옵션이 정책 정의를 테스트하는 데 도움이 됩니다.

  8. 다음을 선택합니다.

  9. 매개 변수 값 설정

    • 정책 평가에서 Kubernetes 네임스페이스를 제외하려면 네임 스페이스 제외 매개 변수에 네임스페이스 목록을 지정합니다. kube-system, gatekeeper-systemazure-arc를 제외하는 것이 좋습니다.
  10. 검토 + 만들기를 선택합니다.

또는 정책 할당 - 포털 빠른 시작을 사용하여 Kubernetes 정책을 찾고 할당합니다. 샘플 audit vms 대신 Kubernetes 정책 정의를 검색합니다.

Important

기본 제공 정책 정의는 Kubernetes 범주의 Kubernetes 클러스터에 제공됩니다. 기본 제공 정책 정의 목록은 Kubernetes 샘플을 참조하세요.

정책 평가

추가 기능은 Azure Policy 서비스를 통해 체크 인하여 15분마다 정책 할당에 변경 사항이 있는지 확인합니다. 새로 고침 주기 동안 추가 기능은 변경 사항이 있는지 확인합니다. 이러한 변경 사항은 제약 조건 템플릿 및 제약 조건에 대한 생성, 업데이트 또는 삭제를 트리거합니다.

Kubernetes 클러스터에서 네임스페이스에 cluster-appropriate 레이블이 있으면 위반이 있는 허용 요청이 거부되지 않습니다. 규정 준수 평가 결과는 계속 제공됩니다.

  • Azure Arc 지원 Kubernetes 클러스터: admission.policy.azure.com/ignore

참고 항목

클러스터 관리자는 Azure Policy 추가 기능에서 설치한 제약 조건 템플릿 및 제약 조건 리소스를 만들고 업데이트할 수 있는 권한이 있지만 수동 업데이트가 덮어써 있으므로 지원되지 않는 시나리오입니다. Gatekeeper는 추가 기능을 설치하고 Azure Policy 정책 정의를 할당하기 전에 있었던 정책을 계속해서 평가합니다.

추가 기능은 15분마다 클러스터에 대한 전체 검사를 호출합니다. Gatekeeper에서 클러스터에 시도된 변경을 전체 검사하고 실시간 평가한 세부 정보를 수집한 후 추가 기능은 Azure Policy 할당 같은 규정 준수 세부 정보를 포함하기 위해 결과를 다시 Azure Policy에 보고합니다. 감사 주기 동안에는 활성 정책 할당의 결과만 반환됩니다. 감사 결과는 실패한 제약 조건의 상태 필드에 나열된 위반으로 확인할 수도 있습니다. 비호환 리소스에 대한 자세한 내용은 리소스 공급자 모드에 대한 구성 요소 세부 정보를 참조하세요.

참고 항목

Kubernetes 클러스터에 대한 Azure Policy의 각 규정 준수 보고서에는 지난 45분 이내의 모든 위반이 포함됩니다. 타임스탬프는 위반이 발생한 시기를 나타냅니다.

기타 고려 사항은 다음과 같습니다.

  • 클러스터 구독이 클라우드용 Microsoft Defender에 등록된 경우 Cloud Kubernetes용 Microsoft Defender 정책이 클러스터에 자동으로 적용됩니다.

  • 기존 Kubernetes 리소스를 사용하여 클러스터에 거부 정책을 적용하면 새 정책과 호환되지 않는 기존 리소스가 계속 실행됩니다. 비호환 리소스가 다른 노드에서 다시 예약되면 Gatekeeper가 리소스 생성을 차단합니다.

  • 클러스터에 리소스의 유효성을 검사하는 거부 정책이 있으면 배포를 만들 때 사용자에게 거부 메시지가 표시되지 않습니다. 예를 들면, 복제 세트와 Pod가 포함된 Kubernetes 배포를 생각해 보세요. 사용자가 kubectl describe deployment $MY_DEPLOYMENT를 실행하면 이벤트의 일부로 거부 메시지가 반환되지 않습니다. 하지만 kubectl describe replicasets.apps $MY_DEPLOYMENT에서는 거부와 관련된 이벤트를 반환합니다.

참고 항목

정책 평가 중에 Init 컨테이너가 포함될 수 있습니다. init 컨테이너가 포함되어 있는지 확인하려면, CRD에서 다음 또는 유사한 선언을 검토합니다.

input_containers[c] {
   c := input.review.object.spec.initContainers[_]
}

제약 조건 템플릿 충돌

제약 조건 템플릿의 리소스 메타데이터 이름이 같지만 정책 정의가 다른 위치에 있는 원본을 참조하는 경우 정책 정의가 충돌하는 것으로 간주됩니다. 예: 두 정책 정의는 Azure Policy 템플릿 저장소(store.policy.core.windows.net)와 GitHub 같이 서로 다른 원본 위치에 저장된 동일한 template.yaml 파일을 참조합니다.

정책 정의 및 해당 제약 조건 템플릿이 할당되었지만 클러스터에 아직 설치되어 있지 않고 충돌하는 경우에는 충돌로 보고되며 충돌이 해결될 때까지 클러스터에 설치되지 않습니다. 마찬가지로 새로 할당된 정책 정의와 충돌하는 클러스터에 이미 있는 기존 정책 정의와 해당 제약 조건 템플릿은 계속 정상적으로 작동합니다. 기존 할당이 업데이트되고 제약 조건 템플릿을 동기화하지 못한 경우 클러스터도 충돌로 표시됩니다. 모든 충돌 메시지는 AKS 리소스 공급자 모드 규정 준수 이유를 참조하세요.

로깅

Kubernetes 컨트롤러/컨테이너로 azure-policygatekeeper Pod는 모두 Kubernetes 클러스터에 로그를 유지합니다. 일반적으로 azure-policy 로그는 클러스터에 대한 정책 수집 및 규정 준수 보고와 관련된 문제를 해결하는 데 사용할 수 있습니다. gatekeeper-controller-manager Pod 로그는 런타임 거부 문제를 해결하는 데 사용할 수 있습니다. gatekeeper-audit Pod 로그는 기존 리소스 감사 문제를 해결하는 데 사용할 수 있습니다. 로그는 Kubernetes 클러스터의 인사이트 페이지에 공개될 수 있습니다. 자세한 내용은 컨테이너용 Azure Monitor를 사용하여 Kubernetes 클러스터 성능 모니터링을 참조하세요.

추가 기능 로그를 보려면 kubectl을 사용합니다.

# Get the azure-policy pod name installed in kube-system namespace
kubectl logs <azure-policy pod name> -n kube-system

# Get the gatekeeper pod name installed in gatekeeper-system namespace
kubectl logs <gatekeeper pod name> -n gatekeeper-system

규정 준수 결과에 표시되는 특정 ComplianceReasonCode 문제를 해결하려는 경우 해당 코드에 대한 azure-policy Pod 로그를 검색하여 전체 관련 오류를 확인할 수 있습니다.

자세한 내용은 Gatekeeper 설명서의 Gatekeeper 디버깅을 참조하세요.

Gatekeeper 아티팩트 보기

추가 기능에서 정책 할당을 다운로드하고 클러스터에 제약 조건 템플릿 및 제약 조건을 설치한 후, 정책 할당 ID와 정책 정의 ID 같은 Azure Policy 정보를 사용하여 둘 다에 주석을 추가합니다. 클라이언트에서 추가 기능 관련 아티팩트를 표시하도록 구성하려면 다음 단계를 사용합니다.

  1. 클러스터에 대해 kubeconfig를 설정합니다.

    Azure Kubernetes Service 클러스터에서 다음 Azure CLI를 사용합니다.

    # Set context to the subscription
    az account set --subscription <YOUR-SUBSCRIPTION>
    
    # Save credentials for kubeconfig into .kube in your home folder
    az aks get-credentials --resource-group <RESOURCE-GROUP> --name <CLUSTER-NAME>
    
  2. 클러스터 연결을 테스트합니다.

    kubectl cluster-info 명령을 실행합니다. 성공적으로 실행하면 각 서비스가 실행 중인 URL로 응답합니다.

추가 기능 제약 조건 템플릿 보기

추가 기능에서 다운로드한 제약 조건 템플릿을 보려면 kubectl get constrainttemplates을 실행합니다. k8sazure로 시작하는 제약 조건 템플릿은 추가 기능에서 설치한 템플릿입니다.

추가 기능 변형 템플릿 보기

추가 기능에서 다운로드한 변형 템플릿을 보려면 kubectl get assign, kubectl get assignmetadata, kubectl get modifyset을 실행하세요.

Azure Policy 매핑 가져오기

클러스터에 다운로드된 제약 조건 템플릿과 정책 정의 간의 매핑을 식별하려면 kubectl get constrainttemplates <TEMPLATE> -o yaml을 사용합니다. 결과는 다음 출력과 유사합니다.

apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
    annotations:
    azure-policy-definition-id: /subscriptions/<SUBID>/providers/Microsoft.Authorization/policyDefinitions/<GUID>
    constraint-template-installed-by: azure-policy-addon
    constraint-template: <URL-OF-YAML>
    creationTimestamp: "2021-09-01T13:20:55Z"
    generation: 1
    managedFields:
    - apiVersion: templates.gatekeeper.sh/v1beta1
    fieldsType: FieldsV1
...

<SUBID>는 구독 ID이고 <GUID>는 매핑된 정책 정의의 ID입니다. <URL-OF-YAML>은 추가 기능이 클러스터에 설치하기 위해 다운로드한 제약 조건 템플릿의 원본 위치입니다.

추가 기능 다운로드 제약 조건 템플릿의 이름을 갖고 있으면 이 이름을 사용해 관련 제약 조건을 볼 수 있습니다. kubectl get <constraintTemplateName>을 사용하여 목록을 가져옵니다. 추가 기능에서 설치한 제약 조건은 azurepolicy-로 시작합니다.

제약 조건 세부 정보 보기

제약 조건에는 정책 정의와 할당에 대한 위반 및 매핑과 관련된 세부 정보가 있습니다. 세부 정보를 보려면 kubectl get <CONSTRAINT-TEMPLATE> <CONSTRAINT> -o yaml을 사용합니다. 결과는 다음 출력과 유사합니다.

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAzureContainerAllowedImages
metadata:
  annotations:
    azure-policy-assignment-id: /subscriptions/<SUB-ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Authorization/policyAssignments/<ASSIGNMENT-GUID>
    azure-policy-definition-id: /providers/Microsoft.Authorization/policyDefinitions/<DEFINITION-GUID>
    azure-policy-definition-reference-id: ""
    azure-policy-setdefinition-id: ""
    constraint-installed-by: azure-policy-addon
    constraint-url: <URL-OF-YAML>
  creationTimestamp: "2021-09-01T13:20:55Z"
spec:
  enforcementAction: deny
  match:
    excludedNamespaces:
    - kube-system
    - gatekeeper-system
    - azure-arc
  parameters:
    imageRegex: ^.+azurecr.io/.+$
status:
  auditTimestamp: "2021-09-01T13:48:16Z"
  totalViolations: 32
  violations:
  - enforcementAction: deny
    kind: Pod
    message: Container image nginx for container hello-world has not been allowed.
    name: hello-world-78f7bfd5b8-lmc5b
    namespace: default
  - enforcementAction: deny
    kind: Pod
    message: Container image nginx for container hello-world has not been allowed.
    name: hellow-world-89f8bfd6b9-zkggg

추가 기능 문제 해결

Kubernetes용 추가 기능의 문제를 해결하는 방법에 대한 자세한 내용은 Azure Policy 문제 해결 문서의 Kubernetes 섹션을 참조하세요.

Arc 확장 관련 문제에 대한 Azure Policy 확장은 다음으로 이동하세요.

Azure Policy 관련 문제는 다음으로 이동합니다.

AKS Changelog용 Azure Policy 추가 기능

AKS를 위한 Azure Policy 추가 기능에는 추가 기능의 이미지 버전을 나타내는 버전 번호가 있습니다. 추가 기능에 기능 지원이 새로 도입됨에 따라 버전 번호가 증가합니다.

이 섹션은 클러스터에 설치된 추가 기능 버전을 식별하고 AKS 클러스터별로 설치된 Azure Policy 추가 기능 버전의 기록 테이블을 공유하는 데 도움이 됩니다.

클러스터에 설치된 추가 기능 버전 식별

Azure Policy 추가 기능은 각 버전에 대해 표준 유의적 버전 스키마를 사용합니다. 사용 중인 Azure Policy 추가 기능 버전을 식별하려면 kubectl get pod azure-policy-<unique-pod-identifier> -n kube-system -o json | jq '.spec.containers[0].image' 명령을 실행할 수 있습니다.

Azure Policy 추가 기능이 사용하는 Gatekeeper 버전을 식별하려면 kubectl get pod gatekeeper-controller-<unique-pod-identifier> -n gatekeeper-system -o json | jq '.spec.containers[0].image' 명령을 실행할 수 있습니다.

마지막으로 사용 중인 AKS 클러스터 버전을 식별하려면 연결된 AKS 지침을 따르세요.

각 AKS 클러스터 버전별로 사용 가능한 추가 기능 버전

1.3.0

오류 정책의 오류 상태를 도입하여 비준수 상태의 정책과 구분할 수 있도록 합니다. 변경 정책에서 v1 제약 조건 템플릿 및 excludedNamespaces 매개 변수 사용에 대한 지원을 추가합니다. 설치 후 제약 조건 템플릿에 오류 상태 검사 추가합니다.

  • 릴리스 날짜: 2024년 2월
  • Kubernetes 1.25+
  • 게이트키퍼 3.14.0

1.2.1

  • 2023년 10월 릴리스
  • Kubernetes 1.25+
  • Gatekeeper 3.13.3

1.1.0

  • 2023년 7월 릴리스
  • Kubernetes 1.27+
  • Gatekeeper 3.11.1

1.0.1

  • 2023년 6월 릴리스
  • Kubernetes 1.24+
  • Gatekeeper 3.11.1

1.0.0

Kubernetes용 Azure Policy는 이제 AKS 클러스터를 대규모로 수정하기 위한 변형을 지원합니다.

추가 기능 제거

AKS에서 추가 기능 제거

AKS 클러스터에서 Azure Policy 추가 기능을 제거하려면 Azure Portal 또는 Azure CLI를 사용합니다.

  • Azure Portal

    1. 모든 서비스를 선택한 다음 Kubernetes 서비스를 검색 및 선택하여 Azure Portal에서 AKS 서비스를 시작합니다.

    2. Azure Policy 추가 기능을 사용하지 않으려는 AKS 클러스터를 선택합니다.

    3. Kubernetes 서비스 페이지의 왼쪽에서 정책을 선택합니다.

    4. 기본 페이지에서 추가 기능 사용 안 함 단추를 선택합니다.

  • Azure CLI

    # Log in first with az login if you're not using Cloud Shell
    
    az aks disable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
    

Azure Arc 지원 Kubernetes에서 추가 기능 제거

참고 항목

Azure Policy 추가 항목 Helm 모델은 이제 더 이상 사용되지 않습니다. 대신 Azure Arc 지원 Kubernetes용 Azure Policy 확장을 선택하세요.

Azure Arc 지원 Kubernetes 클러스터에서 Azure Policy 추가 기능 및 Gatekeeper를 제거하려면 다음 Helm 명령을 실행합니다.

helm uninstall azure-policy-addon

AKS 엔진에서 추가 기능 제거

참고 항목

Azure 퍼블릭 클라우드 고객은 이제 더 이상 AKS Engine 제품을 사용할 수 없습니다. 관리되는 Kubernetes에 AKS(Azure Kubernetes Service)를 사용하거나 자체 관리형 Kubernetes에 클러스터 API 공급자 Azure를 사용하는 것이 좋습니다. 계획된 새로운 기능은 없습니다. 이 프로젝트는 CVE 및 동급에 대해서만 업데이트되며, 업데이트를 받을 수 있는 마지막 버전은 Kubernetes 1.24입니다.

AKS 엔진 클러스터에서 Azure Policy 추가 기능 및 Gatekeeper를 제거하려면 추가 기능을 설치한 방식에 맞는 방법을 사용합니다.

  • AKS 엔진에 대한 클러스터 정의에서 addons 속성을 설정하여 설치된 경우:

    azure-policy에 대한 addons 속성을 false로 변경한 후 클러스터 정의를 AKS 엔진에 다시 배포합니다.

    "addons": [{
        "name": "azure-policy",
        "enabled": false
    }]
    

    자세한 내용은 AKS 엔진 - Azure Policy 추가 기능 사용 안 함을 참조하세요.

  • Helm 차트와 함께 설치한 경우에는 다음 Helm 명령을 실행합니다.

    helm uninstall azure-policy-addon
    

제한 사항

  • 일반적인 Azure Policy 정의 및 할당 제한에 대해서는 Azure Policy의 문서화된 제한을 검토하세요.
  • Kubernetes용 Azure Policy 추가 기능은 Linux 노드 풀에만 배포할 수 있습니다.
  • 클러스터당 Azure Policy 추가 기능이 지원하는 최대 Pod 수: 10,000
  • 클러스터별 정책당 최대 비호환 레코드 수: 500
  • 구독당 최대 비호환 레코드 수: 100만
  • Azure Policy 추가 기능 외의 Gatekeeper 설치는 지원되지 않습니다. Azure Policy 추가 기능을 사용하도록 설정하기 전에 이전 Gatekeeper 설치를 통해 설치된 모든 구성 요소를 제거합니다.
  • Microsoft.Kubernetes.Data 리소스 공급자 모드에서는 비준수 이유를 사용할 수 없습니다. 구성 요소 세부 정보를 사용합니다.
  • 리소스 공급자 모드에서는 구성 요소 수준 제외가 지원되지 않습니다. 특정 네임스페이스를 제외하거나 포함하기 위한 매개 변수 지원은 Azure Policy 정의에서 사용할 수 있습니다.
  • 제약 조건 템플릿에서 metadata.gatekeeper.sh/requires-sync-data 주석을 사용하여 클러스터에서 OPA 캐시로의 데이터 복제를 구성하는 것은 현재 기본 제공 정책에서만 허용됩니다. 신중하게 사용하지 않으면 Gatekeeper Pod의 리소스 사용량이 크게 증가할 수 있기 때문입니다.

다음 제한 사항은 AKS용 Azure Policy 추가 기능에만 적용됩니다.

  • AKS Pod 보안 정책 및 AKS용 Azure Policy 추가 기능을 모두 사용하도록 설정할 수 없습니다. 자세한 내용은 AKS Pod 보안 제한을 참조하세요.
  • 평가를 위해 Azure Policy 추자 기능에서 kube-system 및 gatekeeper-system 네임스페이스는 자동으로 제외됩니다.

자주 묻는 질문

Azure Policy 추가 기능/Azure Policy 확장은 설치 시 내 클러스터에 무엇을 배포하나요?

Azure Policy 추가 기능을 실행하려면 Gatekeeper 구성 요소가 3개(감사 Pod 1개, 웹후크 Pod 복제본 2개) 필요합니다. Azure Policy Pod 1개와 Azure Policy 웹후크 Pod 1개도 설치됩니다.

각 클러스터에서 Azure Policy 추가 기능/확장을 사용하려면 얼마나 많은 리소스를 소비해야 하나요?

클러스터에서 실행되는 Kubernetes용 Azure Policy 구성 요소는 감사 및 적용 작업이 필요한 클러스터의 Kubernetes 리소스 및 정책 할당 수가 증가함에 따라 더 많은 리소스를 사용합니다. 다음은 계획을 세우는 데 도움이 되는 추정치입니다.

  • 제약 조건이 최대 20개 있는 단일 클러스터의 Pod가 500개보다 적은 경우: vCPU 2개와 구성 요소별 메모리 350MB
  • 제약 조건이 최대 40개 있는 단일 클러스터의 Pod가 500개보다 많은 경우: vCPU 3개와 구성 요소별 메모리 600MB

Kubernetes용 Azure Policy 정의를 Windows Pod에 적용할 수 있나요?

Windows Pod는 보안 컨텍스트를 지원하지 않습니다. 따라서 루트 권한 허용 안 함 같은 일부 Azure Policy 정의는 Windows Pod에서 에스컬레이션될 수 없으며 Linux Pod에만 적용됩니다.

Azure Policy 추가 기능은 어떤 유형의 진단 데이터를 수집하나요?

Kubernetes용 Azure Policy 추가 기능은 제한된 클러스터 진단 데이터를 수집합니다. 이 진단 데이터는 소프트웨어 및 성능과 관련된 중요한 기술 데이터입니다. 다음과 같은 방법으로 사용됩니다.

  • Azure Policy 추가 기능을 최신 상태로 유지
  • Azure Policy 추가 기능을 안전하고 신뢰할 수 있으며 성능이 뛰어나게 유지
  • Azure Policy 추가 기능 향상 - 추가 기능 사용의 집계 분석을 통해

추가 기능이 수집한 정보는 개인 데이터가 아닙니다. 현재 수집되는 세부 정보는 다음과 같습니다.

  • Azure Policy 추가 기능 에이전트 버전
  • 클러스터 유형
  • 클러스터 영역
  • 클러스터 리소스 그룹
  • 클러스터 리소스 ID
  • 클러스터 구독 ID
  • 클러스터 OS(예: Linux)
  • 클러스터 도시(예: 시애틀)
  • 클러스터 주(예: 워싱턴)
  • 클러스터 국가 또는 지역(예: 미국)
  • 정책 평가에 에이전트를 설치하는 동안 Azure Policy 추가 기능에서 발생한 예외/오류
  • Azure Policy 추가 기능으로 설치하지 않은 Gatekeeper 정책 정의 수

Azure Policy 추가 기능을 설치할 때 염두에 두어야 할 일반적인 모범 사례는 무엇인가요?

  • CriticalAddonsOnly taint와 함께 시스템 노드 풀을 사용하여 Gatekeeper Pod를 예약합니다. 자세한 내용은 시스템 노드 풀 사용을 참조하세요.
  • AKS 클러스터에서 아웃바운드 트래픽을 보호합니다. 자세한 내용은 클러스터 노드의 송신 트래픽 제어를 참조하세요.
  • 클러스터에 aad-pod-identity가 활성화된 경우 NMI(Node Managed Identity) Pod는 노드의 iptable을 수정하여 Azure 인스턴스 메타데이터 엔드포인트에 대한 호출을 가로챌 수 있습니다. 이 구성은 Pod가 aad-pod-identity를 사용하지 않는 경우에도 메타데이터 엔드포인트에 대한 모든 요청을 NMI가 가로챈다는 의미입니다.
  • AzurePodIdentityException CRD는 CRD에 정의된 레이블과 일치하는 Pod에서 시작되는 메타데이터 엔드포인트에 대한 모든 요청이 NMI에서 처리되지 않고 프록시되어야 함을 aad-pod-identity에 알리도록 구성할 수 있습니다. kubernetes.azure.com/managedby: kube-system 네임스페이스의 aks 레이블이 있는 시스템 Pod는 AzurePodIdentityException CRD를 구성하여 aad-pod-identity에서 제외해야 합니다. 자세한 내용은 특정 Pod 또는 애플리케이션에 대한 aad-pod-identity 사용 안 함을 참조하세요. 예외를 구성하려면 mic-exception YAML을 설치합니다.

다음 단계