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는 컨테이너 레벨에서만 설정 가능하므로, 동일한 설정이라 하더라도 각 컨테이너마다 지정해줘야 함.