Post

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

Kubernetes Security Context 개념과 runAsUser, fsGroup, privileged, Linux capabilities 설정 방법을 정리합니다.

[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를 지정합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: Pod

metadata:
  name: runas-demo

spec:
  securityContext:
    runAsUser: 1000
    fsGroup: 1000

  containers:
  - name: app
    image: node:18

이 설정은

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

Security Context 적용 범위

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

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

Pod Level

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

Pod 전체에 적용됩니다.


Container Level

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

  securityContext:
    runAsUser: 1000

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


fsGroup

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

graph TD

Volume --> fsGroup
fsGroup --> Container

1
2
3
securityContext:
  runAsUser: 1000
  fsGroup: 1000

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


Privileged Mode

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

  • NFS mount
  • Network monitoring
  • Device access

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

1
2
securityContext:
  privileged: true
graph TD

Container --> KernelAccess
KernelAccess --> HostSystem

하지만 privileged 모드는

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

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


Linux Capabilities

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

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

1
2
3
4
5
securityContext:
  capabilities:
    add:
      - NET_ADMIN
      - 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

1
2
securityContext:
  runAsUser: 1000

2️⃣ Privileged 금지

가능하면 privileged 사용하지 않기


3️⃣ Capability 최소화

필요한 capability만 추가


4️⃣ Pod Security 정책 적용

  • PodSecurity
  • OPA Gatekeeper

정리

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

주요 기능

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

운영 환경에서는

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

전략이 중요합니다.

This post is licensed under CC BY 4.0 by the author.