Pod Security Standards (PSS)는 쿠버네티스에서 파드(Pod)의 보안 수준을 정의하는 일련의 표준입니다. 이는 쿠버네티스 클러스터에서 파드를 실행할 때 따라야 할 권장 보안 정책을 세 가지 프로파일로 구분하여 제공합니다.

이는 과거에 사용되었던 PodSecurityPolicy(PSP)를 대체하며, 쿠버네티스 버전 1.25부터 PodSecurityPolicy가 완전히 제거되면서 PSS가 표준 보안 정책 강제(enforcement) 수단으로 자리 잡았습니다.

PSS는 세 가지 보안 프로파일을 정의합니다.

1. privileged (특권)

  • 정책: 이 프로파일은 제한이 없습니다. 모든 유형의 파드를 허용합니다.
  • 용도: privileged 파드는 호스트의 모든 권한에 접근할 수 있으며, 시스템 유틸리티 파드나 클러스터 관리 에이전트(kube-proxy, calico-node)와 같이 시스템 수준의 작업을 수행해야 하는 워크로드에 사용됩니다.
  • 보안 위험: privileged 파드는 호스트의 루트 권한을 가질 수 있어, 컨테이너 탈출(Container Breakout)과 같은 심각한 보안 취약점을 야기할 수 있습니다. 일반적인 애플리케이션에는 절대 사용해서는 안 됩니다.

2. baseline (기본)

  • 정책: 이 프로파일은 알려진 권한 상승(privilege escalation)을 방지하기 위한 최소한의 제한을 적용합니다.
  • 용도: 일반적인 애플리케이션 개발자에게 충분한 유연성을 제공하면서도, 주요 보안 위협을 방지하는 기본 보안 수준을 제공합니다.
  • 주요 제한 사항:
    • hostPath 볼륨 사용 금지
    • privileged 컨테이너 실행 금지
    • HostPID, HostIPC, HostNetwork 사용 금지
    • allowPrivilegeEscalation 필드 false 강제

3. restricted (제한됨)

  • 정책: 이 프로파일은 baseline보다 더 엄격한 제한을 적용하여 최고 수준의 파드 강화(hardening)를 목표로 합니다.
  • 용도: 보안에 매우 민감한 애플리케이션이나, 권한이 최소화된(least-privilege) 환경에 사용됩니다.
  • 주요 제한 사항:
    • baseline의 모든 제한 사항 포함
    • 컨테이너가 루트(root) 사용자로 실행되는 것을 금지 (runAsNonRoot: true 강제)
    • CAPABILITIES를 기본값으로 제한 (불필요한 기능 제거)
    • hostPath와 유사한 volume 타입 제한 (defaultMode, projected 등)

Pod Security Admission과의 관계

Pod Security Standards(PSS)는 Pod Security Admission(PSA) 컨트롤러를 통해 쿠버네티스 클러스터에 적용됩니다.

  • PSA 컨트롤러는 네임스페이스에 적용된 PSS 레이블(pod-security.kubernetes.io/enforce=baseline)을 읽어, 해당 네임스페이스에 배포되는 파드가 레이블에 정의된 보안 표준을 준수하는지 검사합니다.
  • 정책 위반 시, PSA는 enforce, audit, warn 세 가지 모드에 따라 파드 생성을 거부하거나 경고만 발생시킵니다.

 

적용 테스트

Pod Security Standards 적용을 위해 kube-apiserver.yaml 수정

spec:
  containers:
  - command:
    - kube-apiserver
    - --enable-admission-plugins=NodeRestriction,PodSecurity ####PodSecurity#### 적용

 

Pod Security Standards 적용한 namespace 와 label 추가

kubectl create namespace my-secure-ns

# `enforce=baseline` 레이블 적용
kubectl label namespace my-secure-ns pod-security.kubernetes.io/enforce=baseline

 

테스트 파드 수행

# pod-with-hostpath.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-test-pod
  namespace: my-secure-ns
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["/bin/sh", "-c", "sleep 3600"]
  volumes:
  - name: hostpath-vol
    hostPath:
      path: /

수행 결과

  • baseline 정책에 위반하면 위반된 사유를 기재해주고 아래와 같은 오류 발생

+ Recent posts