본문 바로가기
클라우드/쿠버네티스 보안

파드 보안 표준(Pod Security Standards), 왜 필요할까요? 🤔

by gasbugs 2025. 10. 6.

쿠버네티스에서 파드(Pod)는 애플리케이션이 실행되는 가장 작은 단위입니다. 그런데 만약 파드가 호스트 노드(Host Node)의 중요한 정보에 접근하거나 다른 파드에 영향을 줄 수 있다면 큰 보안 위협이 될 수 있겠죠? 💣

 

이러한 위협을 방지하기 위해 쿠버네티스는 파드 보안 표준을 정의하여, 파드가 생성될 때 특정 보안 요구사항을 충족하도록 강제합니다. 이를 통해 클러스터 전체의 보안 수준을 높일 수 있습니다.

 

 


파드 보안 표준의 세 가지 레벨 🛡️

파드 보안 표준은 세 가지 레벨로 나뉩니다. 각 레벨은 허용하는 권한의 범위가 다르며, privileged가 가장 허용적이고 restricted가 가장 엄격합니다.

  • Privileged (특권): 가장 허용적인 정책입니다. 알려진 모든 권한 상승을 허용하며, 거의 모든 파드를 실행할 수 있습니다. 시스템 수준의 워크로드를 관리하는 등 특별한 경우에만 사용해야 합니다.
  • Baseline (기준): 중간 수준의 정책입니다. 알려진 권한 상승을 방지하며, 대부분의 일반적인 애플리케이션에 권장됩니다. 깐깐하지만 너무 제한적이지는 않은, 합리적인 기본값이라고 생각하시면 됩니다. ✅
  • Restricted (제한): 가장 엄격한 정책입니다. 파드 강화(hardening) 모범 사례를 따르며, 보안이 매우 중요한 워크로드에 적합합니다. 이 레벨을 사용하면 일부 애플리케이션이 제대로 실행되지 않을 수 있으므로, 적용 전에 충분한 테스트가 필요합니다. 🔒

클러스터와 네임스페이스에 적용하기 🚀

파드 보안 표준은 클러스터 전체에 적용하거나 특정 네임스페이스에만 선택적으로 적용할 수 있습니다.

네임스페이스 레벨에서 적용하기

특정 네임스페이스에만 파드 보안 표준을 적용하고 싶다면, 네임스페이스의 **레이블(label)**을 사용하면 됩니다. 정말 간단해요!

예를 들어, my-namespace라는 네임스페이스에 baseline 정책을 적용하고 싶다면 다음 명령어를 실행합니다.

kubectl label --overwrite ns my-namespace pod-security.kubernetes.io/enforce=baseline

 

이렇게 레이블을 설정하면, my-namespace에 생성되는 모든 파드는 baseline 정책을 통과해야만 합니다. 만약 정책을 위반하는 파드를 생성하려고 하면, API 서버가 생성을 거부합니다. 🙅‍♀️

네임스페이스 레이블은 다음과 같이 세 가지 모드(mode)를 가질 수 있습니다.

  • enforce: 정책을 위반하는 파드의 생성을 차단합니다.
  • audit: 정책을 위반하는 파드가 생성될 때 경고 로그를 남깁니다. (생성은 허용)
  • warn: 정책을 위반하는 파드가 생성될 때 사용자에게 경고 메시지를 표시합니다. (생성은 허용)

예를 들어, enforce는 baseline으로, warn은 restricted로 설정하여 점진적으로 보안 수준을 높여갈 수 있습니다.

kubectl label --overwrite ns my-namespace pod-security.kubernetes.io/enforce=baseline pod-security.kubernetes.io/warn=restricted

 

클러스터 레벨에서 적용하기

클러스터 전체에 기본적으로 파드 보안 표준을 적용하고 싶다면, Admission Controller 설정을 변경해야 합니다. 이는 클러스터를 처음 설정하거나 관리할 때 주로 사용되는 방법입니다.

PodSecurity 어드미션 컨트롤러의 설정 파일에 다음과 같이 클러스터 전체에 적용할 기본 정책을 정의할 수 있습니다.

# admission-configuration.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
  configuration:
    apiVersion: pod-security.k8s.io/v1beta1
    kind: PodSecurityConfiguration
    defaults:
      enforce: "baseline"
      enforce-version: "latest"
      audit: "restricted"
      audit-version: "latest"
      warn: "restricted"
      warn-version: "latest"
    exemptions:
      # 시스템 네임스페이스는 정책에서 제외
      namespaces: ["kube-system"]

이 설정은 클러스터의 모든 네임스페이스에 기본적으로 baseline 정책을 강제하고, restricted 정책 위반 시에는 경고를 표시하도록 합니다. kube-system과 같이 쿠버네티스 시스템 컴포넌트가 실행되는 네임스페이스는 정책 적용에서 제외(exemption)하는 것이 일반적입니다.


마무리하며 ✨

지금까지 쿠버네티스 클러스터와 네임스페이스 레벨에서 파드 보안 표준을 적용하는 방법에 대해 알아보았습니다. 애플리케이션의 특성과 보안 요구사항에 맞는 적절한 정책 레벨과 모드를 선택하여 클러스터를 더욱 안전하게 보호하세요! 🛡️

쿠버네티스 보안, 어렵지 않아요! 😉