Kubernetes 클러스터에 대한 Azure Policy 이해
Azure Policy는 OPA(Open Policy Agent)에 대한 허용 컨트롤러 웹후크인 Gatekeeper v3을 확장하여 중앙 집중식의 일관된 방식으로 클러스터 구성 요소에 대규모 적용 및 보호 기능을 적용합니다. 클러스터 구성 요소에는 Pod, 컨테이너, 네임스페이스가 포함됩니다.
Azure Policy를 사용하면 한 곳에서 Kubernetes 클러스터 구성 요소의 규정 준수 상태를 관리하고 보고할 수 있습니다. Azure Policy의 추가 기능 또는 확장을 사용하면 안전한 정책 롤아웃 및 롤백을 위해 선택기 및 재정의를 사용하는 기능과 같은 Azure Policy 기능으로 클러스터 구성 요소를 관리할 수 있습니다.
Kubernetes용 Azure Policy는 다음 클러스터 환경을 지원합니다.
- Azure Kubernetes Service(AKS), Azure Policy의 AKS용 추가 기능을 통해
- Azure Arc 지원 Kubernetes, Azure Policy의 Arc용 확장을 통해
Important
Azure Policy 추가 기능 Helm 모델 및 AKS 엔진용 추가 기능은 더 이상 사용되지 않습니다. 지침에 따라 추가 기능을 제거하세요.
개요
Azure Policy는 Kubernetes 클러스터에 Azure Policy의 추가 기능 또는 확장을 설치하여 다음 기능을 적용합니다.
- Azure Policy 서비스를 통해 클러스터에 대한 정책 할당을 확인합니다.
- 정책 정의를 제약 조건 템플릿 및 제약 조건 사용자 지정 리소스 또는 변형 템플릿 리소스로 클러스터에 배포합니다(정책 정의 콘텐츠에 따라 다름).
- 감사 및 규정 준수 세부 정보를 다시 Azure Policy 서비스에 보고합니다.
Kubernetes 클러스터에서 Azure Policy를 활성화하고 사용하려면 다음 작업을 수행합니다.
Kubernetes 클러스터를 구성하고 클러스터 유형에 따라 Azure Kubernetes Service(AKS) 추가 기능 또는 Arc 지원 Kubernetes 클러스터에 대한 Azure Policy 확장을 설치합니다.
참고 항목
설치와 관련된 일반적인 문제는 문제 해결 - Azure Policy 추가 기능을 참조하세요.
FAQ 섹션에서 권장 사항 및 제한 사항 검토
AKS에 대한 Azure Policy 추가 기능 설치
AKS용 Azure Policy 추가 기능은 LTS(장기 지원)가 포함된 Kubernetes 버전 1.27의 일부입니다.
필수 조건
리소스 공급자 및 미리 보기 기능을 등록합니다.
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
Azure CLI 버전 2.12.0 이상이 설치되고 구성되어 있어야 합니다. 버전을 찾으려면
az --version
명령을 실행합니다. 설치 또는 업그레이드가 필요한 경우 Azure CLI 설치 방법을 참조하세요.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
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
모든 서비스를 선택한 다음 Kubernetes 서비스를 검색 및 선택하여 Azure Portal에서 AKS 서비스를 시작합니다.
AKS 클러스터 중 하나를 선택합니다.
Kubernetes 서비스 페이지의 왼쪽에서 정책을 선택합니다.
기본 페이지에서 추가 기능 사용 단추를 선택합니다.
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-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 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 차트를 삭제합니다. 삭제가 완료되면 계속 진행할 수 있습니다.
Kubernetes 클러스터가 지원되는 배포인지 확인합니다.
참고 항목
Arc용 Azure Policy 확장은 다음 Kubernetes 배포에서 지원됩니다.
클러스터를 Azure Arc에 연결하는 것을 비롯해 여기에 나열된 일반적인 Kubernetes 확장 필수 구성 요소를 모두 충족했는지 확인합니다.
참고 항목
Azure Policy 확장은 이러한 지역의 Arc 지원 Kubernetes 클러스터에서 지원됩니다.
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
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의 Visual Studio Code 확장을 사용하여 기존 제약 조건 템플릿 또는 변형 템플릿을 사용자 지정 Azure Policy 정책 정의로 변환할 수 있습니다.
리소스 공급자 모드가 Microsoft.Kubernetes.Data
면 감사, 거부, 비활성화, 변형 효과가 Kubernetes 클러스터를 관리하는 데 사용됩니다.
감사 및 거부는 OPA 제약 조건 프레임워크 및 Gatekeeper v3 작업과 관련된 속성을 제공해야 details
합니다.
정책 정의의 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을 사용하여 클러스터를 관리하기 위한 기본 제공 정책 정의를 찾습니다. 사용자 지정 정책 정의를 사용하는 경우, 해당 정의를 만든 범주 또는 이름으로 검색합니다.
Azure Portal에서 Azure Policy 서비스를 시작합니다. 왼쪽 창에서 모든 서비스를 선택한 다음, 정책을 검색하여 선택합니다.
Azure Policy 페이지의 왼쪽 창에서 정의를 선택합니다.
범주 드롭다운 목록 상자에서 모두 선택을 사용하여 필터를 해제한 다음, Kubernetes를 선택합니다.
정책 정의를 선택한 다음, 할당 단추를 선택합니다.
정책 할당이 적용될 범위를 관리 그룹, 구독 또는 Kubernetes 클러스터의 리소스 그룹으로 설정합니다.
참고 항목
Kubernetes 정의를 위해 Azure Policy를 할당할 경우 범위에 클러스터 리소스가 포함되어야 합니다.
쉽게 식별할 수 있도록 정책 할당에 이름과 설명을 지정합니다.
정책 적용을 다음 값 중 하나로 설정합니다.
사용 - 클러스터에 정책을 적용합니다. 위반이 있는 Kubernetes 허용 요청이 거부됩니다.
사용 안 함 - 클러스터에서 정책을 적용하지 않습니다. 위반이 있는 Kubernetes 허용 요청이 거부되지 않습니다. 규정 준수 평가 결과는 계속 제공됩니다. 실행 중인 클러스터에 새 정책 정의를 롤아웃하는 경우 위반이 있는 허용 요청은 거부되지 않으므로 사용 안 함 옵션이 정책 정의를 테스트하는 데 도움이 됩니다.
다음을 선택합니다.
매개 변수 값 설정
- 정책 평가에서 Kubernetes 네임스페이스를 제외하려면 네임 스페이스 제외 매개 변수에 네임스페이스 목록을 지정합니다. kube-system, gatekeeper-system 및 azure-arc을 제외하는 것이 좋습니다.
검토 + 만들기를 선택합니다.
또는 정책 할당 - 포털 빠른 시작을 사용하여 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 및 Pod를 포함하는 Kubernetes 배포를
replicasets
고려해 보세요. 사용자가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-policy 및 gatekeeper 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 정보를 사용하여 둘 다에 주석을 추가합니다. 클라이언트에서 추가 기능 관련 아티팩트를 표시하도록 구성하려면 다음 단계를 사용합니다.
클러스터에 대해
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>
클러스터 연결을 테스트합니다.
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.7.1
CEL 및 VAP를 소개합니다. CEL(Common Expression Language)은 정책의 유효성 검사 규칙을 선언하는 데 사용할 수 있는 Kubernetes 네이티브 식 언어입니다. VAP(허용 정책) 기능의 유효성을 검사하면 트리 내 정책 평가를 제공하고 허용 요청 대기 시간을 줄이며 안정성 및 가용성을 향상시킵니다. 지원되는 유효성 검사 작업에는 거부, 경고 및 감사가 포함됩니다. CEL/VAP에 대한 사용자 지정 정책 작성이 허용되며, 기존 사용자는 Rego를 CEL로 변환할 필요가 없습니다. 둘 다 지원되며 정책을 적용하는 데 사용됩니다. CEL 및 VAP를 사용하려면 사용자가 네임스페이스의 기능 플래그 AKS-AzurePolicyK8sNativeValidation
에 Microsoft.ContainerService
등록해야 합니다. 자세한 내용은 Gatekeeper 설명서를 참조 하세요.
보안이 개선되었습니다.
- 릴리스 날짜: 2024년 9월
- Kubernetes 1.27 이상(VAP 생성은 1.30 이상에서만 지원됨)
- 게이트키퍼 3.17.1
1.7.0
확장 소개: 워크로드 리소스(배포, ReplicaSets, 작업 등)가 허용 가능한 Pod를 생성할 수 있을지를 미리 알려주는 왼쪽 이동 기능입니다. 확장은 정책의 동작을 변경하지 않습니다. 오히려 Gatekeeper의 Pod 범위 정책 평가가 Pod 허용 시간이 아닌 워크로드 허용 시간에 발생하도록 이동합니다. 그러나 이 평가를 수행하려면 불완전한 메타데이터가 있을 수 있는 워크로드에 정의된 Pod 사양을 기반으로 하는 가상 Pod를 생성하고 평가해야 합니다. 예를 들어 what-if Pod에는 적절한 소유자 참조가 포함되지 않습니다. 정책 동작이 변경될 작은 위험성 때문에 확장은 기본적으로 비활성화된 상태로 도입합니다. 지정된 정책 정의에서 확장을 활성화하려면 .policyRule.then.details.source
을 All
로 설정합니다. 이 필드의 매개 변수화를 사용할 수 있도록 곧 기본 제공이 업데이트될 예정입니다. 정책 정의를 테스트하고 평가 목적으로 생성되는 가상 Pod가 불완전한 것을 발견하는 경우 원본 Generated
의 변형을 사용하여 가상 Pod를 변경할 수도 있습니다. 이 옵션에 관한 자세한 내용은 Gatekeeper 설명서를 참조하세요.
보안이 개선되었습니다.
- 릴리스 날짜: 2024년 7월
- Kubernetes 1.27+
- Gatekeeper 3.16.3
1.6.1
보안이 개선되었습니다.
- 2024년 5월 릴리스
- Gatekeeper 3.14.2
1.5.0
보안이 개선되었습니다.
- 2024년 5월 릴리스
- Kubernetes 1.27+
- Gatekeeper 3.16.3
1.4.0
기본적으로 변형 및 외부 데이터를 사용하도록 설정합니다. 추가적인 웹후크 변경 및 증가된 유효성 검사 웹후크 제한 시간 제한으로 인해 최악의 경우 호출에 대기 시간이 추가될 수 있습니다. 또한 규정 준수 결과에서 정책 정의 및 정의 버전 설정을 볼 수 있는 지원 기능도 도입되었습니다.
- 2024년 5월에 릴리스됨
- Kubernetes 1.25+
- Gatekeeper 3.14.0
1.3.0
오류가 있는 정책에 오류 상태를 도입하여 비준수 상태의 정책과 구분할 수 있도록 합니다. v1 제약 조건 템플릿에 대한 지원과 변형 정책에서 excludedNamespaces 매개 변수 사용을 추가합니다. 설치 후 제약 조건 템플릿에 대한 오류 상태 확인을 추가합니다.
- 릴리스 날짜: 2024년 2월
- Kubernetes 1.25+
- Gatekeeper 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
모든 서비스를 선택한 다음 Kubernetes 서비스를 검색 및 선택하여 Azure Portal에서 AKS 서비스를 시작합니다.
Azure Policy 추가 기능을 사용하지 않으려는 AKS 클러스터를 선택합니다.
Kubernetes 서비스 페이지의 왼쪽에서 정책을 선택합니다.
기본 페이지에서 추가 기능 사용 안 함 단추를 선택합니다.
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의 리소스 사용량이 크게 증가할 수 있기 때문입니다.
Gatekeeper 구성 설정
중요한 보안 설정이 포함되어 있으므로 Gatekeeper 구성 변경은 지원되지 않습니다. 구성에 대한 편집 내용이 조정됩니다.
제약 조건 템플릿에서 데이터 인벤토리 사용
현재 몇 가지 기본 제공 정책은 사용자가 기존 클러스터 내 리소스를 OPA 캐시에 동기화하고 요청 평가 중에 참조할 수 있도록 하는 데이터 복제를 AdmissionReview
사용합니다. 데이터 복제 정책은 Rego의 존재와 주석의 data.inventory
metadata.gatekeeper.sh/requires-sync-data
존재로 구분할 수 있으며, 이는 정책 평가가 제대로 작동하기 위해 캐시해야 하는 리소스를 Azure Policy 추가 기능에 알릴 수 있습니다. 이 프로세스는 독립 실행형 게이트키퍼와 다르며, 이 주석은 규범적이지 않고 설명이 있습니다.
인스턴스 수가 많은 리소스를 복제할 경우 주의하지 않으면 Gatekeeper Pod의 리소스 사용량이 크게 증가할 수 있으므로 현재는 사용자 지정 정책 정의에서 사용할 수 있는 데이터 복제가 차단되어 있습니다. 이 주석이 있는 ConstraintTemplateInstallFailed
제약 조건 템플릿을 포함하는 사용자 지정 정책 정의를 만들려고 할 때 오류가 표시됩니다.
이 주석을 제거하면 표시되는 오류를 완화할 수 있지만 정책 추가 기능은 해당 제약 조건 템플릿에 필요한 리소스를 캐시와 동기화하지 않습니다. 따라서 정책이 빈 data.inventory
에 대해 평가됩니다(필수 리소스를 복제하는 기본 제공 기능이 할당되지 않았다고 가정). 이로 인해 잘못된 규정 준수 결과가 발생합니다. 이전에 설명한 것처럼 필요한 리소스를 캐시하도록 구성을 수동으로 편집하는 것도 허용되지 않습니다.
다음 제한 사항은 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와 하나의 Azure Policy 웹후크 Pod도 설치됩니다.
각 클러스터에서 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는 노드iptables
를 수정하여 Azure 인스턴스 메타데이터 엔드포인트에 대한 호출을 가로챌 수 있습니다. 이 구성은 Pod가aad-pod-identity
을(를) 사용하지 않는 경우에도 Metadata 엔드포인트에 대한 모든 요청을 NMI가 가로챈다는 의미입니다. AzurePodIdentityException
CRD에 정의된 레이블과 일치하는 Pod에서 시작된 메타데이터 엔드포인트에 대한 모든 요청이 NMI에서 처리되지 않고 프록시되어야 한다는 것을 알리aad-pod-identity
도록 CRD를 구성할 수 있습니다. kube-system 네임스페이스에kubernetes.azure.com/managedby: aks
레이블이 있는 시스템 Pod는 CRD를 구성AzurePodIdentityException
하여 제외aad-pod-identity
해야 합니다. 자세한 내용은 특정 Pod 또는 애플리케이션에 대한 aad-pod-identity 사용 안 함을 참조하세요. 예외를 구성하려면 mic-exception YAML을 설치합니다.
다음 단계
- Azure Policy 샘플에서 예제를 검토합니다.
- Policy 정의 구조를 검토합니다.
- 정책 효과 이해를 검토합니다.
- 프로그래밍 방식으로 정책을 만드는 방법을 이해합니다.
- 규정 준수 데이터를 가져오는 방법을 알아봅니다.
- 규정 비준수 리소스를 수정하는 방법을 알아봅니다.
- Azure 관리 그룹으로 리소스 구성을 포함하는 관리 그룹을 검토합니다.