KAN(Kubernetes Advanced Networking) 스터디를 참여하고 있는데, 내용이 너무 좋아서 정리한다. 역시 스터디 장 서종호(가시다) 님은 쵝오다.
스터디 정보
https://gasidaseo.notion.site/c9cd413265ea4ea1b1ae38eb36dfda94
상세 내용은 중복되는 것 같아, 간단히 질문 위주로 정리한다.
컨테이너는 어떻게 격리되는가?
컨테이너는 VM과 유사하게 사용자에게 격리된 환경을 제공한다. 하지만 VM에 비하여 약한 수준의 격리이다. 간략히 그림으로 표현하면 아래와 같다.
https://netpple.github.io/docs/make-container-without-docker/
컨테이너는 각 컨테이너가 호스트 OS의 커널을 공유하는 것이 VM과 가장 큰 차이점이다. 컨테이너 격리는 pivot-root, 네임스페이스, cgroup 기술을 이용한다. 이 중 네임스페이스 기능을 이용하여 네트워크(net), 파일(mnt), 프로세스(pid) 등을 격리한다. 호스트는 각 컨테이너에서 실행 중인 네트워크, 파일, 프로세스를 조회할 수 있고 심지어 컨테이너의 프로세스를 kill(kill -9) 하던지 파일을 삭제(rm)하던지 할 수 있다. 호스트 노드의 root 권한이 탈취당하면 큰 문제다. 일반적으로 물리 노드 하나에 VM이 8개 내외로 실행되는데 컨테이너는 20~30개 실행되는 것도 흔하니 파급력도 크다.
2가지 정도 고려 사항이 있을 것 같다.
1) 클라우드 서비스 제공자는 고객이 실행 중인 컨테이너 내부의 민감한 정보를 볼 수 있을까?
서비스 제공업체 역시 VM을 제공하고 고객이 VM 환경에서 컨테이너를 실행하므로 컨테이너 호스트 OS의 root 권한은 가지지 못하므로 문제가 되지 않을 것 같다. (물론 쿠버네티스 환경에서 서비스 제공업체가 kube config의 클러스터 admin 권한을 가질 수 있는지는 모르겠지만) 호스트 OS 보안 설정은 고객 책임이므로 고객이 VM의 root 권한이 탈취당하지 않도록 보안에 신경써야 할 것 같다. 서비스 업체가 고객의 VM root 권한은 가질 수 없으니 괜찮지 않을까 싶다.
2) 컨테이너에서 직접 호스트 OS의 root 권한을 탈취할 수 있을까?
쿠버네티스 환경에 OPA(Open Policy Agent), PSP(Pod Security Policies) 등으로 적절하게 보안 조치되지 않은 파드라면, 예를들어 privileged 권한이면 호스트 노드의 root 권한을 가질 수 있을 것 같다. 그러면 동일하게 노드 내 실행 중인 다른 파드의 파일, 프로세스 등을 수정할 수 있을 것 같다.(테스트를 해보지는 않았다.) 파드는 쿠버네티스가 실행 중인 다른 노드로 자유롭게 옮겨다닐 수 있으므로 모든 노드의 컨테이너도 문제가 될 것 같다. 컨테이너의 적절한 보안 설정은 꼭 필요할 것 같다.
컨테이너/쿠버네티스 환경 보안 설정
쿠버네티스 환경에서 보안 솔루션으로 나는 1) Vault 2) kubescape (공식 깃허브) 3) Polaris (내 블로그) 4) kyverno(공식 홈페이지)를 검토하고 간단히 검증도 하였다. 하지만 고객사는 위 솔루션을 사용하지 않았다. 회사 내부에 쿠버네티스 관련 보안 정책이 없다는 이유로 호스트 OS에 보안 정책을 적용하는 걸로 그쳤다. SELinux도 사용했는데 파일 동기화 관련 문제가 있어서 SELinux도 disable 하였다. 아마 문제가 있지 않을까 싶다. 다른 고객사 혹은 EKS, AKS, NKS 등이 보안이 잘되어 있을지 궁금하다.
보안솔루션은 체크리스트 실행은 어렵지 않은데 해당 취약점을 조치하는게 까다롭다. 실제 서비스에 영향을 끼쳐 예외 처리를 두는 경우가 많다. 최대한 안전하게 해야 하는데 대부분 시간이 없다는 이유 등으로 그냥 넘어가는 경우가 많았다.
개인적으로 쿠버네티스 보안 관련은 어렵고 컨테이너는 보안 상 확인해야 할 것이 많으므로 외부 전문가 집단이 필요하고 이는 유료 컨설팅 사업도 가능하지 않을까 싶다.
'쿠버네티스 일반' 카테고리의 다른 글
Pause 컨테이너 정리 (0) | 2022.01.12 |
---|---|
Flannel CNI (0) | 2022.01.12 |
Kubernetes 컨설팅/구축 서비스 (0) | 2021.07.30 |
Gitlab Helm Install on On-Prem (0) | 2021.07.30 |
Kubernetes PVC Replication (8) | 2021.07.28 |