Helm을 사용하여 Defender for Containers 센서 설치

이 문서에서는 Helm을 사용하여 AKS, EKS 및 GKE 클러스터에 Microsoft Defender for Containers 센서를 설치하고 구성하는 방법을 설명합니다.

Defender for Containers는 자동 프로비저닝 및 Helm 기반 설치를 포함하여 센서를 배포하기 위한 여러 배포 모델을 지원합니다. Helm 기반 배포는 센서 버전 관리 및 업그레이드 타이밍에 대한 더 큰 제어를 제공하지만 일부 운영 책임을 사용자에게 맡깁니다. Helm 기반 배포를 사용하는 경우 다음을 고려합니다.

  • 센서 업그레이드: Helm 기반 배포를 사용하여 센서 업그레이드 및 업그레이드 타이밍을 관리합니다. 자동 프로비저닝은 Microsoft 관리형 롤아웃 일정을 따릅니다.

  • 자동 설치 흐름: Helm을 사용하여 센서를 배포할 때 Azure Portal에서 자동 설치 프롬프트 및 권장 사항을 건너뛰어 기존 배포와의 충돌을 방지합니다.

필수 조건

Helm을 사용하여 센서를 설치하기 전에 다음을 확인합니다.

Helm 차트 설치

컨테이너용 Defender Helm 차트는 mcr.microsoft.com/azuredefender/microsoft-defender-for-containers에 게시됩니다.

차트에는 아래 global.cloudIdentifiers의 클러스터 식별자 값이 필요합니다. 다음 예제와 --set같이 또는 값 파일을 사용하여 이러한 값을 인라인으로 제공할 수 있습니다.

최신 차트 버전을 설치하려면 기본 Helm 설치 명령을 사용합니다. 값 파일을 사용하거나 --set와 함께 인라인으로 필요한 global.cloudIdentifiers 값을 제공하며, 환경별 예시에 표시된 것과 같습니다.

helm install defender-k8s oci://mcr.microsoft.com/azuredefender/microsoft-defender-for-containers

다음 명령을 실행하여 게시된 버전을 나열할 수 있습니다.

curl https://mcr.microsoft.com/v2/azuredefender/microsoft-defender-for-containers/tags/list

특정 버전을 설치하려면 버전 태그를 포함합니다.

helm install defender-k8s oci://mcr.microsoft.com/azuredefender/microsoft-defender-for-containers:<tag>

구성 가능한 차트 값을 검사하려면, 예를 들어 기능 플래그 또는 Pod 리소스 제한을 검사하려면 차트를 가져와 values.yaml 파일을 검토합니다.

helm pull oci://mcr.microsoft.com/azuredefender/microsoft-defender-for-containers

사용자 환경에 대한 센서를 설치하려면 다음을 수행합니다.

표준 AKS 클러스터의 경우 네임스페이스를 mdc 사용합니다.

AKS 자동 클러스터의 경우 네임스페이스를 kube-system 사용합니다.

AKS 클러스터에 이미 기존의 Defender for Containers 배포가 있는 경우, Azure용 컨테이너에 대한 Defender 구성에 설명된 대로 기존 배포를 비활성화하고, 다음 명령을 실행하여 남은 리소스를 제거합니다.

kubectl delete crd/policies.defender.microsoft.com || true
kubectl delete crd/runtimepolicies.defender.microsoft.com || true
kubectl delete crd/securityartifactpolicies.defender.microsoft.com || true
kubectl delete ClusterRole defender-admission-controller-cluster-role || true
kubectl delete ClusterRole defender-admission-controller-resource-cluster-role || true
kubectl delete ClusterRoleBinding defender-admission-controller-cluster-role-binding || true
kubectl delete ClusterRoleBinding defender-admission-controller-cluster-resource-role-binding || true

센서를 설치합니다.

helm install defender-k8s oci://mcr.microsoft.com/azuredefender/microsoft-defender-for-containers \
    --create-namespace --namespace <namespace> \
    --set global.cloudIdentifiers.Azure.subscriptionId="<cluster-subscription-id>" \
    --set global.cloudIdentifiers.Azure.resourceGroupName="<cluster-resource-group>" \
    --set global.cloudIdentifiers.Azure.clusterName="<cluster-name>" \
    --set global.cloudIdentifiers.Azure.region="<cluster-region>"

<namespace>으로 대체합니다.

  • mdc 표준 AKS 클러스터의 경우
  • kube-system AKS 자동 클러스터의 경우

설치 확인

설치 중에 사용한 네임스페이스를 사용하여 설치가 성공했는지 확인합니다.

helm list --namespace mdc

설치가 성공한 경우 STATUS 필드에 deployed가 표시됩니다.

제어된 배포에 대한 보안 규칙 구성

비고

Kubernetes 게이트 배포는 Helm을 사용하여 kube-system 네임스페이스에 센서가 설치된 경우에만 AKS 자동 클러스터에서 지원됩니다. 이 시나리오에서는 추가 기능 배포가 지원되지 않습니다.

중요합니다

규칙을 만들 때 선택한 구독이 다음과 같이 not supported for Gated deployment표시될 수 있습니다. 이 상태는 대시보드의 자동 설치가 아닌 Helm을 사용하여 Defender for Containers 구성 요소를 설치했기 때문에 발생합니다.

Kubernetes 클러스터에 배포할 수 있는 항목을 제어하는 보안 규칙을 정의합니다. 이러한 규칙은 너무 많은 취약성이 있는 이미지와 같은 보안 기준에 따라 컨테이너 이미지를 차단하거나 감사하는 데 도움이 됩니다.

  1. Azure Portal에 로그인합니다.

  2. 클라우드용 Defender> 환경 설정로 이동합니다.

  3. 보안 규칙을 선택합니다.

  4. 제어된 배포>취약성 평가를 선택합니다.

  5. 편집할 규칙을 선택하거나 + 규칙 추가 를 선택하여 새 규칙을 만듭니다.

기존 권장 사항 처리

중요합니다

Helm을 사용하여 센서를 설치하는 경우 기존 클라우드용 Defender 권장 사항을 사용하여 동일한 클러스터에 대한 Defender 프로필 또는 Arc 확장을 설치하지 마세요. 이러한 권장 사항을 수정하면 충돌하는 배포가 생성됩니다.

배포 유형에 따라 클라우드용 Defender 다음 권장 사항이 계속 표시될 수 있습니다.

기존 Helm 기반 배포를 업그레이드하기

Helm 기반 배포를 사용하여 센서 업그레이드를 관리합니다. 클라우드용 Defender는 자동으로 적용되지 않습니다.

다음 명령을 실행하여 기존 Helm 기반 배포를 업데이트합니다. 설치하는 동안 사용한 네임스페이스를 사용합니다.

helm upgrade defender-k8s \
    oci://mcr.microsoft.com/azuredefender/microsoft-defender-for-containers \
    --namespace <namespace> \
    --reuse-values

<namespace>에 대해 다음을 사용합니다.

  • mdc 표준 AKS, EKS 및 GKE 클러스터용입니다.
  • kube-system AKS 자동 클러스터의 경우

리소스 충돌로 인해 업그레이드가 실패하는 경우 업그레이드 명령에 다음 옵션을 추가합니다.

--server-side=true --resolve-conflicts