PaaS/Kubernetes

(네이버클라우드 세션) 쿠버네티스 보안 세미나 요약

armyost 2022. 8. 28. 21:45
728x90

NIST SP 800-190 (National Institution of Standards and Technology Special Publication)

에서 발표한 Application Container Security Guide

 

 

이미지에 대한 위험

  • 이미지 취약점
  • 이미지 설정 결함
  • 악성코드 포함
  • 평문으로 저장된 secret
  • 신뢰할 수 없는 이미지 사용

→ 해결방안

  • 이미지 취약점 스캔
    - 이미지 스캐닝 툴 사용
    - 쿠버네티스 admission controller를 사용하여 파드 스케줄링 전 스캔되지 않은 이미지가 배포되지 않도록 설정

 

레지스트리에 대한 위험

  • 레지스트리에 대한 안전하지 않은 연결
  • 레지스트리의 노후된 이미지
  • 불충분한 인증 및 인가

→ 해결방안

  • 신뢰할 수 있는 컨테이너 레지스트리 사용
    - 신뢰할 수 있는 프라이빗 이미지 저장소 사용 권장
  • Minimal 이미지 생성
    - 공격 표면을 최소화하게 위해 필요한 구성과 설정으로 이뤄진 이미지 생성

 

오케스트레이터에 대한 위험

  • 제한되지 않은 관리자 접근(Unbounded administrative access)
  • 인가되지 않은 접근
  • 컨테이너 간 네트워크 트래픽 분리 미흡
  • 업무 중요도 혼합
  • 오케스트레이터 신뢰

→ 해결방안

  • RBAC(Role-based access control) 활성화
    쿠버네티스 1.6 버전 이상에는 기본적으로 RBAC가 활성화되어 있으나, 사용자 모두 RBAC 활성화 여부확인 필요
  • RBAC 감사 : 특정 네임스페이스나 중요한 영역에 접근할 수 있는 권한을 가진 계정에 대한 정확한 감사가 필요
  • 관리형 제어 영역 직접 구성 시 파일 별 적절한 권한 설정 필요 (CIS Benchmark for Kubernetes 참고)
  • 클라이언트 인증 메커니즘 구현
  • 네임스페이스와 파드에 대한 네트워크 정책 설정
    쿠버네티스에서 설정할 수 있는 모든 네트워크 정책들은 불필요한 통신을 제거할 수 있도록 기본값을 ‘허용’이 아닌 ‘차단’으로 설정
  • CNI(Container Network Interface) 플러그인 사용
    자체 지원 플러그인 Kubenet 뿐만 아니라 Flannel, Calico, Weavenet 등의 3rd-party 플러그인 적용
  • 암호화된 통신을 통한 관리형 제어 영역 접속
    클러스터 내 인프라 보호를 위해 TLS 1.2 이상을 적용한 통신을 구현
  • 관리형 제어 영역 감사 로깅 활성화
    - kube-apiserver.yaml:감사 로그 관련 인자값 설정
    - audit-policy.yaml: 감사 정책 작성
  • 워커 노드 영역 로그 확인
    저장된 컨테이너의 로그 확인
  • 로그 백업
    스토리지에 정기적으로 모든 로그 백업 수행
  • 로그 분석 및 모니터링 도구 활용
    통합 로그 분석 플랫폼 활용
  • 경고 알림 설정
    이상 징후 탐지 시 실시간 연락을 제공하는 툴 사용

 

컨테이너에 대한 위험

  • 컨테이너 런타임 내 취약점
  • 제한되지 않은 네트워크 접근
  • 안전하지 않은 컨테이너 런타임 설정
  • 앱 취약점
  • 로그(rouge) 컨테이너

→ 해결방안

  • non-root 권한으로 컨테이너 실행
    최소한의 권한으로도 컨테이너 실행이 가능하기에 루트가 아닌 권한으로 실행하여 루트 권한 탈취 등의 공격 예방 가능
  • 볼륨, 루트 파일 시스템 읽기 전용 구성
    기본적으로 컨테이너는 특정 볼륨 및 디렉터리를 마운트하도록 구성할 수 있으며 쿠버네티스에서 다양한 방법으로 마운트 가능, 중요한 데이터에 대해 마운트하는 경우 문제 발생 가능성이 높기에 필요한 경우를 제외하고는 읽기 전용으로 구성 필요
  • ServiceAccount token 비활성화
    쿠버네티스 API에 액세스할 필요가 없는 파드나 애플리케이션이 존재한다면 관련 ServiceAccount 토큰을 비활성화
  • PodSecurity 솔루션 사용
    Pod Security Admission 플러그인을 활성화하여 파드마다 다른 격리 수준을 지정하고 동작 제한 가능
  • 리눅스 커널 모듈 사용
    - AppArmor: 강제적 접근 통제 기능 수행, 적용 시 파일 시스템 권한 설정, 라이브러리 링크 정의, 프로그램 역량 제한 등의 설정을 통해 운영체제와 애플리케션을 보안 위협으로부터 보호 가능
    - Seccomp: 화이트리스트를 기반으로 동작하며 시스템 호출에 반응하기 때문에 호스트 운영체제에 위협이 되는 시스템 호출의 실행을 효과적으로 차단 가능

 

호스트 OS 에 대한 위험

  • 넓은 공격 표면(attack surface)
  • 호스트 OS 컴포넌트 취약점
  • 부적절한 사용자 접근 권한
  • 호스트 OS 파일 시스템 변조

→ 해결방안

  • 컨테이너 전용 운영체제 사용
    공격 표면을 최소화하기 위해 컨테이너에 최적화된전용 운영체제 사용을 권고
  • 워커 노드 구성 파일 설정 : (CIS Benchmark for Kubernetes 참고)
  • Kubelet 플래그 값 설정 : (CIS Benchmark for Kubernetes 참고)
  • 호스트 운영체제 보안 패치 적용

 

상세설명

 

Container Image 취약점 검사

• Image Layer 별 known-vulnerabilities가 있는지 컨테이너 이미지를 검사하는 기능을 제공

• 컨테이너 스캔 완료 시 보안 취약점에 대한 CVE(Common Vulnerabilities and Exposures) 목록 제공

• 심각도에 따른 단계 구분 제공 (High-level, Medium-level, Low-level, Negligible-level, Unknown-level)

 

 

Container Image 보안 엑세스

 • Private Registry 제공을 통해서 안전한 이미지 관리 환경 구성 필요

• 외부에서 접근 불가능한 Private Endpoint 를 통해서 내부에서만 접근 가능

• Server 에 자체 구축 시 Private Subnet 내에 구축해서 안전한 Image Repository 제공 가능

• Sub Account 인증키 발급을 통해 사용자별 인증 정보를 통한 접근

 

Kubernetes API 를 이용한 접근

• API Server 를 통해 Kubernetes의 자원에 접근하여 제어

• 외부에서 접근하기 위해 https 로 접근 필요

• 안전한 인증방식을 통해 인증(Authentication)하고, 권한에 대해 인가(Authorization) 후 적절한 자원에 접근할 수 있도록 제어

 

Authentication – IAM 인증

• NAVER Cloud Platform의 Sub Account 의 인증정보를 통해 IAM 인증을 수행

• ncp-iam-authenticator 를 Client 에 설치 후 kubeconfig 생성 가능

• ncp-auth ConfigMap 을 통해서 IAM 사용자에게 클러스터 사용 권한 추가 가능

Authorization – RBAC

• Role 기반으로 쿠버네티스 클러스터에 접근 통제 설정을 적용

• Role : 특정 네임스페이스에 한정된 권한

• ClusterRole : 클러스터 전체에 한정된 권한

• RoleBinding : 네임스페이스 레벨의 리소스에 적용되는 권한

• ClusterRoleBinding : 클러스터 레벨의 리소스에 적용되는 권한

Network Policy

• Pod 간 통신 시 allow, Deny 할 수 있는 네트워크 정책 설정

• IP 또는 포트를 기반으로 Pod 의 In/Outbound 트래픽 흐름을 제어

• 네임스페이스 레벨에서 동작하며 LabelSelector 를 이용하여 특정 Pod 에 네트워크 정책을 적용