Kubernetes 환경에서의 보안은 중요한 문제입니다. 특히, Pod 보안은 클러스터의 안정성과 안전성을 보장하기 위해 반드시 고려해야 할 요소입니다. 이번 글에서는 Kubernetes에서의 Pod 보안을 위한 정책과 구현 방식의 변화를 중심으로 설명하겠습니다. Pod 보안의 초기 구현인 Pod Security Policies(PSP)에서 최신 방식인 Pod Security Admission으로의 전환 과정을 다룹니다.
Kubernetes Pod는 클러스터 내에서 애플리케이션 컨테이너를 실행하는 기본 단위입니다. Pod의 보안 설정이 적절하지 않으면 클러스터 전체가 공격에 노출될 수 있습니다. 특히, 다음과 같은 설정은 보안상 취약점을 초래할 수 있습니다:
이러한 설정이 허용되지 않도록 보안 정책을 설정하는 것이 중요합니다.
Pod Security Policies(PSP)는 초기 Kubernetes 클러스터에서 Pod 보안을 구현하는 방법이었습니다. PSP는 클러스터 내에서 Pod가 생성될 때 특정 보안 규칙을 강제하는 역할을 했습니다.
PSP는 어드미션 컨트롤러(admission controller)를 통해 작동했습니다. Pod 생성 요청이 들어오면 어드미션 컨트롤러가 이를 감지하고, 미리 구성된 PSP 규칙과 비교하여 규칙을 위반하는 요청을 거부했습니다. 이를 통해 클러스터에서 불필요한 권한을 가진 Pod의 생성을 방지할 수 있었습니다.
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는 여러 문제점 때문에 사용 중단(deprecated)되었습니다. 주요 문제점은 다음과 같습니다:
PSP의 복잡성과 문제점을 해결하기 위해 Kubernetes 1.25 버전에서는 Pod Security Admission이 도입되었습니다. Pod Security Admission은 클러스터 내에서 보안 정책을 보다 간단하고 직관적으로 관리할 수 있도록 설계되었습니다.
Pod Security Admission은 세 가지 보안 수준을 제공합니다:
이를 통해 클러스터 관리자는 간단한 구성만으로도 다양한 보안 요구 사항을 충족할 수 있습니다.
아래는 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이 도입되었습니다. 새로운 보안 정책을 통해 클러스터 관리자는 보다 쉽게 보안 요구 사항을 충족할 수 있게 되었습니다.