[Kubernetes] Security Context 완벽 가이드 (runAsUser, privileged, capabilities)

☸️ Kubernetes Security Context #

Kubernetes에서 컨테이너는 기본적으로 root 권한으로 실행됩니다.

이 경우 다음과 같은 보안 문제가 발생할 수 있습니다.

  • 컨테이너 취약점 발생 시 시스템 장악 가능
  • 호스트 커널 접근 위험
  • 파일 권한 문제

이를 제어하기 위한 기능이 Security Context 입니다.

Security Context는 Pod 또는 Container 수준에서 보안 설정을 정의할 수 있습니다.


Security Context Architecture #

graph TD

A[Pod]

B[Security Context]

C[Container]

D[Process User]

E[Kernel Access]

B --> C
C --> D
C --> E

Security Context는 다음을 제어합니다.

  • 사용자 UID / GID
  • 파일 권한
  • Linux Capability
  • Privileged 모드

컨테이너 기본 권한 문제 #

기본적으로 컨테이너는 root 권한으로 실행됩니다.

graph TD

Container --> RootProcess
RootProcess --> SystemAccess

이 경우 컨테이너 취약점이 발생하면

  • 파일 시스템 접근
  • 네트워크 설정 변경
  • 커널 기능 접근

등이 가능해집니다.


runAsUser #

runAsUser컨테이너 프로세스의 UID를 지정합니다.

 1apiVersion: v1
 2kind: Pod
 3
 4metadata:
 5  name: runas-demo
 6
 7spec:
 8  securityContext:
 9    runAsUser: 1000
10    fsGroup: 1000
11
12  containers:
13  - name: app
14    image: node:18

이 설정은

  • 컨테이너 프로세스를 UID 1000 사용자로 실행
  • 파일 권한도 해당 사용자로 생성

Security Context 적용 범위 #

Security Context는 두 가지 범위에서 적용할 수 있습니다.

적용 위치설명
Pod모든 컨테이너에 적용
Container특정 컨테이너만 적용

Pod Level #

1spec:
2  securityContext:
3    runAsUser: 1000
4    fsGroup: 1000

Pod 전체에 적용됩니다.


Container Level #

1containers:
2- name: app
3  image: nginx
4
5  securityContext:
6    runAsUser: 1000

특정 컨테이너에만 적용됩니다.


fsGroup #

fsGroupVolume 파일 권한 그룹을 지정합니다.

graph TD

Volume --> fsGroup
fsGroup --> Container

1securityContext:
2  runAsUser: 1000
3  fsGroup: 1000

Volume에 생성되는 파일은 해당 그룹으로 설정됩니다.


Privileged Mode #

일부 애플리케이션은 호스트 커널 기능 접근이 필요합니다.

  • NFS mount
  • Network monitoring
  • Device access

이 경우 Privileged Mode를 사용할 수 있습니다.

1securityContext:
2  privileged: true
graph TD

Container --> KernelAccess
KernelAccess --> HostSystem

하지만 privileged 모드는

⚠️ 보안 위험이 매우 큽니다

가능하면 사용하지 않는 것이 좋습니다.


Linux Capabilities #

Privileged 모드 대신 Linux Capability를 사용할 수 있습니다.

Linux Capability는 필요한 권한만 선택적으로 부여합니다.

1securityContext:
2  capabilities:
3    add:
4      - NET_ADMIN
5      - SYS_TIME
graph TD

Container --> Capability

Capability --> NET_ADMIN
Capability --> SYS_TIME

대표 Capability

Capability설명
NET_ADMIN네트워크 설정
SYS_TIME시스템 시간 변경
SYS_ADMIN시스템 관리

Security Context 실무 구조 #

실제 운영 환경에서는 다음과 같이 설정합니다.

graph TD

Pod --> Container

Container --> NonRootUser

Container --> LimitedCapability

Container -.X.-> Privileged

보안 권장 사항

  • root 실행 금지
  • capability 최소화
  • privileged 사용 최소화

Best Practice #

운영 환경에서 권장되는 보안 설정

1️⃣ Non-root Container #

1securityContext:
2  runAsUser: 1000

2️⃣ Privileged 금지 #

가능하면 privileged 사용하지 않기


3️⃣ Capability 최소화 #

필요한 capability만 추가


4️⃣ Pod Security 정책 적용 #

  • PodSecurity
  • OPA Gatekeeper

정리 #

Security Context는 Kubernetes 컨테이너 보안을 위한 핵심 기능입니다.

주요 기능

  • runAsUser → 컨테이너 사용자 지정
  • fsGroup → 파일 권한 설정
  • privileged → 커널 권한
  • capabilities → 최소 권한 설정

운영 환경에서는

✔ root 사용 금지 ✔ privileged 최소화 ✔ capability 최소화

전략이 중요합니다.

Advertisement