Pod Security Standards

지원 버전: Kubernetes 1.31, 1.32, 1.33 마지막 업데이트: 2026년 2월 22일

Pod Security Standards(PSS)는 Kubernetes에서 Pod 보안을 위한 표준화된 정책 프레임워크입니다. 이 문서에서는 PSS의 개념, 구성 방법, 그리고 EKS 환경에서의 적용 방법을 상세히 알아봅니다.

목차


PSP에서 PSS로의 진화

PodSecurityPolicy(PSP)의 역사

PodSecurityPolicy(PSP)는 Kubernetes 1.3에서 처음 도입된 Pod 보안 메커니즘이었습니다. 그러나 다음과 같은 문제점으로 인해 Kubernetes 1.21에서 사용 중단(deprecated)되었고, 1.25에서 완전히 제거되었습니다:

PSS의 도입 배경

Pod Security Standards(PSS)와 Pod Security Admission(PSA)은 Kubernetes 1.22에서 알파로 도입되어, 1.23에서 베타, 1.25에서 GA(Generally Available)가 되었습니다.

spinner

PSP vs PSS 비교

특성
PodSecurityPolicy (PSP)
Pod Security Standards (PSS)

활성화 방법

Admission Controller 플러그인

내장 (기본 활성화)

정책 정의

커스텀 PSP 리소스

사전 정의된 3가지 프로파일

정책 바인딩

RBAC를 통한 복잡한 바인딩

네임스페이스 레이블로 간단히 적용

적용 범위

클러스터 전체 또는 네임스페이스

네임스페이스 레벨

Dry-run

미지원

warn/audit 모드 지원

감사

제한적

내장 감사 지원

유연성

높음 (세밀한 제어 가능)

중간 (표준화된 프로파일)

복잡성

높음

낮음


Pod Security Admission (PSA) 컨트롤러

PSA 아키텍처

Pod Security Admission(PSA)은 Kubernetes API 서버에 내장된 Admission Controller로, Pod 생성 및 업데이트 요청을 가로채서 Pod Security Standards에 따라 검증합니다.

PSA 작동 방식

spinner

PSA 활성화 상태 확인

Kubernetes 1.25 이상에서는 PSA가 기본적으로 활성화되어 있습니다:


보안 수준 (Security Levels)

PSS는 세 가지 보안 수준(프로파일)을 정의합니다. 각 수준은 점진적으로 더 엄격한 보안 제약을 적용합니다.

1. Privileged (특권)

가장 느슨한 정책으로, 제한이 없습니다. 시스템 및 인프라 수준의 워크로드에 적합합니다.

Privileged 수준 허용 항목:

  • 호스트 네트워크, PID, IPC 네임스페이스

  • 특권 컨테이너

  • 모든 capabilities

  • 호스트 경로 마운트

  • 모든 사용자/그룹 ID

2. Baseline (기본)

최소한의 제한을 적용하여 알려진 권한 상승을 방지합니다. 대부분의 일반 워크로드에 적합합니다.

Baseline 수준 제한 항목:

항목
제한 내용

HostProcess

Windows HostProcess 컨테이너 금지

Host Namespaces

hostNetwork, hostPID, hostIPC 금지

Privileged Containers

privileged: true 금지

Capabilities

NET_RAW 외 추가 capabilities 금지

HostPath Volumes

hostPath 볼륨 금지

Host Ports

호스트 포트 사용 금지

AppArmor

기본 프로파일 또는 localhost/* 만 허용

SELinux

type은 제한된 값만, user/role 설정 금지

/proc Mount Type

기본값만 허용

Seccomp

RuntimeDefault, Localhost만 허용

Sysctls

안전한 sysctls만 허용

3. Restricted (제한)

가장 엄격한 정책으로, Pod 보안 강화 모범 사례를 적용합니다. 보안이 중요한 워크로드에 적합합니다.

Restricted 수준 추가 제한 항목:

항목
제한 내용

Volume Types

configMap, csi, downwardAPI, emptyDir, ephemeral, persistentVolumeClaim, projected, secret만 허용

Privilege Escalation

allowPrivilegeEscalation: false 필수

Running as Non-root

runAsNonRoot: true 필수

Running as Non-root user

runAsUser는 0이 아닌 값 필수 (v1.23+)

Seccomp

RuntimeDefault 또는 Localhost 필수

Capabilities

모든 capabilities drop 필수, NET_BIND_SERVICE만 추가 허용

보안 수준 비교 차트


적용 모드 (Enforcement Modes)

PSA는 세 가지 적용 모드를 제공합니다. 이 모드들은 독립적으로 또는 함께 사용할 수 있습니다.

1. enforce (적용)

정책 위반 시 Pod 생성을 차단합니다.

동작 예시:

2. audit (감사)

정책 위반 시 감사 로그에 기록하지만 Pod 생성은 허용합니다.

감사 로그 예시:

3. warn (경고)

정책 위반 시 사용자에게 경고 메시지를 표시하지만 Pod 생성은 허용합니다.

경고 메시지 예시:

모드 조합 전략

실제 환경에서는 여러 모드를 조합하여 사용하는 것이 권장됩니다:


네임스페이스 레벨 구성

기본 레이블 구성

PSS는 네임스페이스 레이블을 통해 구성됩니다:

버전 지정

특정 Kubernetes 버전의 PSS 정의를 사용할 수 있습니다:

환경별 구성 예시

기존 네임스페이스에 레이블 추가


PSP에서 PSS로 마이그레이션

마이그레이션 개요

PSP에서 PSS로의 마이그레이션은 신중하게 계획하고 단계적으로 수행해야 합니다.

spinner

1단계: 현재 PSP 분석

2단계: PSP를 PSS 프로파일로 매핑

매핑 결과: 위 PSP는 restricted 프로파일에 해당

PSP → PSS 매핑 테이블

PSP 설정
PSS 프로파일
비고

privileged: true

Privileged

-

privileged: false, allowPrivilegeEscalation: true

Baseline

-

privileged: false, allowPrivilegeEscalation: false, runAsUser.rule: MustRunAsNonRoot

Restricted

모든 capabilities drop 필요

3단계: 테스트 환경에서 검증

4단계: 점진적 적용

5단계: 워크로드 수정

마이그레이션 자동화 스크립트


EKS 기본 설정 및 구성

EKS의 PSA 기본 설정

Amazon EKS는 Kubernetes 1.23 이상에서 PSA를 기본적으로 활성화합니다. 그러나 기본적으로 어떤 네임스페이스에도 PSS 레이블이 적용되어 있지 않습니다.

EKS에서 PSS 구성

EKS 시스템 네임스페이스 고려사항

EKS 애드온과 PSS 호환성

EKS 애드온
권장 PSS 수준
비고

VPC CNI (aws-node)

Privileged

호스트 네트워킹 필요

CoreDNS

Baseline

-

kube-proxy

Privileged

호스트 네트워킹 필요

EBS CSI Driver

Privileged

호스트 볼륨 접근 필요

EFS CSI Driver

Privileged

호스트 볼륨 접근 필요

CloudWatch Agent

Privileged

호스트 접근 필요

Fluent Bit

Privileged

호스트 로그 접근 필요

ALB Controller

Baseline

-

Cluster Autoscaler

Baseline

-

EKS Terraform 예시


보안 프로파일 상세

Privileged 프로파일 상세

Privileged 프로파일은 모든 권한을 허용하며, 제한이 없습니다.

Baseline 프로파일 상세

Restricted 프로파일 상세

Restricted 준수 Nginx 완전 예시


예외 구성

클러스터 레벨 예외 구성

PSA는 AdmissionConfiguration을 통해 클러스터 레벨 예외를 구성할 수 있습니다.

EKS에서 예외 구성

EKS는 관리형 컨트롤 플레인을 사용하므로 AdmissionConfiguration을 직접 수정할 수 없습니다. 대신 네임스페이스 레이블을 통해 예외를 구성합니다:

런타임 클래스 기반 예외

Kyverno를 사용한 세밀한 예외

PSS만으로 예외를 구성하기 어려운 경우 Kyverno를 함께 사용할 수 있습니다:


점진적 도입 모범 사례

1단계: 현재 상태 분석

2단계: 점진적 롤아웃 전략

3단계: 모니터링 및 알림 설정

4단계: 자동화된 준수 검사

5단계: 문서화 및 교육


문제 해결

일반적인 오류 및 해결 방법

1. "allowPrivilegeEscalation != false" 오류

2. "unrestricted capabilities" 오류

3. "runAsNonRoot != true" 오류

4. "seccompProfile" 오류

PSS 위반 검사 도구


요약

Pod Security Standards(PSS)는 Kubernetes에서 Pod 보안을 관리하는 표준화된 방법을 제공합니다:

  1. 세 가지 보안 수준: Privileged(모든 권한), Baseline(알려진 권한 상승 방지), Restricted(최소 권한)

  2. 세 가지 적용 모드: enforce(차단), audit(로깅), warn(경고)

  3. 네임스페이스 레이블로 간단히 구성: RBAC 바인딩 없이 레이블만으로 정책 적용

  4. 점진적 도입 지원: warn/audit 모드를 통한 안전한 마이그레이션

권장 사항

  • 새 클러스터는 처음부터 PSS를 활성화

  • 기존 클러스터는 warn 모드부터 시작하여 점진적으로 강화

  • 프로덕션 환경에서는 최소한 baseline 수준 적용 권장

  • 민감한 워크로드에는 restricted 수준 적용


참고 자료

마지막 업데이트