안녕하세요, 보안을 생각하는 쿠버네티스 사용자 여러분! 🛡️ 우리는 애플리케이션을 멋지게 컨테이너화해서 쿠버네티스에 배포했지만, 혹시 보안에 대해서는 잠시 잊고 계시진 않았나요? 특히 여러 팀이 함께 사용하는 멀티-테넌트 클러스터 환경에서 보안은 아무
리 강조해도 지나치지 않습니다.
컨테이너가 'root'라는 막강한 권한으로 실행된다면, 해커가 컨테이너를 탈취했을 때 해당 노드 전체에 심각한 피해를 줄 수 있습니다. 😱 이를 방지하기 위해 쿠버네티스는 우리에게 securityContext 라는 강력한 보안 설정 도구를 제공합니다.
오늘은 CKAD 시험 수준에서 꼭 알아야 할 securityContext의 핵심 기능, 즉 컨테이너의 권한을 최소화하여 더 안전하게 만드는 방법에 대해 알아보겠습니다.

SecurityContext: 컨테이너를 위한 맞춤형 보안 규칙
securityContext는 파드(Pod) 또는 개별 컨테이너 수준에서 정의할 수 있는 보안 관련 옵션들의 모음입니다. 이를 통해 "이 컨테이너는 어떤 사용자로 실행되어야 하는가?", "파일 시스템을 수정할 수 있는가?" 와 같은 세세한 규칙을 지정할 수 있습니다.
핵심은 바로 '최소 권한의 원칙(Principle of Least Privilege)'을 적용하는 것입니다. 컨테이너가 작업을 수행하는 데 필요한 딱 그만큼의 권한만 부여하여, 만일의 사태가 발생하더라도 피해를 최소화하는 것이죠.
1. runAsUser: root가 아닌 일반 사용자로 컨테이너 실행하기 👤
리눅스에서 root (UID 0) 사용자는 모든 것을 할 수 있는 신과 같은 존재입니다. 컨테이너가 root 권한으로 실행되는 것은 보안 상 매우 위험합니다. securityContext의 runAsUser 필드를 사용하면 컨테이너 내의 프로세스가 지정된 사용자 ID(UID)로 실행되도록 강제할 수 있습니다.
- 역할: 컨테이너가 시작될 때 실행되는 프로세스의 사용자 ID(UID)를 지정합니다.
- 왜 중요한가?: root가 아닌 일반 사용자(예: UID 1000)로 실행하면, 컨테이너가 해킹당하더라도 공격자는 시스템 파일을 수정하거나, 패키지를 설치하거나, 다른 프로세스를 건드리는 등의 위험한 행동을 할 수 없게 됩니다.
- YAML 예시:위 파드를 실행하고 kubectl exec -it non-root-pod -- whoami를 실행해보면, root가 아닌 1001 (또는 해당 UID의 사용자 이름)이 출력되는 것을 볼 수 있습니다.
apiVersion: v1 kind: Pod metadata: name: non-root-pod spec: containers: - name: my-app image: busybox:1.28 command: ["sh", "-c", "sleep 1h && whoami"] securityContext: runAsUser: 1001 # 이 컨테이너는 UID 1001 사용자로 실행된다. # runAsGroup: 3000 # GID를 지정할 수도 있다.
2. runAsNonRoot: "root 사용자 절대 금지!" 스위치 🚫
runAsUser로 특정 사용자를 지정하는 대신, "그냥 root만 아니면 돼!"라고 선언하고 싶을 때가 있습니다. runAsNonRoot: true는 바로 그런 역할을 하는 간편한 안전 스위치입니다.
- 역할: 이 값이 true로 설정되면, 쿠버네티스는 해당 컨테이너가 root(UID 0)로 실행되려고 할 경우 컨테이너 시작 자체를 막아버립니다.
- 왜 중요한가?: Dockerfile에서 USER를 지정하는 것을 잊었거나, root로 실행되도록 만들어진 써드파티 이미지를 실수로 사용하는 것을 방지하는 강력한 정책 도구가 됩니다.
- YAML 예시:
apiVersion: v1 kind: Pod metadata: name: non-root-enforced-pod spec: securityContext: runAsNonRoot: true # 이 파드의 모든 컨테이너는 non-root로만 실행 가능 containers: - name: my-app image: redis # Redis 이미지는 기본적으로 non-root(redis) 사용자로 실행됨 (성공) # image: busybox:1.28 # busybox는 기본적으로 root로 실행되므로 이 파드는 실패함!
🎉 결론: 작은 설정으로 큰 보안 효과를!
securityContext는 복잡한 보안 솔루션이 아닙니다. YAML 파일에 단 몇 줄을 추가하는 것만으로도 컨테이너의 보안 수준을 크게 향상시킬 수 있는, 개발자가 반드시 알아야 할 기본적이면서도 효과적인 기능입니다.
- runAsUser로 특정 사용자를 지정하거나,
- runAsNonRoot: true로 root 실행을 원천 봉쇄하는 습관을 들이세요.
이러한 작은 노력이 모여 여러분의 쿠버네티스 클러스터를 훨씬 더 안전한 환경으로 만들어 줄 것입니다. 지금 바로 여러분의 Pod 정의를 열어 securityContext를 추가해보는 것은 어떨까요?
Tags: 쿠버네티스, Kubernetes, 보안, SecurityContext, CKAD, DevOps, 컨테이너보안, non-root
'클라우드 > 쿠버네티스' 카테고리의 다른 글
| 👮♂️ 우리 클러스터의 교통경찰! LimitRange와 ResourceQuota로 질서 잡기 (0) | 2025.09.03 |
|---|---|
| 💾 내 데이터는 소중하니까! 쿠버네티스 영구 저장소 (PV, PVC) 완전 정복 (CKAD 대비) (0) | 2025.09.03 |
| 👯♀️ 파드, 혼자가 아닌 둘이서! 멀티 컨테이너 파드 패턴 완전 정복 (Sidecar & Init Container) (0) | 2025.09.03 |
| ⏰ 일회성 임무부터 주기적인 알람까지! 쿠버네티스 Job & CronJob 완전 정복 (0) | 2025.09.03 |
| 🏨 호텔 프론트처럼 똑똑하게! 쿠버네티스 Ingress로 트래픽 관리하기 (0) | 2025.09.03 |