[마이크로서비스 취약성 최소화] Kubernetes에서의 Pod 보안: Pod Security Policies

IMKUNYOUNG·2024년 6월 22일
0

CKS

목록 보기
47/70

Kubernetes 환경에서의 보안은 중요한 문제입니다. 특히, Pod 보안은 클러스터의 안정성과 안전성을 보장하기 위해 반드시 고려해야 할 요소입니다. 이번 글에서는 Kubernetes에서의 Pod 보안을 위한 정책과 구현 방식의 변화를 중심으로 설명하겠습니다. Pod 보안의 초기 구현인 Pod Security Policies(PSP)에서 최신 방식인 Pod Security Admission으로의 전환 과정을 다룹니다.

Pod 보안의 필요성

Kubernetes Pod는 클러스터 내에서 애플리케이션 컨테이너를 실행하는 기본 단위입니다. Pod의 보안 설정이 적절하지 않으면 클러스터 전체가 공격에 노출될 수 있습니다. 특히, 다음과 같은 설정은 보안상 취약점을 초래할 수 있습니다:

  • Privileged 플래그: Pod 내에서 실행되는 프로세스가 호스트에서 루트 권한을 가지도록 허용
  • 루트 사용자 실행: 컨테이너가 루트 사용자(UID 0)로 실행되도록 구성
  • HostPath 볼륨 마운트: 호스트 파일 시스템에 직접 접근 가능

이러한 설정이 허용되지 않도록 보안 정책을 설정하는 것이 중요합니다.

Pod Security Policies(PSP)

Pod Security Policies(PSP)는 초기 Kubernetes 클러스터에서 Pod 보안을 구현하는 방법이었습니다. PSP는 클러스터 내에서 Pod가 생성될 때 특정 보안 규칙을 강제하는 역할을 했습니다.

PSP의 동작 방식

PSP는 어드미션 컨트롤러(admission controller)를 통해 작동했습니다. Pod 생성 요청이 들어오면 어드미션 컨트롤러가 이를 감지하고, 미리 구성된 PSP 규칙과 비교하여 규칙을 위반하는 요청을 거부했습니다. 이를 통해 클러스터에서 불필요한 권한을 가진 Pod의 생성을 방지할 수 있었습니다.

PSP 설정 예시

PSP 객체는 apiVersion: policy/v1beta1, kind: PodSecurityPolicy로 정의되며, 아래와 같이 설정할 수 있습니다:

# psp.yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
	name: example-psp
spec:
	privileged: false
	seLinux:
		rule: RunAsAny
	supplementalGroups:
		rule: RunAsAny
	runAsUser :
		rule: RunAsAny
	fsGroup:
		rule: RunAsAny

위 예시는 privileged 플래그가 false로 설정되어 있어, 루트 권한을 가진 Pod 생성을 허용하지 않습니다.

위 예시처럼, 루트 권한을 가지고 있지 않은 Pod 생성은 허용됩니다.


이외에도 PodSecurityPolicy에는 다음과 같이 상세 옵션을 추가할 수 있습니다.

PSP의 문제점

PSP는 여러 문제점 때문에 사용 중단(deprecated)되었습니다. 주요 문제점은 다음과 같습니다:

  • 복잡한 설정: 기본적으로 활성화되지 않아 사용자가 직접 플러그인을 활성화하고 설정해야 함
  • 정책의 사전 생성 필요성: 적절한 정책이 사전에 생성되지 않으면 모든 Pod 생성 요청이 거부됨
  • 관리 어려움: 다양한 요구 사항을 충족하기 위해 여러 정책을 생성해야 하며, 이는 큰 혼란을 초래

Pod Security Admission

PSP의 복잡성과 문제점을 해결하기 위해 Kubernetes 1.25 버전에서는 Pod Security Admission이 도입되었습니다. Pod Security Admission은 클러스터 내에서 보안 정책을 보다 간단하고 직관적으로 관리할 수 있도록 설계되었습니다.

Pod Security Admission의 특징

Pod Security Admission은 세 가지 보안 수준을 제공합니다:

  • Privileged: 높은 권한을 필요로 하는 워크로드에 사용
  • Baseline: 최소한의 권한을 허용
  • Restricted: 가장 엄격한 보안 정책 적용

이를 통해 클러스터 관리자는 간단한 구성만으로도 다양한 보안 요구 사항을 충족할 수 있습니다.

설정 예시

아래는 Pod Security Admission을 설정하는 예시입니다:

apiVersion: v1
kind: Namespace
metadata:
  name: restricted-ns
  labels:
    pod-security.kubernetes.io/enforce: restricted

위 설정은 restricted-ns 네임스페이스 내에서 생성되는 모든 Pod에 대해 제한된 보안 정책을 강제합니다.

마무리

Kubernetes에서의 Pod 보안은 클러스터의 안정성과 안전성을 보장하기 위해 매우 중요합니다. 초기 구현인 Pod Security Policies는 여러 문제점 때문에 사용 중단되었고, 대신 더 간단하고 직관적인 Pod Security Admission이 도입되었습니다. 새로운 보안 정책을 통해 클러스터 관리자는 보다 쉽게 보안 요구 사항을 충족할 수 있게 되었습니다.

0개의 댓글