본문 바로가기
  • 오늘처럼
소프트웨어 아키텍처/Kubernetes

[Kubernetes security] Container 나 Pod 의 실행 유저 지정하기

by bluefriday 2022. 11. 17.
반응형

Docker 명령어를 사용하여 컨테이너를 구동할 때 하단과 같이 컨테이너 내부에서 명령을 수행할 유저(UserID)를 지정가능하다.

docker run --user=1001 ubuntu sleep 3600

Docker 와 마찬가지로 Kubernetes 에서도 파드나 컨테이너의 내부 수행 유저를 지정 가능하다.

만약 컨테이너와 파드 모두에 수행 유조(runAsUser)를 지정할 경우 파드의 설정을, 컨테이너의 설정이 덮어쓰게(overwrite) 된다.

하단의 예제를 보자.

apiVersion: v1
kind: Pod
metadata:
  name: hello-world
spec:
  securityContext:
    runAsUser: 1000
  containers:
       - name: ubuntu
         image: ubuntu
         command: ["sleep", "3600"]

위와 같이 파드 레벨에서 securityContext 항목 하위에 runAsUser를 1000(일반 사용자 지정의 디폴트 uid)로 지정할 수 있다.

apiVersion: v1
kind: Pod
metadata:
  name: hello-world
spec:
  containers:
       - name: ubuntu
         image: ubuntu
         command: ["sleep", "3600"]
         securityContext:
           runAsUser: 1000
           capabilities:
           add: ["NET_ADMIN"]

위의 경우 컨테이너 레벨에서도 정의가 가능하다. 추가로 Capabilities 의 경우는, 파드 레벨에서 정의할 수 없으며 컨테이너 레벨에서만 정의가 가능하다.


마지막으로 하단과 같이 컨테이너와 파드 레벨에서 모두 사용자를 지정하는 경우를 확인해보자.

apiVersion: v1
kind: Pod
metadata:
  name: multi-hello-world
spec:
  securityContext:
    runAsUser: 1001
  containers:
  -  image: ubuntu
     name: hello
     command: ["sleep", "5000"]
     securityContext:
      runAsUser: 1002

  -  image: ubuntu
     name: world
     command: ["sleep", "5000"]

이 경우 파드 레벨에서 1001번 유저로 구동이 되게 지정하였기에 하위 world 컨테이너는 1002번 유저로 구동이 된다. 하지만 hello 컨테이너의 경우 컨테이너 레벨에서 1002번 유저로 구동이 되게 지정하였으므로, 파드 레벨의 설정을 덮어쓰고 1002번 유저로 구동이 된다.

댓글