Kubernetes는 컨테이너 배포를 확장하고 자동화하기 위한 오픈소스 컨테이너 오케스트레이션 플랫폼입니다. 초기에는 프로덕션 환경에서 컨테이너화된 워크로드를 관리하고 사용자가 애플리케이션 리소스 경계를 정의할 수 있도록 돕기 위해 개발되었습니다. 가상화는 물리적 서버의 리소스를 적절히 활용하고 안정성을 향상시키는 Kubernetes 보안 아키텍처의 핵심 실천 방법입니다. Kubernetes는 가상화를 추가하여 하드웨어 성능을 향상시키고 운영 비용을 절감합니다. 각 가상 머신은 자체 구성 요소 세트로 실행되며 지정된 운영 체제를 갖추고 있습니다.
Kubernetes 보안 아키텍처 배포는 민첩하며, 지속적인 개발 및 통합을 촉진하고 컨테이너 이미지 빌드 및 배포에 신뢰성을 더합니다. 이 플랫폼은 이미지 불변성을 용이하게 하고, 애플리케이션 상태 및 성능을 모니터링하며, OS 배포 이동성을 간소화합니다. 그러나 Kubernetes 보안 아키텍처 사용의 한 가지 단점은 기본적으로 더 안전해야 한다는 점입니다. 사용자는 분산 시스템을 실행할 때 운영 중단이나 지연에 직면할 수 있으며, 부하 분산, 구성 관리 및 자동화된 롤아웃과 관련된 보안 문제가 있습니다.
Kubernetes 보안 아키텍처는 유연성과 가시성을 제공하지만 애플리케이션을 제한하거나 로깅, 감사, 모니터링을 강제하지 않습니다. 악의적인 위협 행위자는 취약점을 악용할 수 있으며, 공급망 위험은 컨테이너 빌드 주기 전반에 걸쳐 문제를 야기할 수 있습니다. Kubernetes 아키텍처 내 작업자 노드, 컨테이너화된 애플리케이션, 제어 평면 등 여러 구성 요소를 보호해야 합니다. 내부자 위협 가능성도 높으며, 악의적인 의도를 가진 Kubernetes 관리자가 특수 권한을 남용하거나 민감한 정보를 유출하거나 데이터 유출을 유발할 수 있습니다.
이 가이드는 Kubernetes 보안 아키텍처의 주요 과제를 설명합니다. 위협을 해결하고 일반적인 잘못된 구성을 방지하기 위해 이러한 클러스터를 설정하고 보호하는 방법을 다룹니다. 시작해 보겠습니다.
쿠버네티스 보안 아키텍처란 무엇인가?
Kubernetes 보안 아키텍처는 클러스터, 제어 평면(control plane), 그리고 워커 노드(worker node)라고 불리는 하나 이상의 가상 머신(또는 물리적 서버)을 사용합니다. 워커 노드는 하나 이상의 컨테이너를 포함하는 포드(pod)를 호스팅하는 것으로 알려져 있습니다.
Kubernetes 컨테이너는 소프트웨어 패키지를 포함하고 모든 종속성을 저장하는 런타임 환경입니다. 컨테이너 이미지는 실행 가능한 코드와 컨테이너 환경을 채우기 위한 콘텐츠를 포함합니다.
클러스터 의사 결정은 제어 평면(control plane)에서 수행됩니다. 제어 평면은 컨테이너 실행을 스케줄링하고, 장애를 감지하며, 새로운 포드를 시작합니다. 제어 평면의 핵심 구성 요소는 컨트롤러 매니저(controller manager), 쿠버네티스 애플리케이션 프로그래밍 인터페이스(API) 서버, 스케줄러(scheduler), 클라우드 컨트롤러 매니저(cloud controller manager)입니다.
Kubernetes 워커 노드는 컨테이너 오케스트레이션을 가능하게 하는 두 서비스인 Kubelet과 Kube-proxy도 호스팅합니다. 또한 컨테이너 엔진을 실행하며, CSP Kubernetes 서비스는 클러스터를 호스팅합니다. 기본 CSP 구성은 안전하지 않으므로 조직은 인증 및 권한 부여와 같은 Kubernetes의 다양한 서비스 측면을 관리해야 합니다.
쿠버네티스 보안 아키텍처를 설계할 때 조직은 자신의 책임을 이해하고 쿠버네티스 클러스터를 유지 관리하는 방법을 알아야 합니다.
쿠버네티스 보안 아키텍처를 어떻게 보호할까?
Kubernetes 보안 아키텍처를 보호하는 방법은 다양합니다. 첫 번째 단계는 기본적으로 루트 권한 실행을 방지하는 것입니다. 사용자는 비루트 컨테이너를 실행하거나 루트리스 컨테이너 엔진을 사용하여 컨테이너 침해 가능성을 줄일 수 있습니다. 또한 Kubernetes 애플리케이션을 테스트하고 비루트 사용자로 실행되도록 설계해야 합니다. 빌드 단계에서 비루트 실행을 통합하면 품질 보증이 강화되고 루트 권한 없이도 쿠버네티스 애플리케이션이 원활하게 실행됩니다.
초보자에게는 대규모 애플리케이션을 위한 개별 클러스터를 설정하는 것이 훨씬 간단합니다. 상용 또는 관리형 쿠버네티스 서비스를 사용하는 개인은 K8s 네임스페이스를 활용하여 리소스 활용도를 최적화하고 멀티테넌시 지원을 활용할 수 있습니다.
초보자를 위한 Kubernetes 보안 아키텍처 개선을 위한 최고의 보안 팁은 다음과 같습니다:
1. 불변 컨테이너 파일 시스템 사용
악의적인 행위자는 컨테이너 내에서 무제한 실행 권한을 획득하고, 스크립트를 다운로드하며, 애플리케이션을 수정할 수 있습니다. 사용자는 특정 디렉터리에 보조 읽기/쓰기 파일 시스템을 마운트하고 불변 컨테이너 파일 시스템을 사용하여 이러한 사례를 방지할 수 있습니다.
2. 안전한 컨테이너 이미지 구축
Kubernetes 컨테이너 이미지 스캔은 취약점을 탐지하고, 악성 코드 주입을 방지하며, 안전한 배포를 보장할 수 있습니다. Kubernetes 컨테이너 이미지 스캔은 오래된 라이브러리를 식별하고, 포트를 보호하며, 알려진 잘못된 구성을 방지합니다. 컨테이너 이미지 스캔은 Kubernetes 보안 아키텍처의 핵심 요소이며 효과적인 위협 대응을 제공합니다. 컨테이너 이미지가 조직의 보안 정책을 위반할 경우 Kubernetes 어드미션 컨트롤러가 자동으로 배포를 차단할 수 있습니다. 또한 신뢰할 수 있는 저장소에서 이미지를 빌드 및 소싱하고 게시자의 평판을 검증하는 것이 필수적입니다. 사용자는 Kubernetes 클러스터에서 디지털 서명이 적용된 이미지만 실행해야 합니다.
3. 쿠버네티스 컨테이너 강화 구현
쿠버네티스 컨테이너 강화는 공격 표면의 범위를 크게 제한하고, 데이터 유출을 방지하며, 애플리케이션을 보호할 수 있습니다. 일반적으로 하이퍼바이저 기반 컨테이너화, 커널 기반 솔루션, 애플리케이션 샌드박스라는 세 가지 접근 방식이 있습니다.
seccomp 도구는 감사 로깅 및 능동적 위협 탐지에 사용할 수 있습니다. 많은 컨테이너 엔진 솔루션은 사용자가 호스트 커널과 컨테이너화된 애플리케이션 사이에 격리 계층을 추가할 수 있도록 합니다. 격리 경계는 애플리케이션이 가상 샌드박스 내에서 작동하도록 강제하고 호스트 운영 체제를 악의적인 침입으로부터 보호합니다. 컨테이너 엔진은 가상화를 강제하고 기존 컨테이너 격리 솔루션보다 더 나은 보호 기능을 제공하도록 구성할 수 있습니다.
4. 네트워크 분리 및 강화
클러스터 네트워킹은 컨테이너 간 통신을 개선하는 데 사용됩니다. 암호화 및 리소스 분리를 강제 적용하면 네트워크 내 측면 이동을 방지할 수 있습니다. 사용자는 네트워크 정책을 사용하여 Kubernetes 리소스를 격리하고 제어 평면을 보호할 수 있습니다. 트래픽 및 저장된 민감한 데이터(비밀 정보 포함)를 암호화하고 방화벽을 적용하는 것이 권장됩니다. Kubernetes 네임스페이스는 팀, 사용자, 애플리케이션 간에 클러스터 리소스를 분할할 수 있습니다. 네임스페이스는 기본적으로 격리되지 않지만, 사용자는
포드 IP 주소는 변경될 수 있으며, 애플리케이션은 포드가 고정 IP 주소를 가질 것이라고 가정해서는 안 됩니다. 쿠버네티스 보안 아키텍처와 함께 쿠버네티스 서비스를 사용하면 이 문제를 해결할 수 있습니다. 서비스는 서로 다른 포드에 여러 개의 고유한 IP 주소를 할당하고 구성에 레이블을 사용할 수 있습니다. 이러한 주소는 서비스가 사용 중인 동안 변경되지 않습니다. Kubernetes 네트워크 정책은 인그레스 및 이그레스 트래픽을 제어할 수 있습니다.
강력한 네트워크 정책 설계를 위한 두 가지 추가 Kubernetes 보안 아키텍처 권장 사항은 다음과 같습니다: NetworkPolicy API를 지원하는 CNI 플러그인 사용, namespaceSelector 및 podSelector를 활용한 선택된 포드에 대한 가이드라인 생성.
5. Kubernetes 호스트 보안
사용자는 온프레미스, 베어 메탈, 퍼블릭 클라우드 구축 등 여러 방식으로 Kubernetes를 배포할 수 있습니다. Kubernetes 컨테이너는 높은 이식성을 지녀 클라이언트가 설치 환경을 전환하고 워크로드를 마이그레이션할 수 있습니다. 높은 수준의 맞춤화는 동시에 추가적인 보안 취약점을 초래하기도 합니다. 이를 해결하는 한 가지 방법은 기반 호스트를 강화하고 최신 버전의 운영 체제를 설치하는 것입니다. 지정된 데이터 센터 환경에 따라 구성 관리 시스템 구현, 패치 관리, 방화벽 설정 및 관련 보안 조치 적용이 필수적입니다.
최신 버전의 쿠버네티스를 실행하면 주요 잠재적 위협을 완화할 수 있습니다. 일반적인 버그 수정이 적용되며 애플리케이션을 최신 상태로 유지함으로써 불필요한 복잡성을 방지합니다. 롤링 업데이트는 개발자들 사이에서 매우 인기가 많으며, 노드 풀 마이그레이션을 통해 다운타임이나 중단을 최소화하면서 업데이트를 완료할 수 있습니다.
6. Kubernetes 보안 도구 통합
Kubernetes 보안 차세대 방화벽(NGFW) 및 웹 액세스 제어 게이트웨이와 같은 도구는 기존 쿠버네티스 클러스터 및 보안 도구 세트와 통합되어야 합니다. 이를 위한 훌륭한 방법은 워크로드가 사용하는 TCP/UDP 포트와 IP 주소를 경계 보안 도구에 통합하는 것입니다. 이를 통해 사용자는 Kubernetes 자산을 식별하고 보안을 강화할 수 있습니다.
Kubernetes 노드에 대한 네트워크 연결을 제한하고 클라우드 공급자 보안 그룹을 사용하는 것도 Kubernetes 보안 아키텍처 관리 관행에 부합할 수 있습니다.
7. 자동화된 규정 준수
데이터를 수집하고 규정 준수 보고서 생성을 자동화하여 최적의 런타임 보안을 보장할 수 있습니다. Kubernetes 규정 준수는 HIPAA, PCI-DSS, GDPR, NIST 및 SOC2와 같은 최신 업계 벤치마크를 준수해야 합니다. 자동화되고 지속적인 규정 준수를 목표로 하는 것이 중요합니다. 파드가 규정 준수 검사에 실패하면 클러스터는 문제가 해결될 때까지 컨테이너 이미지를 자동으로 업데이트하거나 파드를 종료해야 합니다. 사용자는 전송 중인 데이터를 암호화해야 하며, 이는 Kubernetes 워크로드에 대해 TLS 암호화를 활성화하여 달성할 수 있습니다. 또 다른 훌륭한 옵션은 상호 TLS를 활성화하거나, 서비스 메시를 사용하거나, SentinelOne과 같은 도구를 사용하는 것입니다.
8. Kubernetes API에 대한 안전한 접근
대부분의 Kubernetes 클러스터 작업은 Kube-apiserver에서 발생합니다. Kube 제어 유틸리티 도구를 사용하여 API 접근을 제어할 수 있으며, 이는 첫 번째 방어선 역할을 합니다. Kubelet은 파드에 서비스 품질(QoS) 클래스를 할당하고 스케줄링 및 필요한 경우 후속 제거를 지원할 수 있습니다. Kubelet은 사용자가 더 현명한 결정을 내리는 데 도움을 주며, DevOps 팀은 컨테이너가 정상적인 작동을 위해 충분한 리소스를 확보하도록 보장할 수 있습니다. 모든 컨테이너에는 반드시 CPU 및 메모리 제한이 설정되어야 합니다.
SentinelOne은 포괄적인 클라우드 네이티브 애플리케이션 보호 플랫폼(CNAPPCNAPP) 도구를 보유하고 있으며, 여기에 Kubernetes 보안 상태 관리(KSPM) 솔루션이 내장되어 있습니다. 이 도구는 세분화된 보안 정책을 적용하고, 워크로드와 타사 애플리케이션 간의 통신을 제한하며, API 접근을 통제할 수 있습니다. 이 도구는 머신 러닝과 인공지능을 활용해 지능형 지속 위협(APT)을 탐지 및 완화하며, 규칙 기반 접근 방식으로 보안 및 위협 모니터링을 강화하는 공격적 보안 엔진까지 탑재하고 있습니다. 쿠버네티스 호스트, 가상 머신(VM), 컨테이너를 위한 확장 가능하고 통합된 독보적인 마이크로세그멘테이션 모델을 배포하면 멀티클러스터, 멀티클라우드, 하이브리드 환경 전반에 걸쳐 필수적인 쿠버네티스 보안을 제공할 수 있습니다.
결론
기업들은 쿠버네티스 같은 컨테이너 오케스트레이션 플랫폼의 채택 증가를 수용하고 있으며, 인프라 보호와 컨테이너화된 워크로드 및 애플리케이션 활용으로 전환하고 있습니다. Kubernetes는 포괄적인 보안 기능과 설정을 제공하지만, 기본적으로 안전하지 않으며 구성이 필요합니다. 컨테이너는 제대로 실행될 수 있으며, 위협은 확대되기 전에 해결되어야 합니다. 이는 실용적인 Kubernetes 보안 아키텍처를 설계하는 것에서 시작됩니다. 조직이 시작할 수 있는 다양한 도구가 있으며, 시장에서 많은 오픈소스 솔루션이 제공됩니다.
이들은 지속적인 가시성을 확보하고, 관측 가능성을 개선하며, 컨테이너가 가능한 한 안전하고 보안적으로 실행되도록 보장하고 있습니다. 쿠버네티스 보안 도구는 빌드 프로세스를 모니터링하고 숨겨진 취약점을 발견하여 조직이 보호 상태를 유지하도록 돕습니다.
Kubernetes 보안 아키텍처 FAQ
Kubernetes 보안 아키텍처는 Kubernetes 클러스터를 보호하기 위한 설계 및 제어 수단입니다. 이는 제어 평면, 노드, 워크로드 및 네트워킹을 보호하여 무단 접근 및 공격을 방지하는 데 중점을 둡니다.
이는 컨테이너 오케스트레이션 환경의 모든 부분을 보호하기 위해 설계된 인증, 권한 부여, 네트워크 정책 및 시크릿 관리와 같은 계층화된 방어 체계를 포함합니다.
Kubernetes 네트워크 보안은 정책과 세분화를 통해 파드와 외부 클라이언트 간의 트래픽을 제어합니다. 네트워크 정책은 통신할 수 있는 파드 또는 IP 범위를 정의합니다. 이 아키텍처에는 구성 요소 간 암호화 통신과 접근을 제한하는 방화벽이 포함되는 경우가 많습니다.
이러한 설정은 공격자의 측면 이동을 제한하고 클러스터 내의 민감한 서비스를 보호합니다.
안전한 쿠버네티스 설정에는 권한 관리를 위한 역할 기반 접근 제어(RBAC), API 트래픽 암호화를 위한 TLS, 포드 분할을 위한 네트워크 정책, 컨테이너 보안을 강제하는 포드 보안 정책 또는 어드미션 컨트롤러, 시크릿 암호화, 감사 로깅, 정기적인 취약점 스캔이 포함됩니다. 이러한 계층들은 함께 작동하여 위험을 줄이고 클러스터 무결성을 유지합니다.
Kubernetes는 인증서, 토큰, ID 공급자(OIDC, LDAP) 통합 등 다양한 인증 방식을 지원합니다. 인증된 후 요청은 주로 RBAC를 사용하여 권한 부여 검사를 거칩니다. RBAC는 정의된 역할과 정책에 기반하여 접근 권한을 부여함으로써 최소 권한 원칙을 시행합니다. 이를 통해 신뢰할 수 있는 사용자 및 구성 요소만 허용된 작업을 수행할 수 있습니다.
예를 들어, 사용자 작업을 제한하기 위한 RBAC 적용, 민감한 데이터가 포함된 파드를 격리하기 위한 네트워크 정책 사용, 클러스터 이벤트 추적을 위한 감사 로그 활성화, etcd에 저장된 시크릿 암호화, 안전하지 않은 구성을 차단하기 위한 어드미션 컨트롤러 배포, 제한된 권한으로 컨테이너 실행 등이 있습니다. 이러한 관행을 결합하면 클러스터 보안을 다각도로 강화할 수 있습니다.

