컨테이너 보안 개요
컨테이너 기술의 확산으로 컨테이너 환경 고유의 보안 위협이 증가했습니다. 정보보안기사에서도 컨테이너와 쿠버네티스 보안이 최신 출제 트렌드에 포함되고 있습니다.
Docker 컨테이너 보안
이미지 보안
- 최소 베이스 이미지 사용 (Alpine Linux 등): 공격 표면 최소화
- 공식(Official) 또는 검증된 이미지만 사용
- 이미지 취약점 스캔: Trivy, Snyk, Clair
- Dockerfile에 비밀정보(패스워드, API 키) 포함 금지
- 멀티 스테이지 빌드: 빌드 도구를 최종 이미지에 포함하지 않음
컨테이너 실행 보안
- 비루트(Non-root) 실행: USER 지시어로 일반 사용자로 실행
- 읽기 전용 파일시스템: –read-only 옵션으로 파일 수정 방지
- 리소스 제한: –memory, –cpus 옵션으로 자원 고갈 방지
- Seccomp 프로파일: 허용된 시스템 콜만 허용
- AppArmor/SELinux: MAC(강제 접근 제어) 정책 적용
Docker 데몬 보안
- Docker 소켓(/var/run/docker.sock) 컨테이너 마운트 금지 (권한 상승 위험)
- TLS로 원격 API 인증
쿠버네티스(Kubernetes) 보안
RBAC (Role-Based Access Control)
- 쿠버네티스 API 접근 제어 메커니즘
- Role: 네임스페이스 범위 권한 정의
- ClusterRole: 클러스터 전체 범위 권한 정의
- RoleBinding: 사용자·서비스 계정에 Role 연결
- ClusterRoleBinding: ClusterRole을 클러스터 전체에 연결
- 최소 권한 원칙: 필요한 API 리소스와 동사(verbs)만 허용
파드(Pod) 보안
- Security Context: 파드/컨테이너 레벨 보안 설정
- runAsNonRoot: true (비루트 실행 강제)
- readOnlyRootFilesystem: true
- allowPrivilegeEscalation: false
- Pod Security Admission: 파드 보안 정책 적용 (K8s 1.25부터 PSP 대체)
- Network Policy: 파드 간 통신 제어 (기본: 모든 파드 간 통신 허용 → 최소 허용으로 변경)
시크릿(Secret) 관리
- K8s Secret은 기본 Base64 인코딩 (암호화 아님)
- etcd 저장 시 암호화(Encryption at Rest) 설정 필요
- HashiCorp Vault, AWS Secrets Manager와 통합 권장
쿠버네티스 주요 보안 위협
- 컨테이너 탈출(Container Escape): 취약점으로 호스트 OS 접근
- 과도한 권한(Overprivileged Container): –privileged 모드 실행
- SSRF를 통한 메타데이터 서버 접근
- 공급망 공격: 악성 컨테이너 이미지 배포
시험 핵심 포인트
- 컨테이너 비루트 실행: 보안의 기본 원칙
- K8s RBAC: Role/ClusterRole + RoleBinding/ClusterRoleBinding
- K8s Secret: Base64 인코딩, 추가 암호화 설정 필요
- Network Policy: 기본 허용 → 명시적 허용으로 변경
- 이미지 스캔: Trivy, Snyk (알려진 CVE 탐지)
마무리
컨테이너·쿠버네티스 보안은 클라우드 네이티브 환경의 핵심 보안 영역입니다. RBAC 구조와 파드 Security Context 설정을 중심으로 학습하세요.