🐳 Container/K8S

[K8s] SecurityContext

heywantodo 2024. 6. 4. 17:47
728x90
반응형

[K8s] SecurityContext

SecurityContext는 pod 또는 컨테이너에 대한 권한 및 액세스 설정을 정의한다.

SecurityContext는 다음과 같은 설정들이 포함된다.

  • privileged나 unprivileged로 실행됨
  • 임의적 접근 제어: 파일과 같은 객체에 대한 접근 권한은 UID와 GID를 기준으로 결정
  • SELinux: object에 보안 label이 할당됨
  • Linux 기능: 프로세스에 일부 권한을 부여하지만, 루트 사용자의 모든 권한을 부여하진 않음
  • AppArmor: 프로그램 프로필을 사용하여 개별 프로그램의 기능을 제한
  • Seccomp: 프로세스의 시스템 호출을 필터링

다음은 pod나 컨테이너에 대한 manifest 파일에 추가가 가능한 파라미터다.

allowPrivilegeEscalation 프로세스가 상위 프로세스보다 더 많은 권한을 얻을 수 있는지 여부를 제어
readOnlyRootFile 컨테이너의 루트 파일 시스템을 읽기 전용으로 마운트

 

더 많은 옵션은 다음 링크에서 확인이 가능하다.

 

Kubernetes API Reference Docs

API Overview Welcome to the Kubernetes API. You can use the Kubernetes API to read and write Kubernetes resource objects via a Kubernetes API endpoint. Resource Categories This is a high-level overview of the basic types of resources provide by the Kuberne

kubernetes.io

 

파드에 SecurityContext 설정

pod에 보안 설정을 하려면, securityContext 단에 포함을 할 수 있다.

pod에 대해 지정하는 설정은, pod내의 모든 컨테이너에 적용이 된다.

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
  volumes:
  - name: sec-ctx-vol
    emptyDir: {}
  containers:
  - name: sec-ctx-demo
    image: busybox:1.28
    command: [ "sh", "-c", "sleep 1h" ]
    volumeMounts:
    - name: sec-ctx-vol
      mountPath: /data/demo
    securityContext:
      allowPrivilegeEscalation: false

 

위 설정 파일은 파드의 모든 컨테이너에 대해 모든 프로세스가  UID 1000, GID 3000으로 실행되도록 지정한다.

또한, fsGroup 필드가 지정되어, 컨테이너의 모든 프로세스가 보조그룹ID 2000의 일부가 되며, 볼륨의 소유자 /data/demo와 해당 볼륨에 생성된 모든 파일은 GID가 2000이 된다.

 

포드를 생성하고 ID를 확인해보자.

# 파드 생성
kubectl apply -f security-context.yaml

# 파드 확인
kubectl get pod security-context-demo

# 파드에 접속 및 프로세스 확인
kubectl exec -it securiy-context-demo -- sh
ps

 

다음과 같이 프로세스에 UID가 1000으로 실행되고 있음이 출력된다. (runAsUser)

PID   USER     TIME  COMMAND
    1 1000      0:00 sleep 1h
    6 1000      0:00 sh
...

 

/data 디렉토리로 이동 후 사용자를 확인해보자

cd /data
ls -l

 

/data/demo 디렉터리에 대해 GID 2000이 출력된다. (fsGroup)

drwxrwsrwx 2 root 2000 4096 Jun  6 20:08 demo

 

마지막으로 id 명령어를 실행해보면, security context에 설정한 id들을 확인할 수 있다.

id

uid=1000 gid=3000 groups=2000

 

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

728x90
반응형