Skip to content

쿠버네티스의 보안 컨텍스트

보안 컨텍스트란?

쿠버네티스에서 보안 컨텍스트는 파드 또는 컨테이너 수준에서 실행하는 프로세스의 권한과 능력을 관리하는 데 사용됩니다. 이를 통해 사용자 ID 변경, 리눅스 기능(capabilities) 추가 또는 제거 등의 보안 설정을 정의할 수 있습니다.

파드 수준의 보안 컨텍스트 설정

파드 정의 파일에 보안 컨텍스트를 설정하여 모든 컨테이너에 적용할 수 있습니다. 아래 예시는 사용자 ID를 1000으로 설정하는 방법을 보여줍니다.

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

컨테이너 수준의 보안 컨텍스트 설정

파드 내 개별 컨테이너에 대한 보안 설정을 지정하려면 컨테이너 스펙 안에 보안 컨텍스트를 설정합니다. 이 설정은 파드 수준의 설정보다 우선합니다.

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

컨테이너에서 어떤 유저가 command를 실행하는지 알 수 있습니다.

bash
kubectl exec ubuntu-sleeper -- whoami

기능(Capabilities) 추가하기

리눅스 기능을 컨테이너에 추가하여 더 많은 시스템 레벨의 작업을 허용할 수 있습니다. 다음 예제는 NET_ADMIN 기능을 추가하는 방법을 보여줍니다.

yaml
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: ubuntu
      image: ubuntu
      command: ["sleep", "3600"]
      securityContext:
        capabilities:
          add: ["NET_ADMIN"]

K8s Reference Docs

https://kubernetes.io/docs/tasks/configure-pod-container/security-context/