포드 보안

이 항목에서는 TKG(Tanzu Kubernetes Grid)에서 배포한 워크로드 클러스터를 보호하기 위해 PSA(포드 보안 승인) 컨트롤러를 구성하는 방법을 설명합니다.

Kubernetes v1.23 이상을 실행하는 클러스터 또는 클러스터 내의 네임스페이스의 경우 TKG는 PSA(포드 보안 승인) 컨트롤러를 통해 privileged, baseline 또는 restricted 유형의 포드 보안 정책을 적용할 수 있습니다.

배경: PSA 컨트롤러

Kubernetes의 PSA 컨트롤러를 사용하면 다음 두 축을 따라 워크로드 보안 정책을 구성할 수 있습니다.

  • 프로파일은 워크로드 포드가 실행할 수 있는 사용 권한 수준을 지정합니다. privileged, baseline, restricted 순으로 가장 제한적입니다.
  • 모드는 포드를 생성하려는 시도가 프로파일을 위반할 때 트리거된 작업을 지정합니다. warn은 경고를 출력하고, audit는 감사 로그 항목을 추가하고, enforce는 포드 생성을 차단합니다.

PSA 컨트롤러가 특정 네임스페이스 또는 클러스터 전체에서 작동하도록 구성할 수 있습니다. 예를 들어 baseline 포드가 보안 정책을 위반할 때 감사 로그를 트리거하도록 클러스터를 구성하고 restricted 포드가 정책을 위반하는 경우 차단할 수 있습니다.

자세한 내용은 Kubernetes 설명서의 포드 보안 표준을 참조하십시오.

포드 보안 정책에서 마이그레이션

PSA 시스템은 Kubernetes v1.25 릴리스 정보에 설명된 대로 Kubernetes v1.21에서 더 이상 사용되지 않으며 v1.25에서 제거된 PSP(포드 보안 정책)를 대체합니다.

노드용 PSP는 Kubernetes에서의 사용 중단을 반영하기 위해 TKG v2.1에서 더 이상 사용되지 않습니다. PSP에서 PSA 컨트롤러로 포드를 마이그레이션하는 방법에 대한 자세한 내용은 PodSecurityPolicy에서 기본 제공 PodSecurity 승인 컨트롤러로 마이그레이션을 참조하십시오.

TKG의 PSA 구성

TKG 워크로드 클러스터의 기본 PSA 설정은 실행 중인 Kubernetes 버전에 따라 다릅니다.

  • Kubernetes v1.26, TKG v2.3에 네이티브:
    • warnaudit 모드: restricted
    • enforce 모드: 설정 없음
  • Kubernetes v1.25 및 v1.24, TKG v2.2 및 v2.1에 네이티브:
    • warnaudit 모드: baseline
    • enforce 모드: 설정 없음

TKG 2.3, v2.2, v2.1에서 네이티브 Kubernetes 버전을 실행하는 클러스터의 기본 PSA 설정은 정책 위반에 대한 경고를 생성하더라도 PSP에서 PSA로 마이그레이션하는 동안 포드가 계속 실행되도록 합니다.

TKG v2.2부터 모든 내부 TKG 구성 요소는 PSA restricted 프로파일을 준수합니다.

클러스터 전체 PSA 구성

클러스터 전체 PSA를 사용하여 새 클러스터를 구성하거나 기존 클러스터의 PSA를 변경할 수 있습니다.

새 클러스터를 위한 클러스터 전체 PSA

새 워크로드 클러스터를 위한 클러스터 전체 PSA를 구성하려면 클러스터 구성 파일의 POD_SECURITY_STANDARD_DEACTIVATEDfalse로 설정하고, 다른 POD_SECURITY_STANDARD_* 변수를 구성 파일 변수 참조의 포드 보안 표준 표에 설명된 대로 설정합니다.

  • POD_SECURITY_STANDARD_DEACTIVATED
  • POD_SECURITY_STANDARD_AUDIT
  • POD_SECURITY_STANDARD_WARN
  • POD_SECURITY_STANDARD_ENFORCE

클래스 기반 클러스터 생성에 설명된 2단계 프로세스의 1단계로 클러스터 매니페스트를 생성한 다음, 2단계에서 클러스터를 생성하기 전에 아래 기존 클래스 기반 클러스터의 PSA 변경에 설명된 대로 Cluster 규격에서 podSecurityStandard 변수 값을 편집할 수도 있습니다.

기존 클래스 기반 클러스터의 PSA 변경

기존 클래스 기반 클러스터의 PSA 구성을 변경하려면 다음을 수행합니다.

  1. 편집기에서 Cluster 개체 규격을 엽니다.

    kubectl edit -namespace NAMESPACE CLUSTER
    
  2. spec.topology.variablespodSecurityStandard 블록에서 값을 편집합니다.

    - name: podSecurityStandard
    
      value:
        deactivated: DEACTIVATED
        audit: AUDIT-PROFILE
        enforce: ENFORCE-PROFILE
        warn: WARN-PROFILE
        auditVersion: AUDIT-VERSION
        enforceVersion: ENFORCE-VERSION
        warnVersion: WARN-VERSION
        exemptions:
          namespaces: [EXEMPT-NS]
    

    여기서:

    • DEACTIVATED는 클러스터 전체 PSA를 적용하려면 false이고, 그렇지 않으면 true입니다.
    • AUDIT-PROFILE, ENFORCE-PROFILE, WARN-PROFILE은 각 모드의 PSA 프로파일이며, "privileged", "baseline" 또는 "restricted"가 될 수 있습니다. 기본값은 "privileged"입니다.
    • VERSION 값은 세 가지 모드(예: "v1.26")의 Kubernetes 버전입니다.
    • EXEMPT-NS PSA 제어에서 제외할 네임스페이스의 쉼표로 구분된 목록입니다.

    참고: 시스템 네임스페이스 kube-systemtkg-system은 항상 PSA 제어에서 제외됩니다.

  3. Cluster 개체 규격을 적용한 후 변경 내용이 클러스터의 제어부 노드로 롤아웃됩니다.

기존 레거시 클러스터의 PSA 변경

기존 레거시 클러스터의 PSA 구성을 변경하려면 다음을 수행합니다.

  1. KubeadmControlPlane 개체에서 현재 AdmissionConfiguraton 규격 파일을 검색하고 로컬로 저장합니다. 예를 들면 다음과 같습니다.

    kubectl get kcp my-cluster-control-plane --template='{{ range $v := .spec.kubeadmConfigSpec.files }}{{ if eq $v.path "/etc/kubernetes/admission-control-config.yaml" }}{{ $v.content }}{{ end }}{{ end }}' > admission-config.yaml
    
  2. admission-config.yaml 파일을 새 구성에 편집합니다. 예를 들어 다음은 enforcebaseline으로 설정하고, auditwarn 모드를 restricted로 유지합니다.

    apiVersion: apiserver.config.k8s.io/v1
    kind: AdmissionConfiguration
    plugins:
    - name: PodSecurity
    configuration:
      apiVersion: pod-security.admission.config.k8s.io/v1beta1
      kind: PodSecurityConfiguration
      defaults:
        enforce: "baseline"
        enforce-version: "v1.24"
        audit: "restricted"
        audit-version: "v1.24"
        warn: "restricted"
        warn-version: "v1.24"
      exemptions:
        usernames: []
        runtimeClasses: []
        namespaces: ["kube-system", "tkg-system"]
    
  3. KubeadmControlPlane 개체 규격을 편집하고 spec.kubeadmConfigSpec.files의 어레이 항목을 새 구성 파일로 바꿉니다.

  4. KubeadmControlPlane 개체 규격을 적용한 후 변경 내용이 클러스터의 제어부 노드로 롤아웃됩니다.

PSA 구성을 추가하거나 변경하기 전에 규정 준수 검사

PSA를 추가하거나 변경하기 전에 PSA 클러스터 또는 네임스페이스의 모든 기존 워크로드가 새 정책 설정을 준수하는지 확인하여 예기치 않은 다운타임을 방지합니다.

기존 네임스페이스에서 실행되는 포드가 kubectl label --overwrite --dry-run=server를 실행하여 지정된 정책을 준수하는지 여부를 평가할 수 있습니다.

kubectl label --overwrite --dry-run=server namespace <namespace> pod-security.kubernetes.io/enforce=<policy>

포드 보안 승인의 audit 모드를 구성할 때 또는 클러스터에 리소스를 적용하고 warn 모드를 구성할 때 동일한 정보가 감사 로그에 기록됩니다.

포드 보안을 위한 다양한 프로파일에 대한 최신 정보는 Kubernetes 설명서에서 확인할 수 있습니다.

check-circle-line exclamation-circle-line close-line
Scroll to top icon