OpenShift SCC를 운영자가 읽는 법: anyuid, hostPath, hostNetwork, privileged
OpenShift SCC 컬럼 의미와 anyuid, hostaccess, hostmount-anyuid, hostnetwork, privileged 계열의 운영 위험도를 정리했습니다.
OpenShift에서 Pod가 안 뜰 때 anyuid나 privileged를 붙이면 당장은 해결되는 것처럼 보입니다. 하지만 SCC는 Pod가 노드와 커널 자원에 어디까지 접근할 수 있는지를 정하는 보안 경계입니다.
1. SCC 컬럼을 읽는 기준
PRIV=true, hostPath, RunAsAny, VOLUMES=*가 같이 보이면 일반 애플리케이션에 줄 권한이 아닙니다.
oc get scc
oc describe scc restricted-v2
oc describe scc anyuid
oc describe scc privileged2. anyuid는 root 실행 허용이다
anyuid는 privileged 컨테이너를 허용하는 정책은 아니지만 컨테이너 UID를 자유롭게 둡니다. 장기적으로는 이미지가 임의 UID에서도 동작하도록 고치는 것이 맞습니다.
oc adm policy add-scc-to-user anyuid -z <serviceaccount> -n <namespace>
oc get pod <pod> -n <namespace> -o jsonpath='{.spec.serviceAccountName}{"\n"}'
oc describe pod <pod> -n <namespace> | egrep -i "scc|uid|forbidden|security"3. hostPath는 노드 파일시스템 접근이다
oc get pod <pod> -n <namespace> -o yaml | grep -n "hostPath" -A5
oc describe scc hostaccess
oc describe scc hostmount-anyuid4. hostNetwork는 네트워크 격리 완화다
oc get pod <pod> -n <namespace> -o jsonpath='{.spec.hostNetwork}{"\n"}'
oc describe scc hostnetwork
oc describe scc hostnetwork-v25. privileged와 CAP_SYS_ADMIN은 최후의 선택이다
oc adm policy who-can use scc privileged
oc adm policy who-can use scc anyuid
oc get rolebinding,clusterrolebinding -A | grep -i scc정리
SCC 문제를 만났을 때 목표는 Pod를 띄우는 것이 아니라 필요한 최소 권한으로 띄우는 것입니다. service account 단위로 제한하고, 임시 권한은 제거 계획까지 남겨야 합니다.