개요
k8s에서 Security Context가 무엇인지 그리고 어떻게 사용하는지 알아보겠습니다.
Security Context란?
Kubernetes(K8s)에서 Security Context는 Pod나 Container의 보안 관련 설정을 지정하는 데 사용됩니다.
적용 범위
Pod 전체 또는 개별 Container
적용 우선 순위
1순위 : 개별 Container
2순위 : 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 작업을 수행할 때 사용됩니다.
privileged 모드는 container가 Host에서 동작하는 것과 동일한 권한을 얻습니다.
securityContext:
privileged: true # 특권 모드 활성화
Linux Capabilities 설정(Container만 지원)
Container에 Linux Capabilities(권한)를 설정합니다. privileged mode가 허용되지 않을때 사용합니다.
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 구성
readOnlyRootFilesystem 설정(Container만 지원)
container의 루트 파일 시스템을 읽기 전용으로 설정합니다.
securityContext:
readOnlyRootFilesystem: true # 루트 파일 시스템을 읽기 전용으로 설정
allowPrivilegeEscalation 설정(Container만 지원)
container내부에서 실행 중인 process가 추가 권한을 얻을 수 있을지 말지를 결정합니다.
예를 들어 true이면 setuid나 setgid 비트가 설정된 실행 파일을 실행하여 권한을 상승시킬 수 있습니다.
securityContext:
allowPrivilegeEscalation: false # 권한 상승을 허용하지 않음
정리
k8s에서 보안을 위하여 securityContext를 제공합니다.
적용 범위는 Pod 또는 Container이며, 대부분의 설정은 container 단위로 동작 합니다.
대표적인 지원 기능
- user/group ID 설정 (Pod/Container 모두 지원)
- privileged 권한 설정(Container만 지원)
- Linux Capabilities 설정(Container만 지원)
- readOnlyRootFilesystem 설정(Container만 지원)
- allowPrivilegeEscalation 설정(Container만 지원)
'Cloud > k8s-CKAD' 카테고리의 다른 글
[CKAD] Resource 제어, resource/LimitRange/ResourceQuotas (0) | 2024.08.12 |
---|---|
[CKAD] Service Account (0) | 2024.07.16 |
[CKAD] 환경 변수 Configmap 과 Secret 사용하기 (0) | 2024.01.30 |
[CKAD] Dockerfile과 yaml 실행 필드 관련 관계 (1) | 2024.01.29 |
[CKAD] Dockerfile의 모든것 (0) | 2024.01.10 |