Cloud/k8s-CKAD

[CKAD] Security Context

jinkwon.kim 2024. 4. 23. 00:19
728x90
반응형

개요

k8s에서 Security Context가 무엇인지 그리고 어떻게 사용하는지 알아보겠습니다. 

Security Context란?

Kubernetes(K8s)에서 Security Context는 Pod나 Container의 보안 관련 설정을 지정하는 데 사용됩니다.

적용 범위

Pod 전체 또는 Container

적용 우선 순위

1순위 : Container2순위 : Pod

사용 형태

securityContext 필드를 사용합니다.

Pod에 적용

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
  containers:
  - name: sec-ctx-demo
    image: busybox:1.28
    command: [ "sh", "-c", "sleep 1h" ]

Container에 적용

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo-4
spec:
  containers:
  - name: sec-ctx-4
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:
      capabilities:
        add: ["NET_ADMIN", "SYS_TIME"]

 

주요 기능

User/Group ID 설정 (Pod/Container 모두 지원)

container가 특정 사용자나 그룹의 권한으로 실행되도록 지정합니다.

securityContext:
  runAsUser: 1001  # 이 컨테이너가 사용자 ID 1001로 실행
  runAsGroup: 2001  # 이 컨테이너가 그룹 ID 2001로 실행

privileged 권한 설정(Container만 지원)

container가 호스트 시스템에서 privileged 모드로 실행되는지 여부를 지정합니다.

 

privileged 모드가 활성화되면 container는 Host의 일부 특수 시스템 자원에 접근할 수 있습니다. 이는 일반적으로 Network packet을 capture하거나 시스템 수준의 Debugging 작업을 수행할 때 사용됩니다.

 

securityContext:
  privileged: true  # 특권 모드 활성화

Linux Capabilities 설정(Container만 지원)

Container에 Linux Capabilities(권한)를 설정합니다.

Container Level에서만 사용가능합니다. 

securityContext:
  capabilities:
    add:  # 추가할 커널 기능
      - SYS_ADMIN
    drop:  # 제거할 커널 기능
      - NET_RAW

 

전체 종류

  • AUDIT_CONTROL: 감사 시스템 제어
  • AUDIT_WRITE: 감사 로그 쓰기
  • BLOCK_SUSPEND: 시스템 일시 중지 방지
  • CHOWN: 파일 소유권 변경
  • DAC_OVERRIDE: 파일 접근 제어 무시
  • DAC_READ_SEARCH: 읽기 및 검색 권한 무시
  • FOWNER: 파일 소유자 특권
  • FSETID: 세트아이디 비트 제어
  • IPC_LOCK: 공유 메모리 잠금
  • IPC_OWNER: IPC 리소스 소유자 권한
  • KILL: 프로세스 종료
  • LEASE: 파일 잠금 임대
  • LINUX_IMMUTABLE: 불변 파일 속성 제어
  • MAC_ADMIN: Mandatory Access Control 관리
  • MAC_OVERRIDE: Mandatory Access Control 무시
  • MKNOD: 특수 파일 생성
  • NET_ADMIN: 네트워크 관리
  • NET_BIND_SERVICE: 저위치 포트 바인딩
  • NET_BROADCAST: 네트워크 브로드캐스트
  • NET_RAW: 원시 네트워크 패킷 접근
  • SETFCAP: 파일 능력 설정
  • SETGID: 그룹 ID 변경
  • SETPCAP: 프로세스 능력 설정
  • SETUID: 사용자 ID 변경
  • SYS_ADMIN: 시스템 관리
  • SYS_BOOT: 시스템 부팅
  • SYS_CHROOT: chroot 작업
  • SYS_MODULE: 커널 모듈 로드 및 언로드
  • SYS_NICE: 프로세스 우선순위 조정
  • SYS_PACCT: 프로세스 계정 설정
  • SYS_PTRACE: 프로세스 추적 및 디버깅
  • SYS_RAWIO: 원시 I/O 작업
  • SYS_RESOURCE: 시스템 자원 제한 설정
  • SYS_TIME: 시스템 시간 변경
  • SYS_TTY_CONFIG: TTY 구성

읽기 전용 루트 파일 시스템 설정(Container만 지원)

container의 루트 파일 시스템을 읽기 전용으로 설정합니다.

securityContext:
  readOnlyRootFilesystem: true  # 루트 파일 시스템을 읽기 전용으로 설정

allowPrivilegeEscalation 설정(Container만 지원)

container내부에서 실행 중인 process가 추가 권한을 얻을 수 있을지 말지를 결정합니다.

예를 들어 true이면 setuidsetgid 비트가 설정된 실행 파일을 실행하여 권한을 상승시킬 수 있습니다.

securityContext:
  allowPrivilegeEscalation: false  # 권한 상승을 허용하지 않음

정리

k8s에서 보안을 위하여 securityContext를 제공합니다. 

적용 범위는 Pod 또는 Container이며, 대부분의 설정은 container 단위로 동작 합니다. 

대표적인 지원 기능

- user/group ID 설정 (Pod/Container 모두 지원)

- privileged 권한 설정(Container만 지원)

- Linux Capabilities 설정(Container만 지원)

- 읽기 전용 루트 파일 시스템 설정(Container만 지원)

- allowPrivilegeEscalation 설정(Container만 지원)

728x90
반응형