Devops/Kubernetes

[Kubernetes] 쿠버네티스 보안

ellapk 2024. 10. 18. 13:43

쿠버네티스는 컨테이너 기반 클라우드 서비스 구조로, 빠른 확장성을 제공한다.

하지만 이 확장성이 양날의 검으로 작용할 수도 있다.

 

가령, 하나의 애플리케이션에서 발생한 보안 취약점이 빠른 속도로 배포되어 시스템 전체를 위협할 수도 있기 때문이다.

또한, 클라우드의 확장성과 컨테이너의 가볍고 빠른 특성이 작용하여 악성코드가 빠르게 배포될 수 있다.

이러한 보안 취약점에 대응하기 위해

 

1. 컨테이너에 위치한 애플리케이션의 취약점을 사전에 제거

2. 취약점 발생 시 빠르게 안전한 애플리케이션을 재배포 

 

할 수 있는 체계가 필요하다.

 

 

 

 

■네트워크 정책으로 파드 통신 제어

 

 

쿠버네티스 통신 정책은 기본적으로 모든 파드간 통신을 허용한다.

네트워크 정책은 파드간 통신, 다른 네트워크 엔드포인트와 파드간의 통신을 제어하는 기능이다. 방화벽처럼 트래픽 허용 거부에 대한 정책도 세울 수 있다.

 

네트워크 정책 설정에는 세 가지 요소가 중요하다.

  • podSelector : 정책이 적용될 파드를 지정
  • policyTypes : 정책이 적용될 트래픽을 지정. 수신(Ingress) 트래픽과 발신(Egress)트래픽 존재
  • ingress/egress : 수신/발신 트래픽의 세부 내용을 지정 (파드,포드번호,ip대역 등...)

 

마치 클라우드 인스턴스 보안그룹 처럼 , 필요한 포트나 ip 대역 등을 정의해서 트래픽을 제어하는 방식이라고 이해하면 된다.

 

 

 

 

 

■역할 기반 접근 제어로 사용자의 권한 설정

 

쿠버네티스는 서비스, 네트워킹, 네임스페이스, 파드, 노드, 컨테이너 등 많은 리소스로 구성된다.

각 리소스에 접근하는 사용자와 서비스를 제어하는 RBAC(Role-Based Access Control)로 사용자 및 서비스 계정의 역할을 정의한다.

 

  • Role : 권한의 집합으로, 클러스터 리소스에 대한 접근 권한 부여. ex)pod-reader라는 Role을 정의, 동일한 네임스페이스 내 모든 파드에 대한 읽기 권한 부여
  • RoleBinding : 특정 사용자 또는 서비스 계정에 Rold 할당 ex)'user1'-'pod-reader'
  • ClusterRole : Role과 유사하지만, 권한의 적용 범위가 다름. 클러스터 전체에 유효한 권한을 할당.
  • ClusterBinding : ClusterRole과 사용자 또는 서비스 계정 사이의 연결 정의

 

 

 

■쿠버네티스 시크릿

 

암호화된 정보, 토큰, 비밀번호 등 중요한 데이터를 안전하게 저장하기 위한 리소스이다.

파드의 명세 파일이나 컨테이너 이미지에 평문형태로 OAuth토큰, API 키 등이 노출되면 보안에 치명적일 수 있다.

 

시크릿 정보는 컨테이너 이미지에 포함되지 않고, 애플리케이션을 실행하는 동안 환경 변수 또는 볼륨 마운트를 통해

컨테이너에 전달된다.

 

 

 

 

 

출처)

https://yozm.wishket.com/magazine/detail/1953/