Certificated 도전/KCSA - Kubernetes

[KCSA] SecurityContext란?

지추월자 2025. 3. 30. 09:57
반응형

🧱 기본 개념: SecurityContext란?

  • Kubernetes Pod나 Container에 적용할 수 있는 보안 설정 블록
  • 주요 기능:
    • 루트 권한 제한 (runAsNonRoot)
    • 사용자/그룹 ID 지정 (runAsUser, runAsGroup)
    • Linux Capabilities 조정
    • seccomp, AppArmor, SELinux 적용

1️⃣ 루트 권한 없이 실행하기 (runAsNonRoot)

  • 보안의 기본! 컨테이너를 root가 아닌 사용자로 실행
  • 이미지 자체가 root로 빌드되었어도 Pod 설정이 우선됨
securityContext:
  runAsNonRoot: true
  runAsUser: 1000
  runAsGroup: 3000

⚠️ 주의: 설정한 사용자/그룹이 앱 실행에 필요한 권한이 있는지 확인해야 함


2️⃣ 커널 보안 기능 (Linux Kernel Security Features)

✅ seccomp (Secure Computing Mode)

  • 시스템 호출(syscall) 을 제한하는 보안 필터
  • 공격자가 unshare, clone, mount 같은 위험한 syscall을 못 쓰게 막음

🛠 적용 방법:

securityContext:
  seccompProfile:
    type: RuntimeDefault
  • RuntimeDefault는 컨테이너 런타임 기본 프로필
  • 커스텀 seccomp 프로필도 사용 가능 (하지만 유지보수 어려움)

📌 CVE-2022-0185 대응에도 활용됨 (unshare syscall 차단)


✅ AppArmor

  • 프로세스 단위 보안 정책 적용 (파일, 네트워크, capability 제한)
  • 프로필 방식: 프로그램 별로 허용 리소스를 정의
    • enforce: 차단
    • complain: 허용하지만 로그 기록

🛠 적용 방법 (예: Docker 기반 Ubuntu 환경):

securityContext:
  appArmorProfile: localhost/my-custom-profile

✅ SELinux (Security-Enhanced Linux)

  • 리눅스 보안 라벨 기반 정책 적용
    → 파일, 포트, 프로세스 접근 제어

🛠 적용 방법:

securityContext:
  seLinuxOptions:
    level: "s0:c123,c456"
    role: "system_r"
    type: "spc_t"

주로 RHEL/CentOS 기반 시스템에서 사용


🔐 보안 기능 요약 표

기능 설명 적용 위치 예시

seccomp 위험한 syscall 제한 securityContext.seccompProfile unshare syscall 차단
AppArmor 실행 중인 프로세스 권한 제한 AppArmor 프로필 지정 파일 쓰기 차단
SELinux 보안 라벨 기반 접근 제어 securityContext.seLinuxOptions /etc/passwd 접근 차단

3️⃣ Privileged 컨테이너 주의사항

  • privileged: true 설정 시, 모든 보안 설정이 무력화됨
    • seccomp, AppArmor, SELinux 적용 안 됨
    • 모든 Linux capability 사용 가능 (예: CAP_SYS_ADMIN, CAP_NET_ADMIN)
  • 일반적으로는 ❌ 지양
  • 꼭 필요한 경우에만 사용하고, 가능한 최소 권한만 부여

🛠 예시 (되도록 사용 자제):

securityContext:
  privileged: true

4️⃣ 고급 보안 기능

👤 User Namespace 사용 (실험적)

  • 컨테이너 안에서는 root지만, 호스트에선 일반 사용자로 매핑
  • hostUsers: false 설정 필요
  • 아직 완전한 기능 지원은 부족

🎯 실전 보안 권장 사항 요약

체크리스트 설명

✅ runAsNonRoot 설정 가능한 모든 컨테이너에 적용
✅ seccomp 적용 RuntimeDefault 또는 제한적인 커스텀 프로필
✅ AppArmor/SELinux 설정 OS가 지원할 경우 적용
⚠️ privileged 사용 제한 정말 필요한 경우만 사용
🔐 Capability 최소화 add 대신 drop 중심으로 운영
📦 사용자 지정 보안 프로필 배포 시 Security Profiles Operator 활용 고려

 

반응형