K8s에서의 컨테이너 보안 기능

도커에서는 Namespace를 통해 user (User Namespace), file system (Mount Namespace) 등을 분리하고, Capabilities 에서 선택적인 권한을 부여하는 등 보안 기능이 있는데, 쿠버네티스에서도 Security Context를 통해 동일하게 적용이 가능하다.

  • 쿠버네티스에서 컨테이너는 Pod로 캡슐화 되므로, 위의 보안 적용은 컨테이너 레벨 또는 Pod 레벨 모두 적용 가능함.
  • Pod 레벨에서 적용할 경우, Pod 내 모든 컨테이너에 동일하게 적용됨.
  • 만일 서로 다른 설정을 컨테이너와 Pod에 설정하면, 컨테이너 설정이 Pod를 오버라이드 함.

securityContext 적용하기

Pod Level

# pod-definition.yaml

apiVersion: v1
kind: Pod
metadata:
	name: sleeper


# Pod 레벨 설정 - container 명시와 동일한 레벨에서 적용
spec:
	containers:
		- name: ubuntu
			image: ubuntu
			command: ["sleep", "3600"]
			
			
	securityContext:
		runAsUser: 1000   # 유저 설정

Container Level

apiVersion: v1
kind: Pod
metadata:
	name: sleeper
	
# 컨테이너 레벨 설정
spec:
	containers:
		- name: ubuntu
			image: ubuntu
			command: ["sleep", "3600"]
			securityContext:
				runAsUser: 1000   # 유저 설정
				capabilities:  # 단, Capability는 컨테이너 레벨에서만 설정 가능함.
					add: 
                    - "MAC_ADMIN"
                    - "SYS_ADMIN"

capabilities는 컨테이너 레벨에서만 설정 가능하므로, 동일한 설정이라 하더라도 각 컨테이너마다 지정해줘야 함.

Reference