🔐 Kubernetes securityContext 완전 정리

2026. 2. 22. 00:09k8s

Kubernetes에서 securityContext

컨테이너 또는 Pod의 보안 관련 실행 옵션을 정의하는 설정

이다.

즉,

  • 어떤 사용자로 실행할지
  • root 사용 여부
  • 파일 권한
  • privilege 사용 여부
  • Linux capability 제어

등을 설정할 수 있다.


📌 securityContext 적용 위치

securityContext는 두 군데에 설정할 수 있다.

1️⃣ Pod 수준

spec:
  securityContext:
    runAsUser: 1000
    fsGroup: 2000

→ Pod 전체에 적용


2️⃣ Container 수준

containers:
- name: app
  image: nginx
  securityContext:
    runAsUser: 1001
    allowPrivilegeEscalation: false

→ 해당 컨테이너에만 적용


📊 Pod vs Container 차이

항목 Pod securityContext Container securityContext
runAsUser O O
fsGroup O X
capabilities X O
privileged X O

📌 주요 옵션 정리


1️⃣ runAsUser

컨테이너를 특정 UID로 실행

securityContext:
  runAsUser: 1000

→ root(0) 대신 1000번 사용자로 실행


2️⃣ runAsGroup

securityContext:
  runAsGroup: 1000

3️⃣ fsGroup

볼륨 파일의 그룹 소유권 설정

securityContext:
  fsGroup: 2000

👉 볼륨 마운트 시 GID 강제 적용
👉 PVC 사용 시 매우 중요


4️⃣ runAsNonRoot

root 실행 방지

securityContext:
  runAsNonRoot: true

→ root로 실행되면 Pod 시작 실패


5️⃣ privileged

컨테이너에 거의 host 수준 권한 부여

securityContext:
  privileged: true

⚠ 매우 위험
Docker의 --privileged와 유사


6️⃣ allowPrivilegeEscalation

권한 상승 허용 여부

securityContext:
  allowPrivilegeEscalation: false

7️⃣ capabilities

Linux capability 제어

securityContext:
  capabilities:
    add: ["NET_ADMIN"]
    drop: ["ALL"]

8️⃣ readOnlyRootFilesystem

루트 파일 시스템을 읽기 전용으로

securityContext:
  readOnlyRootFilesystem: true

→ 보안 강화에 매우 효과적


📌 실제 예제 (권장 보안 설정)

apiVersion: v1
kind: Pod
metadata:
  name: secure-pod
spec:
  securityContext:
    fsGroup: 2000
  containers:
  - name: app
    image: nginx
    securityContext:
      runAsUser: 1000
      runAsNonRoot: true
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop:
          - ALL

📌 fsGroup이 중요한 이유

PVC를 마운트할 때
파일 권한 문제로 접근 실패하는 경우가 많다.

fsGroup을 설정하면:

볼륨 파일의 그룹 소유자를 강제로 맞춰
해당 그룹 권한으로 접근 가능하게 만든다.


📌 실무 보안 권장 가이드

✔ root 실행 금지 (runAsNonRoot)
✔ capability 최소화 (drop: ALL)
✔ privileged 사용 금지
✔ readOnlyRootFilesystem 사용
✔ allowPrivilegeEscalation=false


📌 securityContext vs PodSecurity

구분 securityContext PodSecurity
적용 대상 Pod/Container Namespace
제어 방식 개별 설정 정책 기반
목적 실행 권한 설정 보안 표준 강제

🎯 한 줄 정리

securityContext는
컨테이너의 실행 권한과 보안 옵션을 제어하는 설정이며,
운영 환경에서는 root 사용을 최소화하는 것이 핵심이다.