Skip to content

Docker와 Kubernetes의 보안 컨텍스트

Docker 보안의 기본

Docker는 컨테이너를 호스트와 격리하여 실행합니다. 컨테이너는 Linux 네임스페이스를 사용하여 호스트로부터 분리되며, 이는 프로세스, 네트워킹, 사용자 등을 격리하는 데 사용됩니다.

프로세스 격리

  • 네임스페이스: 컨테이너는 자체 네임스페이스에서 실행되어 호스트의 다른 프로세스와 격리됩니다. 예를 들어, 컨테이너 내에서 실행되는 프로세스는 PID 1을 시작으로 하지만 호스트에서는 다른 PID를 가집니다.

사용자 격리

  • 루트 사용자와의 차이: 컨테이너 내에서 루트 사용자는 호스트의 루트 사용자와 동일한 권한을 가지지 않습니다. Docker는 Linux Capabilities를 사용하여 컨테이너 내의 루트 사용자의 권한을 제한합니다.

Docker 보안 명령어

컨테이너를 실행할 때 보안 설정을 조정할 수 있는 Docker 명령어 옵션들:

bash
docker run --user 1000 ubuntu sleep 3600  # 사용자 ID를 1000으로 설정하여 컨테이너 실행
docker run --cap-add=NET_ADMIN ubuntu    # NET_ADMIN 권한을 추가하여 컨테이너 실행
docker run --cap-drop=KILL ubuntu    # KILL 권한을 삭제하여 컨테이너 실행
docker run --privileged ubuntu           # 모든 Linux Capabilities를 가진 상태로 컨테이너 실행

Kubernetes의 보안 컨텍스트

Kubernetes에서도 Docker와 유사하게 컨테이너의 보안을 강화할 수 있습니다. Kubernetes의 보안 컨텍스트 설정을 통해, 파드 또는 컨테이너 수준에서 보안 관련 설정을 할 수 있습니다.

보안 컨텍스트 예시

yaml
apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
  containers:
    - name: nginx
      image: nginx
      securityContext:
        privileged: false

이 예시에서는 파드 수준에서 runAsUser를 1000으로 설정하여 모든 컨테이너가 사용자 ID 1000으로 실행되도록 합니다. 또한, 특정 컨테이너에 대해 privileged 모드를 비활성화하여 보안을 강화했습니다.