[CKS] 1-2. Security Primitives

안전한 k8s 운영을 위한 핵심 보안. 호스트, API, 통신, 네트워크 정책 강화로 앱을 보호하고 보안 위협을 해결하세요.

[CKS] 1-2. Security Primitives
Photo by Franck / Unsplash

개요

k8s는 프로덕션 레벨의 애플리케이션을 호스팅하는데 가장 많이 사용되는 플랫폼이기 때문에 보안은 매우 중요합니다. 이를 위해 어떠한 작업을 구성해야하는지 탑레벨부터 순차적으로 정리하였습니다.

Secure Cluster Hosts

모든 호스트에 대한 접근은 안전해야합니다.

  • 루트 접근 및 비밀번호 기반 인증을 비활성화합니다.
  • SSH 키 기반 인증을 활성화합니다.
  • 물리적 or Virtual host를 보호하기 위해 추가적인 조치를 수행합니다.

Secure Kubernetes

kube-apiserver는 모든 작업의 중심에 있으며, kubectl유틸리티를 통해 모든 작업을 수행할 수 있습니다. 이러한 작업은 모든 클러스터 운영을 관장할 수 있기 때문에 매우 중요하며 다음 두가지 질문을 반복적으로 수행해야합니다.

1. 누가 클러스터에 접근할 수 있는가(Authentication)

  • API Server 접근은 강력한 인증 메커니즘을 통해 관리해야합니다.
    • 사용자 ID와 비밀번호가 포함된 정적 파일
    • 토큰
    • 인증서
    • LDAP와 같은 외부 공급자와의 통합
    • Service Accounts

2. 접근한 사람이 무엇을 할 수 있는가(Authorization)

  • 사용자 또는 서비스가 인증되면 권한 부여 메커니즘이 클러스터에서 허용되는 작업을 결정합니다
    • 역할 기반 접근 제어(RBAC)
    • 속성 기반 액세스 제어(ABAC)
      • 정의된 정책(Policy)에 따라 다양한 '속성(Attribute)'을 평가하여 접근 허용 여부를 동적으로 결정합니다.
        • 여기서 속성은 사용자, 접근하려는 자원, 현재 환경 등 다양한 요소가 될 수 있습니다.
        • 다양한 속성을 고려할 수 있으므로 자유도가 높지만 정책이 매우 복잡해집니다.
    • 노드 권한 부여
    • 웹훅 기반 권한 부여

Secure Intra-Cluster Communications

쿠버네티스 보안의 핵심 요소는 다양한 클러스터 구성 요소 간의 통신을 보호하는 것입니다. etcd 클러스터, kube 컨트롤러 관리자, 스케줄러, API 서버, 워커 노드 구성 요소(kubelet 및 kube-proxy 포함) 등 구성 요소 간의 모든 상호작용은 TLS 암호화를 통해 보호됩니다.

Secure Network Policies Within the Cluster

기본적으로 쿠버네티스 클러스터 내의 파드(pod)는 서로 자유롭게 통신할 수 있습니다. 원치 않는 접근을 제한하고 보안을 강화하기 위해 네트워크 정책을 구현할 수 있습니다. 이러한 정책을 통해 파드 간의 트래픽 흐름을 제어할 수 있으며, 클러스터 내 애플리케이션 간 통신 보안에 필수적인 요소를 구성해야합니다.

이를 바탕으로 Kubernetes의 주요 보안 기본 요소에 대한 개요를 정리하면 다음과 같습니다.

  • 클러스터 호스트 보안
  • API 서버에 대한 강력한 인증 및 권한 부여 방법
  • 클러스터 내부 통신에 TLS 암호화 사용
  • Pod 간 통신을 위한 네트워크 정책 구현