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 에 네트워크 정책을 적용
'PaaS > Kubernetes' 카테고리의 다른 글
kubernetes-dashboard용 Service Account를 만들자 (0) | 2022.12.23 |
---|---|
Kubespray로 Kubernetes 설치하기 (CentOS7) (0) | 2022.12.14 |
Cloud에서 k8s istio 상세설명+네트워크 흐름+Service Discovery (0) | 2022.07.11 |
Kubernetes PSP(Pod Security Policies)가 Deprecated가 되면 앞으로는 어떻게 보안레이어를 적용해야 할까? (0) | 2022.07.01 |
KubeEdge에 대해서 (0) | 2022.05.18 |