쿠버네티스 보안은 빌드, 배포, 런타임의 전체 수명주기에서 매우 중요한 요소입니다. 쿠버네티스 런타임 환경은 다이내믹하고 끊임없이 변화합니다. 클러스터가 대체되고 퍼미션이 재할당되며, 이런 이유로 데브옵스에게 보안이 매우 중요합니다. 시스템 장애, 서버 다운과 같은 비즈니스에 심각한 영향을 끼치는 말웨어와 악성 위협이 클라우드에 진입하지 못하도록 방어하는 것도 점점 많은 집중을 요구하고 있습니다.
중요한 서비스가 운영중인 쿠버네티스 인프라를 보호하고 안전하게 지켜내기 위해 많은 데브옵스가 쿠버네티스 보안 도구를 활용하는 것은 어쩌면 너무 당연한 것입니다. 이런 도구를 통해 취약점, 환경설정 오류 및 시스템에 공격 표면을 넓힐 수 있는 잠재적 위협을 미리 파악할 수 있습니다. 특히 멀티 클러스터, 컨테이너 혹은 노드를 운영하는 큰 규모의 운영환경이라면 보안 도구를 활용하여 보안 관리를 간소화하는 것은 업무의 효율성을 높이는 좋은 방법입니다.
쿠버네티스 보안 영역
쿠버네티스는 4개의 레이어로 구분되면 통상 4C로 불리며 보안이 고려되어야 하는 대상입니다.
- 클라우드 (Cloud)
- 클러스터 (Cluster)
- 컨테이너 (Container)
- 코드 (Code)
각 영역별로 어떤 보안이 필요한지, 각 영역의 특징과 함께 알아보겠습니다.
클라우드(Cloud)
클라우드는 모든것이 빌드되고 배포되는 기반입니다. 이 기반이 약할 경우 다른 레이어의 보안도 영향을 받게됩니다. AWS, GCP, Azure 등 많은 퍼블릭 클라우드는 보안 권고사항과 모범관행을 제공합니다. 당연한 이야기지만, 이들의 권고사항을 따르는 것이 가장 좋은 방법입니다. 더불어 각각의 퍼블릭 클라우드에서 정의하고 있는 Shared responsibility model 에 따라 제공하는 보안과 제공하지 않는 보안에 대해 파악하고 있어야 합니다.
클러스터(Cluster)
클러스터 보안에는 2가지 고려사항이 있습니다. 첫째는 클러스터 컴포넌트의 보안과 둘째는 클러스터에서 운영되는 애플리케이션에 대한 보안입니다. 고려 사항은:
- 클러스터로 유입되는 모든 API 트래픽의 암호화. (Transport Layer Security (TLS))
- 모든 API 클라이언트 (노드, 프록시, 스케줄러, 쿠버네티스 인프라 내부의 모든 것)에 대한 인증 진행. 인증 방식은 클러스터 규모에 따라 선택가능하며, static Bearer token 방식, OIDC, LDAP 방식 중에 선택 가능.
- 사용자 인증 진행해야 하며 각 사용자는 할당된 자원에 필요한 허가를 취득함. 불필요한 자원에 대한 접근이 제한됨.
- 데브옵스 엔지니어가 노드와 컨테이너를 관리하는 kubelet의 접근 통제 가능해야 함.
- 네임스페이스에 할당된 리소스의 수 제한하도록 권고함.
- 동시에 특정 리소스에 액세스할 수 있는 사용자의 수를 제한하도록 권고함.
- 기능과 성능에 따라 컨테이너가 운영할 수 있는 특권의 종류를 제한하도록 권고함.
- 컨테이너가 불필요한 커넬 모듈을 운영하지 않도록 함.
- 네트워크 정책 활용을 통해 네트워크 액세스 관리. 클러스터 외부의 어플리케이션의 가시성, 네트워크 규칙 관리 및 노드간 정보의 교환 허가/불허 등과 같은 요소들에 대한 고려 검토.
- Cloud API의 메타데이터에 대한 접근을 불허하도록 권고함.
그 이외에도 많은 모범관행이 있습니다.
컨테이너(Container)
컨테이너는 3번째 레이어로 여러가지 보안 과제와 모범관행이 있습니다.
- 컨테이너 취약성 스캐닝과 OS 의존성 보안: 이미지 빌드 단계에서 컨테이너 이미지를 스캔하여 알려진 취약성 파악
- 이미지 서명 및 강제: 컨테이너의 컨텐츠를 신뢰할 수 있는 시스템을 유지하기 위해 컨테이너 이미지 서명
- 특권 사용자 제한: 컨테이너의 목표를 달성하는데 필요한 최소의 특권만을 사용자에 제공
- 강력한 isolation 컨테이너 런타임: 강력한 isolation 을 제공하도록 컨테이너 런타임 클래스 선택.
코드(Code)
코드는 대부분의 공격이 발생하는 보안의 마지막 레이어입니다. 가장 강력한 방법을 동원하여 코드 레이어를 보호해아 합니다.
- 코드에 대한 액세스는 TLS만을 통해 이뤄질 것.
- 써드파티 툴을 이용하여 코드를 감사하고 보안 취약점 확인할 것.
- 커뮤니케이션에 필요한 최소의 부분만 노출시키고 코드에 대한 액세스를 제한할 것.
- 코드 테스트를 통해 잘 알려진 서비스 공격을 시뮬레이션하고 코드의 견고함을 빈번하게 확인하여 장애대응력 강화할 것.
주요 쿠버네티스 보안 도구
쿠버네티스 보안 도구는 쿠버네티스 환경을 보호하는데 큰 도움이 됩니다. 가장 많이 사용되는 주요 도구에 대해 살펴보겠습니다.
Kubescape
Kubescape는 쿠버네티스 환경과 인프라에 보안 기능을 제공합니다.
- Kubescape 는 환경설정 오류를 발견하고 수정방법 권고. 환경설정 오류 수정을 통해 쿠버네티스 공격표면의 감소 및 시스템 견고성(하드닝) 강화
- Kubescape는 이미지 스캔을 통해 취약점 발견, 특히 메모리에 포함된 취약점을 파악을 통해 워크로드 리스크 감소
- 멀티 프레임워크와 표준을 지원하며 인프라가 가장 최신의 보안 표준을 준수 및 모범관행 강제 지원.
- 복잡한 데브옵스 워크플로우 환경에서 보안과 컴플라이언스 자동화. CI/CD 파이프라인 보안 제공.
- 워크로드 사용패턴 학습을 통해 최소 특권 기반의 네트워크 정책을 제안 기능으로 쉬운 네트워크 정책 생성.
Cillium
네트워크 보안 영역에 특화된 클라우드 네티이브, 쿠버네티스 환경을 위한 보안 도구입니다.
- 쿠버네티스 클러스터내의 네트워크 가시성과 옵져버빌리티 제공.
- 공격을 최소화할 수 있도록 위협을 감지하고 보호 제공.
- 세분화된 정책 시행 가능.
Falco
런타임 보안에 특화된 오픈소스 도구로 모니터링과 시스템 침해 감지를 제공합니다.
- 컨테이너에 대한 의심스러운 행위와 잠재적 위협 파악 및 모니터링.
- 강력한 룰 엔진 (정책 엔진)을 제공하여 맞춤형 규칙과 정책 생성 지원.
- 실시간 얼럿과 빠른 보안 이슈 대응 가능
Checkov
IaC 보안에 대한 오픈소스 스캐너로 환경설정 오류를 발견하고 리스크를 감소합니다.
- Infrastructure-as-code(IaC) 파일 및 환셩설정 스캔
- 광범위한 선 정의된 정책과 모범관행 제공
- CI/CD 파이프라인과 통합을 통해 선제적인 보안 적용 가능
Kong
API 서버 보안 도구로써 API 게이트웨이와 서비스 메시 플랫폼으로 보안 기능을 제공합니다.
- 클러스터에 운영중인 API의 인증, 인가 및 접근 지원
- 서버간의 암호화 및 인증 소통 제공
- 세분화된 로깅, 모니터링 및 분석 역량 제공
Kube-audit
컴플라이언스와 거버넌스 영역의 보안 도구이며 쿠버네티스 클러스터 내의 감사와 로깅 활동을 제공합니다.
- 리소스, API, 환경설정 및 사용자 활동과 관련된 이벤트 확인
- 보안 침해와 정책 위반에 대한 사후 인사이트 제공
- 법적 및 내부 컴플라이언스의 증명을 위한 복합적인 감사 유지
쿠버네티스를 사용하는 조직과 기업은 강력한 쿠버네티스 보안 전략의 적용을 통해 빠르게 복잡해지고 역동적으로 변하는 환경에 대응할 수 있어야 합니다. 오늘 설명한 도구들은 4C 레이어의 각 영역별로 보안을 강화할 수 있도록 기능을 제공합니다. 적절한 툴을 선택하여 모범관행의 적용 및 정기적인 감사를 통해 운영중인 쿠버네티스의 보안을 강화할 수 있습니다.
원문출처: Top Kubernetes Security Tools in 2024