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 정책에 위반하면 위반된 사유를 기재해주고 아래와 같은 오류 발생
'k8s > CKS' 카테고리의 다른 글
[CKS] cilium (0) | 2025.09.08 |
---|---|
[CKS] k8s Cluster & node version upgrade (0) | 2025.09.08 |
[CKS] falco 사용방법 및 샘플 - 2 (0) | 2025.09.07 |
[CKS] falco 사용방법 및 샘플 - 1 (0) | 2025.09.07 |
[CKS] Admission Control in Kubernetes - ImagePolicyWebhook (0) | 2025.09.07 |