Kubernetes 개선 제안서(KEP) 2579는 Pod 보안 정책(PSP)의 대체 기능을 구축하기 위해 초안으로 작성되었습니다. 이는 새로운 클러스터에서 안전하게 활성화되고, 사용하기 쉽고, 확장 가능한 솔루션을 제공하기 위한 것입니다. 이러한 요구 사항 중 일부는 KEP에 명시되어 있으며, 새로운 구현은 안전하고 사용하기 쉬워야 하며, 복잡한 사항이 필요한 경우에는 k-rail, Kyverno 또는 OPA gatekeeper와 같은 외부 솔루션으로 이동해야 한다고 명시되어 있습니다.
오늘날의 Pod 보안 승인은 Pod 보안 정책의 Admission 컨트롤러와 유사합니다. PSA는 Admission 컨트롤러이며 기본적으로 활성화되어 있어 추가적인 단계를 수행할 필요가 없습니다. 활성화 여부를 확인하려면 kube-apiserver pod 내에서 kube-apiserver -h
명령을 실행하고 pod security
를 grep하여 기본적으로 활성화된 Admission 컨트롤러 중 하나인지 확인할 수 있습니다.
PSA는 네임스페이스 수준에서 구성되며, 네임스페이스에 레이블을 적용하여 이를 수행합니다. 예를 들어, 네임스페이스 payroll에 pod 보안 표준을 적용하려면 다음 명령을 실행합니다:
kubectl label namespace payroll pod-security.kubernetes.io/enforce=restricted
이 명령은 payroll
네임스페이스에 제한된 보안 정책을 적용합니다. 동일한 방법으로 다른 네임스페이스에 적용하려면 동일한 명령을 실행하여 다른 네임스페이스를 대상으로 하고 모드와 보안 표준을 제공합니다.
PSA의 목표 중 하나는 구현을 단순화하는 것입니다. 사용자들이 자신만의 프로필을 작성할 필요 없이 몇 가지 내장 프로필이 정의되어 있어 적용할 표준을 선택할 수 있습니다. 사용할 수 있는 세 가지 프로필이 있습니다:
네임스페이스에 대해 Pod 보안을 구성할 때 이러한 옵션 중 하나를 선택할 수 있습니다. 모드는 정책이 위반될 경우 컨트롤 플레인이 어떤 조치를 취할지를 정의합니다.
이를 원하는 조합으로 사용할 수 있습니다. 예를 들어, enforce restricted
라고 설정하면 pod 생성이 매우 제한되며, 제한된 정책 내에서 정의된 사항을 위반하는 모든 항목이 거부됩니다. 하지만 warn and restricted
로 설정하면 사용자는 제한된 정책을 위반하는 pod를 생성할 수 있지만, 허용되지 않는다는 경고를 받게 됩니다.
이제 네임스페이스로 돌아가서, payroll 시스템에 Restricted 정책을 적용해보겠습니다. 제한 사항을 위반하는 pod는 거부됩니다. 다음 명령을 사용하여 enforce
모드와 restricted
프로필을 적용할 수 있습니다:
kubectl label namespace payroll pod-security.kubernetes.io/enforce=restricted
hr
네임스페이스에는 기본 제한을 시행하고 싶다면 다음 명령을 사용할 수 있습니다:
kubectl label namespace hr pod-security.kubernetes.io/enforce=baseline
Dev
네임스페이스에는 정책 위반 시 사용자에게 경고하는 warn
모드와 restricted
프로필을 적용하겠습니다. 이는 생성 방지를 하지 않고 경고만 표시합니다:
kubectl label namespace dev pod-security.kubernetes.io/warn=restricted
이와 같이 Kubernetes의 Pod 보안 승인(PSA)과 Pod 보안 표준(PSS)을 통해 네임스페이스별로 적절한 보안 정책을 적용할 수 있습니다. 이를 통해 클러스터의 보안을 강화하고, 다양한 애플리케이션 요구 사항에 맞는 보안 수준을 유지할 수 있습니다.