Kubernetes

securityContext

라온클 2023. 6. 6. 05:42

securityContext 요약

SecurityContext는 Pod와 Container를 위해 보안 설정을 정의하는 항목이다.

 

 

 

securityContext 항목

Discretionary Access Control: UID, GID를 기반으로 파일에 접근 권한을 가지는 사용자(runAsUser) 그룹(fsGroup)을 설정할 수 있다.

Linux Capabilities: Root 사용자에게 모든 권한을 부여하는 대신, 프로세스에 일부 권한을 부여한다.

readOnlyRootFilesystem: 컨테이너의 루트 파일 시스템을 읽기 전용으로 마운트한다.

allowPrivilegeEscalation: 프로세스가 상위 프로세스보다 더 많은 권한을 얻을 수 있는지 여부를 제어한다.

그 외 securityContext에서 정의하는 항목들

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#securitycontext-v1-core

 

 

 

securityContext 특징

  • 기존 pod의 securitycontext는 편집이 안된다. pod를 지우고 새로 생성해야 한다.
  • securityContext를 설정하지 않는다면 기본값은 root로 다 실행 가능하다.
  • spec.securityContext: {} 이면 다 root다. (root의 UID 는 0이다!
  • capabilities는 Pod레벨이 아니라, 컨테이너 레벨에서 설정해줘야 한다.
  • Deployment에서 securityContext를 정의할 때는 Pod레벨에서 정의해줘야 한다.
  • Pod에 대해 지정하는 보안 설정은 Pod의 모든 컨테이너에 적용됩니다.

 

 

 

<존재 이유 or 흐름 속 의미>

Pod와 Container를 수준을 분리하여 더 세밀하게 보안을 설정해줄 수 있다.

예를 들어, 1개의 Pod의 다수의 Container가 있을 때, 특정 Container에만 적용한 securityContext 설정은 다른 Container에 영향을 끼치지 않는다.

 

 

 

<만드는 법>

yaml 파일로 작성한다.

apiVersion: v1
kind: Pod
metadata:
  name: app-sec-kff3345
  namespace: default
spec:
  securityContext:  # 사용자인 Root는 Pod레벨에서 적용한다.
    runAsUser: 0 # Root의 UID는 0이다.
  containers:
  - command:
    - sleep
    - "4800"
    image: ubuntu
    name: ubuntu
    securityContext: # 가용성은 컨테이너 안에서 적용한다.
     capabilities: 
        add: ["SYS_TIME"]

 

 

 

<참고 링크>

https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#securitycontext-v1-core

https://bcho.tistory.com/1275