VPC 환경에서 이용 가능합니다.
Admission Policy
ML expert Platform은 다양한 보안 위협을 탐지하고 안전한 Kubernetes 환경을 제공하기 위해 자체 Admission Policy를 적용 중입니다.
Admission Policy는 기본적으로 사용자에게 애플리케이션이 동작 가능한 최소 권한만 부여합니다. ML expert Platform 서비스를 이용하면서 Pod 생성 시 "admission webhook ... denied the request"와 같은 메시지를 확인하셨다면 Rule ID 별 해결 방법을 확인하고 적절하게 조치해 주십시오.
| Rule ID | Rule Name | 내용 | 상세 경로 |
|---|---|---|---|
| AR-1 | Privileged | privileged: true 설정 불가 | 보기 |
| AR-6 | Host Network | spec.hostNetwork : true 설정 불가 | 보기 |
| AR-7 | Host IPC | spec.hostIPC: true 설정 불가 | 보기 |
| AR-8 | Host PID | spec.hostPID: true 설정 불가 | 보기 |
| AR-9 | Host Path | spec.volumes.hostPath 값 설정 불가 | 보기 |
| AR-10 | Host Port | spec.containers.ports.hostPort 값 설정 불가 | 보기 |
| AR-13 | procMount mask | spec.containers.securityContext.procMount 값 설정 불가 | 보기 |
| AR-14 | Volume Types | 사전에 정의된 Volume 볼륨 유형만 허용 | 보기 |
[AR-1] Privileged
Privileged Container는 Container 간 격리 상태를 무력화하며 Host 시스템의 권한과 동일한 권한을 갖게 됩니다. 다른 사용자의 리소스에 영향을 끼칠 수 있습니다.
설정 예시
안전한 설정
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
위험한 설정
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
containers:
- name: app
image: nginx
securityContext:
privileged: true #위험 설정
[AR-6] Host Network
hostNetwork 설정은 Pod이 host의 인터페이스(eth0)를 사용할 수 있게 합니다. 이를 통해 공격자는 개발 Pod의 Network Namespace 격리를 탈출하여 host 네트워크를 임의로 조작할 수 있습니다.
설정 예시
안전한 설정
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
위험한 설정
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
hostNetwork: true #위험 설정
containers:
- name: app
image: nginx
[AR-7] Host IPC
hostIPC 설정은 Pod 내 프로세스가 Host의 모든 프로세스와 IPC로 통신할 수 있게 해줍니다. 이를 통해 Container를 장악한 공격자는 Host의 프로세스와 IPC 통신(공유 메모리, 메세지큐 등)이 가능하게 됩니다.
설정 예시
안전한 설정
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
위험한 설정
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
hostIPC: true #위험 설정
containers:
- name: app
image: nginx
[AR-8] Host PID
hostPID 설정은 Pod이 Host의 모든 프로세스에 접근할 수 있게 합니다. 이를 통해 공격자는 Host에서 실행 중인 모든 프로세스에 대해 악의적인 작업(kill, attach 등)을 수행할 수 있습니다.
설정 예시
안전한 설정
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
위험한 설정
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
hostPID: true #위험 설정
containers:
- name: app
image: nginx
[AR-9] Host Path
hostPath 유형의 볼륨 마운트를 사용하는 경우, 격리된 Container filesystem이 Host의 filepath를 사용할 수 있습니다. 공격자는 hostPath의 잘못된 설정을 통해 Host의 시스템 관련 중요 Path를 mount 하여 Host를 장악할 수 있게 됩니다.
설정 예시
안전한 설정
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
위험한 설정
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
volumes:
- name: host-volume
hostPath: #위험 설정
path: /proc
containers:
- name: app
image: nginx
volumeMounts:
- name: host-volume
mountPath: /proc
[AR-10] Host Port
사용자가 hostPort를 사용하면 사용자가 원하는 어떠한 hostport라도 오픈 가능합니다. 이런 경우 Host에 떠 있는 다양한 애플리케이션들 간 충돌 가능성 및 여러 Pod 간 hostport 선점 경쟁이 벌어질 수 있기 때문에 Kubernetes 관리 목적의 Pod이 아닌 이상 사용하지 않아야 합니다.
설정 예시
안전한 설정
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
위험한 설정
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
containers:
- name: app
image: nginx
ports:
- containerPort: 80
hostPort: 80 # 위험 설정
[AR-13] procMount mask
기본적으로 /proc, /sys 경로는 Linux 시스템 정보를 담고 있어 Container 내부 보안에 민감한 파일 및 경로에 대해 마스킹 처리 혹은 읽기 전용으로 설정합니다. 민감한 정보가 노출되거나 Host 시스템에 영향을 줄 수 있습니다.
설정 예시
안전한 설정
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
containers:
- name: app
image: nginx
위험한 설정
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
containers:
- name: app
image: nginx
securityContext:
procMount: Unmasked # 위험 설정
[AR-14] Volume Types
ML expert Platform에서 지원하는 Volume은 다음과 같습니다. 그 외 다른 타입의 Volume 생성은 허용하지 않습니다.
- configMap
- csi
- downwardAPI
- emptyDir
- configMap
- ephemeral
- persistentVolumeClaim
- projected
- secret
설정 예시
안전한 설정
apiVersion: v1
kind: Pod
metadata:
name: safe-example
spec:
volumes:
- name: config
configMap:
name: app-config
containers:
- name: app
image: nginx
volumeMounts:
- name: config
mountPath: /etc/app
위험한 설정
apiVersion: v1
kind: Pod
metadata:
name: unsafe-example
spec:
volumes:
- name: nfs-path
nfs: # 위험 설정
server: 10.10.10.10
path: /test/path
containers:
- name: app
image: nginx
volumeMounts:
- name: nfs-path
mountPath: /nfs/path