🐳 Container/K8S

[K8s][CKS] TLS (Cipher-Suites)

heywantodo 2024. 5. 23. 15:21
728x90
반응형

[K8s][CKS] TLS (Cipher-Suites)

쿠버네티스에서 클라이언트와 API 서버, 그리고 구성 요소간 통신은 상호 TLS를 통해 이루어진다.

🤔 TLS(Transport Layer Security)?

전송 계층 보안(TLS)은 인터넷 상의 커뮤니케이션을 위한 개인 정보와 데이터 보안을 용이하게 하기 위해 설계되어 널리 채택된 보안 프로토콜이다.

 

TLS는 공개 키 암호화를 사용하여 작동하며, 새로운 암호가 발견될 때마다 적용이 되어야 한다.

 

쿠버네티스 보안을 목적으로하는 TLS 소프트웨어 패키지의 경우, 컨트롤 플레인의 구성요소와 etcd가 포함되며, 연결이 설정될 때 사용할 수 있는 암호를 제한하는 기능이 있다.

 

사용 가능한 암호를 강력한 최신 암호로 제한하면,

악용이 가능한 이전 클라이언트 암호의 사용으로 손상될 수 있는 연결을 방지 할 수 있다.

 

Ciphers and the Kubernetes Control Plane

모든 컨트롤 플레인 구성 요소(API server, Controller manager, kubelet, scheduler)에는 다음과 같은 인수가 있다.

  • --tls-min-version : TLS의 최소 버전을 설정
  • --tls-ciper-shites : 쉼표로 구분된 암호 목록을 설정 (default는 GoLang 암호화 제품군 패키지에서 제공하는 목록)

etcd 또한 api 서버 -> etcd 통신에서 특정 암호를 사용하여 보안이 가능하다.

--ciper-shites 인수를 사용하여 암호 목록을 설정할 수 있다.

 

Example

CKS에는 다음과 같은 문제가 나올 수도 있다.

 

Task

etcd와 api server간 통신이 다음 암호를 사용할 때만 (TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) 통신이 될 수 있도록 제한하고, 최소 TLS 버전도 다음으로 제한한다 TLS 1.2.

 

해답은 다음과 같다.

 

1. API server의 manifest 파일에 다음과 같은 인수를 추가한다.

--tls-min-version=VersionTLS12
--tls-cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

 

2. etcd의 manifest 파일에 다음과 같은 인수를 추가한다.

--cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

파드가 모두 생성될 때까지 기다린다. (1분정도 소요)

 

참고

https://github.com/kodekloudhub/certified-kubernetes-security-specialist-cks-course/blob/main/docs/03-Cluster-Setup-and-Hardening/49-Cipher-Suites.md

728x90
반응형